1 sql语句是写法顺序及执行顺序
语法顺序:SELECT(DISTINCT) --> FROM -->WHERE -->GROUP BY-->HAVING -->UNION-->ORDER BY
执行顺序:FROM --> WHERE -->GROUP BY -->HAVING -->SELECT(DISTINCT) -->UNION -->ORDER BY
注意事项:
1) 数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
2) 不能在 WHERE 中使用在 SELECT 中设定别名的字段作为判断条件
2 引用表
1 INNER JOIN 和 OUTER JOIN
INNER JOIN (或者JOIN) :
SELECT * FROM PEOPLE JOIN ID ON PEOPLE.ID = ID.ID
一个人对应一个身份证号
OUTER JOIN(或者LEFT OUTER JOIN,RIGHT OUTER JOIN或者FULL OUTER JOIN)
SELECT * FROM PEOPLE LEFT OUTER JOIN ID ON PEOPLE.ID = ID.ID
每个人对应每个身份证号;没有身份证号的人也会查询出来
2 IN 和 EXISTS
IN:
SELECT * FROM PEOPLE WHERE PEOPLE.ID IN (SELECT ID.ID FROM ID )
EXISTS:
SELECT * FROM PEOPLE WHERE EXISTS(SELECT 1 FROM ID WHERE ID.ID = PEOPLE.ID)
1)IN 比 EXISTS 可读性更好
2)EXISTS 比 IN表达性更好(适合复杂的查询语句)
3 NOT IN 和 NOT EXISTS
与IN 和 EXISTS 相反
3 派生表
派生表就是括号中的子查询:
SELECT * FROM (SELECT * FROM PEOPLE JOIN ID ON PEOPLE.ID = ID.ID) a
或者也可以给经常用的派生表创建一个视图:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
4 GROUP BY 是对表的引用进行的操作
当应用 GROUP BY 的时候, SELECT 后没有使用聚合函数的列,都要出现在 GROUP BY 后面:
SELECT PEOPLE.SEX ,COUNT(SEX) FROM PEOPLE GROUP BY PEOPLE.SEX
需要注意的是:其他字段能够使用聚合函数; MySQL 并不坚持这个标准
5 SQL 语句中的 SELECT 实质上是对关系的映射
SELECT 语句就像一个“投影仪”,可以将其理解成一个将源表中的数据按照一定的逻辑转换成目标表数据的函数。
通过 SELECT语句,能对每一个字段进行操作,通过复杂的表达式生成所需要的数据。
SELECT 语句有很多特殊的规则,至少应该熟悉以下几条:
- 仅能够使用那些能通过表引用而得来的字段;
- 如果有 GROUP BY 语句,只能够使用 GROUP BY 语句后面的字段或者聚合函数;
- 当语句中没有 GROUP BY 的时候,可以使用开窗函数代替聚合函数;
- 当语句中没有 GROUP BY 的时候,不能同时使用聚合函数和其它函数;
- 有一些方法可以将普通函数封装在聚合函数中;
6 SQL语句中几个关键词
- DISTINCT 在映射之后对数据进行去重
- UNION 将两个子查询拼接起来并去重
- UNION ALL 将两个子查询拼接起来但不去重
- EXCEPT 将第二个字查询中的结果从第一个子查询中去掉
- INTERSECT 保留两个子查询中都有的结果并去重