SQL的分类

  • DDL:数据定义语言
    • CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE
  • DML:数据操作语言
    • INSERT \ DELETE \ UPDATE \ SELECT
  • DCL:数据控制语言
    • COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE

学习技巧:
大处着眼、小处着手

Windows环境下大小写不敏感
Linux环境下大小写敏感

  • 书写规范
    • 数据库名、表名、表别名、字段名、字段别名等都小写
    • SQL关键字、函数名、绑定变量等都大写

数据导入指令

导入现有的数据表

  • 命令行 source 文件的全路径名
  • 基于图形化界面的工具导入

最基本的SELECT语句

SELECT

SELECT 字段1,字段2,… FROM 表名

    • 表示的是表中的所有的字段或列
      1. SELECT * FROM employees;
      1. SELECT employee_id,last_name,salary
      2. FROM employees;

列的别名

  • as:全程是alias(别名),可以省略
  • 列的别名可以使用一对””引起来
  • 当起的别名需要中间加空格,可以使用””

    1. SELECT employee_id emp_id,last_name AS lname,department_id "部门id",salary*12 "annual sal"
    2. FROM emplyees;
  • 不要使用 ‘’,

  • 字符串、日期时间类型的变量需要使用 ‘’ 表示

去除重复行—DISTINCT

查询员工表中一共有那些部门id?

  • 错误的,没有去重

    1. SELECT department_id
    2. FROM employees;
  • 正确的,去重

    1. SELECT DISTINCT department_id
    2. FROM employees;
  • 一些错误的使用 ```sql SELECT salary,DISTINCT department_id FROM employees;

仅仅没有报错,但没有实际意义

SELECT DISTINCT department_id,salary
FROM employees;

  1. <a name="x7fvF"></a>
  2. ## 空值参与运算
  3. - 空值:null
  4. - null不等同于0,' ','null'
  5. - 空值参预算:结果一定也为空
  6. ```sql
  7. SELECT employee_id,salary "月工资",salary*(1+commission_pct)*12 "年工资"
  8. FROM employees;

解决方案:若是null,则替换为0。引入IFNULL

  1. SELECT employee_id,salary "月工资",salary*(1+IFNULL(commission_pct,0))*12 "年工资"
  2. FROM employees;

着重号

  • ``
  • 当字段名或表名与 保留字、关键字重名了
    1. SELECT * FROM ORDER
    1. SELECT * FROM `ORDER`

    查询常数

    在查询结果中增加一列固定的常数列
    1. SELECT '尚硅谷',123,employee_id,last_name
    2. FROM employees

    显示表结构

    显示表中字段的详细信息 ```sql DESCRIBE employees;

DESC employees;

  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/22283367/1642319662216-c6aa96f2-8c5d-40ce-8641-27f38a67a8ff.png#clientId=ub13f6f4c-5d85-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=401&id=uf920cd0a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=401&originWidth=781&originalType=binary&ratio=1&rotation=0&showTitle=false&size=119112&status=done&style=none&taskId=u607eee90-be62-4151-bc04-f58456937f4&title=&width=781)
  2. <a name="SNump"></a>
  3. ## 使用WHERE过滤数据
  4. - 过滤条件:WHERE
  5. - 声明在FROM的后面
  6. ```sql
  7. # 查询90号部门的员工的信息
  8. SELECT *
  9. FROM employees
  10. WHERE department_id = 90;
  1. # 查询last_name为'King'的员工的信息
  2. SELECT *
  3. FROM employees
  4. WHERE last_name = 'King';

课后练习

  • 查询员工12个月的工资总和 ,起别名为ANNUAL SALARY

    1. SELECT employee_id,last_name,salary*12*(1+IFNULL(commission_pct,0)) "ANNUAL SALARY"
    2. FROM employees;
  • 查询employees表中去重job_id以后的数据

    1. SELECT DISTINCT job_id
    2. FROM employees;
  • 查询工资大于12000的员工姓名和工资

    1. SELECT last_name,salary
    2. FROM employees
    3. WHERE salary > 12000;
  • 查询员工号为176的员工的姓名和部门号

    1. SELECT last_name,department_id
    2. FROM employees
    3. WHERE employee_id = 176;
  • 显示表departments的结构,并查询其中的全部数据 ```sql DESC departments;

SELECT * FROM departments; ```