1.基本查询
select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句];
[all | distinct]
用于设定所select出来的数据是否允许出现重复行(完全相同的数据行)
all:允许出现——默认不写就是All(允许的)。
distinct:不允许出现——就是所谓的“消除重复行”。
[where子句]
between:
XX between 值1 and 值2;
含义:字段XX的值在值1和值2之间(含值1和值2),相当于:XX >=值1 and XX<=值2;
in:XX in (1,2,3,4,5) XX not in ()
Xx = 1 or xx = 2 or xx =3...
XX in (值1,值2,......);
含义:XX等于其中所列出的任何一个值都算成立,相当于:
XX = 值1 or XX = 值2 or XX = 值2
like(模糊查找):
语法形式: XX like ‘要查找字符’;
% 代表任意个数的任意字符
_代表1个任意字符
'%a' 以a结尾的数据
'a%' 以a开头的数据
'%a%' 含有a的数据
'_a_' 三位且中间字母是a的
'_a' 两位且结尾字母是a的
'a_' 两位且开头字母是a的
[group by分组子句]
形式:group by 字段1 排序方式1,字段2 排序方式2, ......
分完组后还能用的值:
1.本身依据值(分组字段的值)
2.组内成员的个数,组内某些字段的最大值、最小值、平均值、总和值
其他字段,通常就不能用了。
在分组查询中,基本都依赖于一下几个函数(聚合函数,统计函数):
count(*): 统计一组中的数量,通常用“*”做参数
max(字段名):获取该字段中在该组中的最大值。
min(字段名):获取该字段中在该组中的最小值。
sum(字段名):获取该字段中在该组中的总和。
avg(字段名):获取该字段中在该组中的平均值。
group_concat(字段名):获取该分组内的这个字段所有信息,每条逗号分隔
[having子句]
having必须在group by之后
[order by子句]
形式:order by 排序字段1 [排序方式], 排序字段2 [排序方式], ......
正序: ASC(默认值),可以省略
倒序: DESC 从大到小
[limit子句]
形式:limit [起始行号start], 要取出的行数num
起始行号start:第一行的行号为0,不写则默认为第一行
2.连接查询:扩充字段
select stu.sno,sc.cno,sc.degree from student stu join score sc on stu.sno=sc.sno;
3.联合查询:添加数据
select sno,sname from student union select tno,tname from teacher;
4.子查询:把查询结果当条件
select sno,cno from score where degree=(select max(degree) from score);