高级查询 高级查询的格式: select ... 聚合函数 from 表名 where ... group by ... having ... order by ... limit ... order by 给查询结果排序语法格式: ... order by 字段名 ASC/DESC; ASC:默认,升序,DESC:降序 举个栗子:select name from stuinfo order by id desc; limit 显示查询记录的条数limit放在查询语句的最后,后边不再放其他的语句。
用法: limit n; —–> 显示 n 条记录limit m, n; —–> 从第(m+1)条记录开始,显示 n 条记录 limit 分页 要求每页显示 5 条记录,显示第 4 页的内容 第1页:limit (1-1)*5,5; # 1,2,3,4,5 第2页:limit (2-1)*5,5; # 6,7,8,9,10 第3页:limit (3-1)*5,5; # 11,12,13,14,15 ... 第m页:limit (m-1)*n,n; 由上可知:第 4 页是:limit 15,5; 聚合函数- avg(字段名):求该字段的平均值
- sum(字段名):求和
- max(字段名):求最大值
- min(字段名):求最小值
- count(字段名):统计该字段的记录的条数
举个栗子:统计id、name两个字段分别有多少条记录
select count(id),count(name) from stuinfo; group by 给查询的结果分组注意:select之后的字段名如果没有在group by之后出现,则必须要对该字段进行聚合和处理(即聚合函数)
举个栗子:查询表中有哪些国家 select country from people group by country; having语句 作用:对查询的结果进一步筛选 使用注意: having语句通常和group by语句联合使用,过滤由group by语句返回的记录集决定 where只能操作表中实际存在的字段,having语句可操作由聚合函数的显示列 举个栗子:找出平均攻击力 大于105的国家的前两名,显示国家名和平均攻击力。 select country,avg(gongjili) as average from sanguo group by country having average>105 order by average desc limit 2; 查询表记录时可以做数学运算运算符:+、-、*、/、%
举个栗子:查询时显示所有英雄攻击力翻倍 select id, name, gongjili*2 as newgjl from sanguo; 嵌套查询嵌套查询也叫子查询,是把内层的查询结果作为外层的查询条件
语法格式 select 字段名列表 from 表名 where 字段名 运算符 (select 字段名 from 表名 where 条件) 注意:外层的where的条件必须和内层的select查询的字段名一样,个数也一样
如:把攻击值小于平均攻击值的名字和攻击值显示出来(sanguo表) 我们可以分开来查,然后合并成一条语句
分析:查名字和攻击值,条件是攻击值小于平均攻击值;
第一步:先求平均值 select avg(gongjizhi) from sanguo; 假设我们用avg记录查询出来的平均值 第二步:查找攻击值小于平均值的名字和攻击值 select name, gongjizhi from sanguo where gongjizhi<avg; 第三步:将上边两条合并 select name, gongjizhi from sanguo where gongjizhi<
(select avg(gongjizhi) from sanguo); 多表查询语法格式: select 字段名列表 from 表1,表2 where 条件; 笛卡尔积的匹配规则(面试中常问) - 记录多的表的每一条记录,去匹配另一张表的所有记录;
- 两张表的记录条数相同时,则后表的每一条记录去匹配前表。
连接查询- 内连接 inner join
- 外连接
- 左连接 left join
- 右连接 right join
内连接
语法格式: select 字段名列表 from 表1 inner join 表2 on 表1.字段=表2.字段; 注意:inner 可以省略,on后边的条件在两个表中必须都存在,是连接两个表的标志。 外连接之左连接
left join
以左表为基准,匹配右表的所有内容,不够的用显示NULL 外连接之右连接
right join
以右表为基准,去匹配左表的内容,不够的也是显示NULL ---------------------
|