SQL记录

本文最后更新于:2020年9月27日 晚上

基本语句

1
SELECT 列名称 FROM 表名称

1
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

1
DELETE FROM 表名称 WHERE 列名称 = 值

1
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

流程

逻辑判断

IF

1
IF(判断语句, 判断结果为True时的返回值, 判断结果为False时的返回值)
  • 返回值为数字值或字符串值

案例:将salary表中的记录性别进行更变

1
2
update salary set 
sex = IF(sex='f','m','f');

CASE

1
CASE 判断目标 WHEN 所期望的值 THEN 目标是期望值时所执行内容 ELSE 目标不是期望值时所执行内容 END
  • 如果没有ELSE 部分,则返回值为 NULL

案例:将salary表中的记录性别进行更变

1
2
3
4
5
6
UPDATE salary
SET
sex = CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END;

多表

JOIN

1
2
3
4
SELECT
column_name
FROM Table_name1 JOIN Table_name2
ON 连接条件
  • 符合连接条件的内容才会连接

案例
Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id
Employee 表

编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名

1
2
3
4
5
SELECT
a.NAME AS Employee
FROM Employee AS a JOIN Employee AS b
ON a.ManagerId = b.Id AND a.Salary > b.Salary

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

LEFT JOIN

1
2
3
4
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
  • 即使右表中没有匹配,也从左表返回所有的行

案例
查询两个表提供的FirstName, LastName, City, State
Person表

 PersonId 是主键

Address表

1
2
select FirstName, LastName, City, State 
from Person left join Address on Person.PersonId = Address.PersonId;

处理

排序

ORDER BY

1
2
3
SELECT column_name, column_name
FROM table_name
ORDER BY 用作排序的列名, 第二个用作排序的列名 ASC|DESC;
  • 升序ASC | 降序DESC

案例
编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列
cinema表

1
2
3
select * from cinema 
where mod(id, 2)=1 and description != "boring"
order by rating DESC

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!