select语句
2018-07-05 week4 21:19:18 by 天上的蝎子
1. select基本查询
select语句的一般格式如下:
select [all | distinct] <目标列表达式>[, <目标列表达式>] from <表名或视图名>[, <表名或视图名>] [where <条件表达式>] group by <列名1> [having <条件表达式>] order by <列名2> [asc | desc] [limit [start,] count]; 参数说明如下: - group by将查询结果进行分组。 - limit方便查找限定个数的结果。
2. 条件查询
- 常见的关系运算符:
符号 | 意义 | 符号 | 意义 |
---|---|---|---|
= | 等于 | >= | 大于等于 |
> | 大于 | <= | 小于等于 |
\< | 小于 | !=或\<> | 不等于 |
2. 模糊查询
基本语法:[not] like \<匹配字符串>
%:代表任意多个字符
_:代表任意一个字符
如果用户要查询的字符串本身就包含通配符,那么必须使用escape关键字进行转义。
eg: select * from user where username like ‘%\_%’ escape ‘\’;
查询用户名中含有下划线的用户所有信息。
3. 分组查询
- 聚合函数
聚合函数 | 说明 |
---|---|
SUM() | 返回某列所有值的和 |
AVG() | 返回某列的平均值 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
COUNT() | 返回某列的行数 |
其中,COUNT(*)对查询结果中的所有行进行计数,COUNT(列名)、SUM()、AVG()、MAX()、MIN()函数都忽略列值为NULL的行。
- group by 子句
通过分组可以使用聚合函数对结果集进行统计。
eg: 检索平均成绩高于70分的学生信息及平均成绩,结果按平均分降序排序。
select Student.Sno,Student.Sname,Student.Sex,Department.Dname,AVG(SC.Grade) as '平均成绩'
from Student inner join SC inner join Department
on Student.Sno = SC.Sno and Student.Dno = Department.Dno group by SC.Sno
having AVG(SC.Grade) >= 70 order by AVG(SC.Grade) desc;
- having 子句
分组之后对这些组进行筛选,使用 having 子句。
where 子句作用的对象是基本表或视图,having 子句作用的对象是组。
4. 表的连接
多表连接的语法格式如下:
select <查询列表> from <表名1> [连接类型] join <表名2> on <连接条件> where <查询条件>;
- 内连接
从两个或两个以上的表的组合中,挑选出符合连接条件的数据,如果数据无法满足连接条件,则将其丢弃。
eg: 检索成绩低于80分学生的学号和姓名及该科目成绩。
select SC.Sno as '学号',Sname as '姓名',Grade as '成绩'
from SC inner join Student where Grade <= 80 and SC.Sno = Student.Sno;
外连接
在外连接中,以主表中每行的数据去匹配从表中的数据行,满足连接条件则返回到结果集中;如果没有找到匹配行,则主表的行仍然保留,并且返回到结果集中,相应的从表中的数据行被填上NULL值也返回结果集中。交叉连接
如果没有where子句,则返回的结果集是被连接的两个表的笛卡尔积;如果交叉连接带有where子句时,则返回结果为连接两个表的笛卡尔积减去where子句所限定而省略的行数。
5. 子查询
在一个select语句中的 where 、having 子句中包含另一个 select 子句。
1. 返回单行的子查询
子查询只返回一个值,可以在主查询where其他值进行比较。
2. 返回多行的子查询
子查询返回多行数据,必须和关键字 in 、 exist 、 all 、 any 、 some 等关键字一起使用。
其中,all 、 any 、 some等关键字语法格式如下:
where <表达式> <比较运算符> [all | any | some] (<子查询>);
- 子查询与数据更新
子查询可以与 insert 、 update 、 delete 结合,进行批量数据更新。
将子查询的结果作为数据源insert其他表。
将子查询的结果作为where子句的条件值之一。
将子查询的结果作为条件批量删除数据。
6. 联合查询
语法格式如下:
seletc 语句1 union [union] select 语句2;
注意,数据格式必须兼容。