code格式规范:
所有关键字大写,关键字右边对齐,子句缩进
列名最好和表中的列名一样(大小写一样)
SELECT name
FROM customer C
WHERE C.id NOT IN ( SELECT C1.id
FROM customer C1
WHERE C1.referee_id = 2 );
参考资料:
官方文档:【参考:MySQL :: MySQL 5.7 参考手册 :: 13 SQL 语句】
【参考:SQL中的谓词 - 知乎】
题目以类型归类,记录常用且易错的类型
【参考:584. 寻找用户推荐人 【比官方细,千字干货!】(三值运算,NULL) - 寻找用户推荐人 - 力扣(LeetCode)】
【参考:584. 寻找用户推荐人 - 简单 - 力扣(LeetCode)】
SELECT name FROM customer WHERE referee_id != 2 OR referee_id IS NULL;
【参考:183. 从不订购的客户 - 力扣(LeetCode)】
select customers.name as 'Customers' # as 别名
from customers
where customers.id not in
(
select customerid from orders
);
# 先从orders中找出customerid
SELECT c.Name as Customers
FROM Customers as c
left join Orders as o on c.Id=o.CustomerId
where o.Id IS NULL
IF( expr1 , expr2 , expr3 )
【参考:1873. 计算特殊奖金 - 力扣(LeetCode)】
【参考:MySQL, 7种解法 - 计算特殊奖金 - 力扣(LeetCode)】
SELECT
employee_id,
IF(
employee_id%2=1 and name not like 'M%',
salary,
0
) as bonus
FROM Employees
ORDER by employee_id
UPDATE Salary set sex=IF(sex='f','m','f')
UPDATE salary
SET
sex = CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END
【参考:196. 删除重复的电子邮箱 - 力扣(LeetCode)】
【参考:对「官方」题解中 “delete” 和 “>” 的解释,推荐! - 删除重复的电子邮箱 - 力扣(LeetCode)】
2、p1.Id > p2.Id
继续之前,先简单看一下表的连接过程,这个搞懂了,理解WHERE条件就简单了👇
a. 从驱动表(左表)取出N条记录;
b. 拿着这N条记录,依次到被驱动表(右表)查找满足WHERE条件的记录;
DELETE p1
FROM Person p1,
Person p2
WHERE
p1.Email = p2.Email AND p1.Id > p2.Id