1、union
联合查询,使用关键字union,其前后为查询字段数相等的select语句。查询结果是先输出前表的行,再输出后表的行。
union后可以使用关键字all或者distinct,分别表示不去重和去重。去重指的是将重复的行只保留最开始的一行,判断依据是前后按序对应的查询字段,只区分字面量,而不关心数据类型。
select ... union select ...
2、order by
排序,使用关键字order by
order by 字段1,字段2;
order by 1,2;
可以使用字段序号替代字段名称,从1开始,超出范围会报错
同时使用多个字段排序,先根据前者进行排列,如果前者无法区分,再看后者
对每个排序字段都可以声明asc|desc,默认是asc升序。
order by是在where之后,limit之前设置和执行。
3、limit
限制输出条目。
limit n,m;
limit m;
limit m offset n;
- 从n开始,输出m行
- n为0,表示输出前m行。
- n或m超出表达范围可以执行,n超出则返回空,m超出则输出n后实际的行
分页查询是一个重要功能,前端x表示页数,从1开始,y表示每页的行数。sql语句为limit (x-1)*y,y
4、group by
4.1 group by
- group by 后跟分组字段,可以一个,也可以多个
- group by 和order by在一个select中无法同时使用
- 查询字段并不要求必须有分组字段,可以是任意,一般会有聚合函数count、sum、max、min或avg
- group by后可以追加having结构,用于筛选聚合函数条件
select 查询字段,聚合函数 from table_name group by 分组字段 having 聚合函数条件
5、连接
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
5.1 内连接
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
说明:表a的某字段x和表b的某字段关联y,x与y存在相同值的集合k,x=值k1在表a中有a1行,y=值k1在表b中有b1行,即值k1对应a1*b1行交叉组合的临时数据。
类似的k2,k3…,依次组合,合并为一张表。
5.2 左连接
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
说明:表a的某字段x和表b的某字段关联y,x在表a具有n种值,y在表b具有m种值,按照x值依次判断处理。如果x值在表b中的y也存在,则与内连接一致。如果x值在表b中的y不存在,则视为表b中有一行字段值全为null的数据与x进行匹配。
依次组合,合并为一张表。
5.3 右连接
和左连接类似,只是判断时以表b为准。
标签:group,author,runoob,高级,查询,tbl,mysql,JOIN From: https://www.cnblogs.com/wd404/p/17332090.html