(一)基本框架
*代表的搜索所有列,可以替换成你要搜索的那一列也可以,搜索的列与列之间用逗号搁开
like ‘aa&’代表的是包含aa的, like 'aa_'代表的是aa后边有一个字符的
当有多个条件的时候用and连接
当同一类条件要求有多个备选值的时候用in
select *
from table1
where name='zs' and age=12 and born like 'ab&' and love in(203,456)
#love(203,456)意思是喜欢203和456的
(二)复杂查询
1.from复杂
连表
将2个表连在一起,用join
select *
from table1 join table2
如果要将表2中的与表1对应的几个添加到表1中,用on
select *
from table1 join table2 on table1.name = table2.name
join on是按照name连成一个表,两个表中如果通过name互相找不到的数据将会舍弃,就相当于2个集合的交集
inner join on只保留name相同的行,同join on,为了与下边有区别而已
外连接 outer join
left join on返回左表中所有的字段和右表中相匹配的字段
right join on返回右表中所有的字段和左表中相匹配的字段
full join on返回两个表中的所有的字段
2.select复杂
count计数
select count(*)
from table1
where year=1999
#看1999年的有几条
max最大值 min最小值 avg平均值 sum总和
select *,max(year)
from table1
#返回年份最大的所有信息,如果不加 *, 就是单纯的返回最大年份的那个值
group by分组
select year,count(*)
from table1
where 1
group by year
#按照年份分组,并进行计数,看每个年份有的数量,并返回year列 也可以不返回
表达式 as xxx通过表达式计算定义一个新的属性xxx,
order by排序
select *
from table1
order by year ASC/DESC
#按照年份排序,升序/降序
having可以对分组之后的数据再做select筛选
按导演分组计算销售总额,求出平均销售额冠军(统计结果过滤掉只有单部电影的导演,
列出导演名,总销量,电影数量,平均销量)
select director,SUM(sale1+sale2) as sale,count(title) as Total,
sum(sale1+sale2)/count(title) as average
from movies left join Boxoffice on movies.Id = Boxoffice.Movie_id
group by Director
HAVING COUNT(Title) > 1
ORDER BY average DESC
LIMIT 1;
null 代表无,没有,空的意思