1.分组需要注意
1.聚合函数只能出现在以下3个地方
字段列表中
having子句中
order by 子句中
2.where,group by、having、order by子句如果同时出现在一个查询语句中,则先后顺序是
1. where
2.先写group by
3.再写having
4.再写order by
3.根据哪一个字段分组,查询时,就只能查询哪个字段,或聚合函数。
2.连接查询(多表连接查询,多表查询)
1.笛卡尔积
一定会在内存中,搞一张大表出来的!
比如,A表有10行,B表有10行,A,B表的笛卡尔积就是100行!
如果,A表1千万行,B表有1亿行,A,B标的笛卡尔积,就很恐怖啊!有可能会造成内存溢出!
2.内连接(inner join)
内连接与笛卡尔积十分相似,最终的结果也是一样的,但是内连接不会先搞一张大表,而是在两张表拼接的时候,同时判断条件!
所以内连接根本就没有大表的产生!
3.外连接
左外连接(left join)
右外连接(right join)
查询所有员工的姓名,工资,及其工资的级别。
4.自连接
一张表,自己连接自己就是自连接。
显示所有员工的上级领导的姓名
3.子查询
1.按子查询出现的位置
where型子查询
from型子查询
2.按子查询返回的结果
标量子查询: 返回一行一列的结果
在> < = != <= >=之后,只能跟标量子查询!
列子查询 : 返回多行一列的结果
all、any、in、not in、some(等价于any)
>all比最大的大 < all 比最小的小
>any比最小的大 < any 比最大的小
行子查询 :返回一行多列的结果
表子查询 :返回多行多列的结果
3.使用子查询作为update语句中的新值
1.聚合函数只能出现在以下3个地方
字段列表中
having子句中
order by 子句中
2.where,group by、having、order by子句如果同时出现在一个查询语句中,则先后顺序是
1. where
2.先写group by
3.再写having
4.再写order by
3.根据哪一个字段分组,查询时,就只能查询哪个字段,或聚合函数。
2.连接查询(多表连接查询,多表查询)
1.笛卡尔积
一定会在内存中,搞一张大表出来的!
比如,A表有10行,B表有10行,A,B表的笛卡尔积就是100行!
如果,A表1千万行,B表有1亿行,A,B标的笛卡尔积,就很恐怖啊!有可能会造成内存溢出!
2.内连接(inner join)
内连接与笛卡尔积十分相似,最终的结果也是一样的,但是内连接不会先搞一张大表,而是在两张表拼接的时候,同时判断条件!
所以内连接根本就没有大表的产生!
3.外连接
左外连接(left join)
右外连接(right join)
查询所有员工的姓名,工资,及其工资的级别。
4.自连接
一张表,自己连接自己就是自连接。
显示所有员工的上级领导的姓名
3.子查询
1.按子查询出现的位置
where型子查询
from型子查询
2.按子查询返回的结果
标量子查询: 返回一行一列的结果
在> < = != <= >=之后,只能跟标量子查询!
列子查询 : 返回多行一列的结果
all、any、in、not in、some(等价于any)
>all比最大的大 < all 比最小的小
>any比最小的大 < any 比最大的小
行子查询 :返回一行多列的结果
表子查询 :返回多行多列的结果
3.使用子查询作为update语句中的新值