- 排序
默认情况下,系统会按照数据添加进数据库的顺序进行排序,即时间顺序
1.1 ORDER BY
SELECT 字段名 FROM 表名 ORDER BY 需要排序的字段名 DESC/ASC(根据指定字段的值对查找的数据进行排序,DESC为降序,ASC为升序,默认为升序,)
1.2 SELECT , WHERE, ORDER BY同时出现的执行顺序:
先 WHERE 再 SELECT 最后 ORDER BY
比如再SELECT中查询字段的时候取别名,WHERE不能使用该别名.而ORDER BY 可以
且,格式也要按照 SELECT 字段 FROM 表 WHERE 条件 ORDER BY 字段 的顺序来写.
1.3 多列排序
想要对多个字段排序时
SELECT 字段名 FROM 表名 ORDER BY 字段A DESC/ASC , 字段B DESC/ASC…
先按照字段A进行排序,在字段A排完序的基础上,相同的值再按照字段B进行排序… - 分页
2.1 LIMIT
SELECT 字段名 FROM 表名 LIMIT A,B;(A表示偏移量,B表示查询的数量,即从表中的第A+1个开始查找, 一共查询B个)
注:MYSQL8.0新特性 : LIMIT A OFFSET B (其中A表示查询数量.B表示偏移量)
如:分页查找,每页10条数据,
第一页 :SELECT * FROM 表名 LIMIT 0,10;
第二页: SELECT * FROM 表名 LIMIT 10,10;
第三页 SELECT * REOM 表名 LIMIT 20,10;
可得公式:LIMIT (pageNum-1)*pageSize,pageSize;(pageNum表示第几页,pageSize表示每页几个).
2.2 WHERE ORDER BY LIMIT 的声明顺序(不是执行顺序)
SELECT … FROM … WHERE … ORDER BY … LIMIT … - 多表
3.1 多表查询
需要表与表之间有共有的字段,这里假设为字段C
错误方式:SELECT 字段A , 字段B FROM 表A , 表B(这样会查询出表A和表B组合的所有结果,即迪卡尔积)
正确方式 :SELECT 字段A , 字段B FROM 表A , 表B WHERE 表A.字段C = 表B.字段C
注:当出现的字段名在多个表中(两个或多个)都含有时,要说明是哪个表中的字段,即 表名.字段名
如果表的名字比较复杂,可以在FROM 的时候,给表起别名,但是一旦有了别名,就只能使用表的别名.
3.2 多表查询的分类
等值连接,非等值连接:
在WHERE 后的条件,多个表之间用等号连接即 等式就是等值连接
在WHERE 后的条件,多个表之间用的不是等号而是大于小于等别的,就是非等值连接
自连接,非自连接:
不同的表之间的相互连接就是非自连接
自己连接自己就是自连接(如,找自己的一个字段值与另一个字段值相同的情况下,可以使用自连接)
内连接,外连接
内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行(一般的查询都是内连接)
或者使用 : SELECT * FROM 表名 JOIN 表名 ON 条件(后可跟多个JOIN ON)
外连接:合并具有同理列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,还可以查询到左表或右表中不匹配的行.
左外连接:两个表在连接过程中除了返回满足连接条件的行以外,还返回左表中不满足条件的行
SELECT * FROM 表名 LEFT JOIN 表名 ON 条件(后可跟多个JOIN ON)
右外连接:两个表在连接过程中除了返回满足连接条件的行以外,还返回右表中不满足条件的行
SELECT * FROM 表名 RIGHT JOIN 表名 ON 条件(后可跟多个JOIN ON)
UNION关键字
利用UNION关键字,可以给出多条SELECT语句,并将他们的结果组合成单个结果集.合并时,两个表对应的列数和数据类型必须相同,并且相互对应.各个SELECT 语句之间 使用UNION或者UNION ALL 关键字分隔.
语法格式: SELECT* FROM 表名 UNINO/UNION ALL SELECT * FROM 表名(UNINO会去重,UNINO ALL 不会)
七种JOIN - 上图中的 FULL , MYSQL不支持这种写法