一.exists和in
1.IN:先查询子查询的表,然后内外表作笛卡尔积,然后按照条件筛选出对于的行。
内表较小时,适合使用IN语句。(先子查询,后主查询与其作笛卡尔积)
2.EXISTS:先查询主查询的表,然后对于主查询的表中的每一条记录,执行子查询,判断是否符合子查询中的相关条件。(先主查询,后逐条记录根据子查询判断)
3.区别:两个语句执行的相关流程不同,所以在遇到不同数量级的表时,应该选择正确的语句。(1)使用IN:主查询的表的记录较多时,子查询的表的记录较少时,使用IN。(2)使用EXISTS:主查询的表记录较少,子查询的表的记录较多。
二.IF语句
IF(判断条件,返回值1,返回值2)
解析:IF根据判断条件的True或者False来判断返回哪一个返回值,当判断条件为TRUE时(即不为0或者null),则返回返回值1,若为FALSE,则返回返回值2。
返回值可以为字符串或者是number。
三.CASE的用法
目前只是学习了在SELECT语句中使用CASE语句,但是CASE语句还可以在GROUP BY及ORDER BY语句中使用。这里只记录在SELECT语句中的用法。
1.CASE搭配SELECT语句
SELECT Column
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
…
ELSE 结果n
END
FROM table
四.公用表达式(CTE)
格式:WITH cte名称(列名[可选]) AS (
查询语句主体)
注意:CTE好像只能在MYSQL8.0以上的版本使用
参考博客:
1.IN OR EXISTS:https://blog.csdn.net/qq_36561697/article/details/80713824
2.IF:https://www.cnblogs.com/xuhaojun/p/9141396.html
3.CASE:https://www.cnblogs.com/dshore123/p/8126418.html
4.CTE:https://www.cnblogs.com/yanggb/p/11165276.html