学习需要的 SQL 文件:点击下载

1. SQL 分类

  • DDL 数据定义语言
  • DML 数据操作语言
  • DCL 数据控制语言

2. 基本规则 & 规范

  • 每条命令使用 ;\g 或者 \G 来结束;
  • Windows 系统不区分大小写,Linux 系统区分大小写;
  • 数据库名、表名、字段名等使用小写;
  • 关键字、函数名等使用大写;

3. 注释

a. 单行注释(写法一)

使用 # 注释

#我是单行注释

b. 单行注释(写法二)

使用 -- 注释,需注意的是,-- 后面有一个空格

-- 我是单行注释

# 下面这个是错误的
--我是单行注释

c. 多行注释

使用 /* 开头,*/ 结尾来实现多行注释,并且无法嵌套

/*
我是多行注释
我是多行注释
我是多行注释
*/

# 下面这个是错误的
/*
我是多行注释A
/*
我是多行注释b
*/
我是多行注释C
*/

4. 导入数据表

a. 使用 source 关键字导入

source 文件全路径名称
mysql> source d:\atguigudb.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
......

b. 使用图形化工具导入

image-20230716103008456

5. 基础 SELECT 语句

查询的结果叫做结果集ResultSet

SELECT 字段名1,字段名2... FROM 表名;

想要查询所有字段名,可以使用 * 表示所有字段名

SELECT * FROM 表名;

image-20230716103329870

image-20230716103350518

6. 列的别名

使用 as 关键字,是 alias 单词的缩写,同时关键词可以省略,在有些时候别名因为有空格或者关键字冲突等情况下,可以使用双引号或者反引号括起来。

SELECT CONCAT(first_name," ",last_name) as employee_name FROM employees;

image-20230716103919291

SELECT CONCAT(first_name," ",last_name) as "name" FROM employees;

image-20230716104033331

7. 去除重复行

在查询字段前使用 DISTINCT 关键字

SELECT DISTINCT department_id FROM employees;

image-20230716104259749

但是这种方法并不是完美的,如果我们在加上其他字段,得到的就是不是我们预期的结果

SELECT DISTINCT department_id,salary FROM employees;

image-20230716104456395

它给出的结果是两个字段全部不重复的结果

8. 空值参加运算

使用 IFNULL 函数

SELECT first_name,last_name,IFNULL(commission_pct,-1) FROM employees;

image-20230716104656397

9. 着重号(反引号)

在一些字段名、表名和关键字或者函数产生冲突时使用

SELECT * FROM `order`;

order 是关键字

image-20230716105716108

10. 查询常数

查询字段名时给所有符合条件的数据添加相同的值,字符串需要添加双引号,还可以和别名搭配起来

SELECT *,"哈哈哈",999,"100元" price  FROM `order`;

image-20230716105409851

11. 显示表结构

使用 DESCRIBE 或者 DESC 关键字

DESCRIBE `jobs`;
DESC `jobs`;

image-20230716105637350

12. 过滤数据 WHERE

SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件;
# 查询部门ID为department_id的所有员工
SELECT * 
FROM `employees` 
WHERE `department_id`=90;

# 查询lastname为King的员工
SELECT * 
FROM `employees` 
WHERE `last_name`="King";

# 如果查询条件 last_name="king" 查询结果和上面一样,这是MySQL宽松的SQL规范造成的。

image-20230716101613212

image-20230716101629429

image-20230716101706381

13. 练习

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

SELECT `employee_id`,`first_name`,`last_name`,
`salary`*12+IFNULL(`commission_pct`*salary,0) 
as "ANNUAL SALARY" 
FROM `employees`;

image-20230716101443553

b. 查询employees表中去除重复的job_id以后的数据

SELECT DISTINCT `job_id` FROM `employees`;

image-20230716101456029

c. 查询工资大于12000的员工姓名和工资

SELECT `first_name`,`last_name`,`salary` 
FROM `employees` 
WHERE `salary`>12000;

image-20230716101505545

d. 查询员工号为176的员工的姓名和部门号

SELECT `employee_id`,`first_name`,`last_name`,`department_id` 
FROM `employees` 
WHERE `employee_id`=176;

image-20230716101520667

e. 显示表 departments 的结构,并查询其中的全部数据

DESCRIBE `departments`;

DESC `departments`;

SELECT * FROM `departments`;

image-20230716101535058

image-20230716101545291