mysql 笔记五
聚集函数
- count() 统计记录的条数
- sum() 计算字段的值得总和
- avg() 计算字段的值得平均数
- max() 最大值
- min() 最小值
group by 子句
group by 关键字可以将查询结果按某个字段或多个字段进行分组。
group by 还可以进行多个字段分组,字段间使用逗号隔开。
group by col_name1[,col_name2] [having条件表达式][with rollup]
select name,count(*) from data group by number;
# with rollup 统计最终人数
select c_name,count(*) from score group by grade with rollup;
select c_name,grade from score group by grade having grade>80;
# having 与 where 类似,限制显示,但是两者起作用的地方不一样。
# where 作用于表或视图,having作用于分组后的记录,用于选择满足条件的组。
order by 子句
order by 子句按一个或多个(最多16个)字段排序查询查询结果,可以是升序(ASC)/降序(DESC)。默认为升序。该子句通常放SQL语句的最后
Limit 子句
select_statement limit {[offset,] row_count | row_count OFFSET offset}
Select_statement :查询语句
offset: 偏移量
row_count: 取得记录的条数
// 返回 2~3行记录
select * from data limit 1,2;
union 合并结果集
select name from student
union
select c_name from score;
查询需要满足相容性
子查询
可以组合使用两个查询,即将一个查询放置到另一个查询的内部,内部的查询称为子查询。
where型子查询
where型子查询即把内部查询结果当作外层查询的比较条件
查询比 张三 年龄大的同学的信息
'' select * from student where brith < (select brith from student where name='张三')''
from 型子查询
- 带 IN 关键字
- 带 ANY 关键字
- 带 ALL 关键字
exists 型子查询
exists 关键字表示存在, 使用exists 关键字时, 查询语句不返回查询的记录
注意点:
- 内查询语句
当查询到满足条件的记录,返回 True ; 否则 false
- 外查询语句
当查询为真时,使用外查询进行查询;否则外查询不进行查询
连接查询
连接查询即从笛卡尔积中找出满足条件的行
select 字段表 from 表1 left | right [outer] join 表2 on 表1.字段 = 表2.字段
- 当 from 子句 指定两张或两张以上的表时。叫做表的连接(join),进行比较的两列叫做连接条件。
- 连接分为内连接和外连接, 即 inter和outer,默认是内连接
- 外连接分为 left , right ,即左连接 , 右连接
- 两个表中重复的属性需要使用点操作符 “表名.列名”指定来自于那个表
- 所有属性都可以指定其来自于哪个表,这可以提高查询的可读性。
内连接
内连接查询是最常用的一种查询,也称为等同查询,就是在表关系的笛卡尔积数据记录中,保留表关系中所有相匹配的数据,而舍弃不匹配的数据。
- 等值连接(inner join)
用来连接两个表的条件称为连接条件,如果连接条件中的连接运算符是 = 时,称为等值连接。
- 自然连接(natural join)
自然连接操作就是在表关系的笛卡尔积中,首先根据表的关系中相同名称的字段进行记录匹配,然后去掉重复的字段,还可以理解为在等值连接中把目标列中重复的属性列去掉,则为自然连接。
- 不等值连接(inner join)
用来连接两个表的条件称为连接条件,如果连接条件中的连接运算符是 = 时,称为等值连接。 如果时其它的运算符,则是不等值连接
外连接
-
左连接
-
右连接
注意
-
子查询通常是令某一表的查询结果作为外层查询的条件,查询的结果只来自一张表,这种情况通常使用子查询。
-
查询结果来自于不同表,这种情况通常使用连接查询。