[toc]
select 属性列表 from 视图或表 where 条件 group by 属性名1 [having 表达式2 ]order by 属性名2 [asc|desc]
单表查询:
查询条件列表
查询条件 | 关键字 |
---|---|
比较 | =,<,<=,>=,!=,<>,!>,!< |
指定范围 | between and, not between and |
指定集合 | in, not in |
匹配字符 | like , not like |
是否为空值 | is null, is not null |
多个查询条件 | and ,or |
查询所有字段
select * from table;
查询指定字段:
selecct name from users;
查询指定记录:
select * from users where id= 1001;
带 in关键字的查询
如果user表中,id在(1001,1004)列表中则为结果
select * from user where id in(1001,1004);
带between and 范围查询
user表中,id在1001至1005范围区间则为结果
select * from user where id between 1001 and 1005
带like的字符匹配查询
模糊匹配查询
- % : 任意一个或多个字符,匹配act1,act2,actd等以act开头的所有则为结果
- _ : 任意一个字符 ,仅此一个,act1为匹配,act1111则不会匹配
select * from where like 'act'%;
查询空值:
select * from work where info is null;
带and 的多条件查询:
select * from user d_id = 1001 and sex like '男';
带or的多条件查询
select * from user where id =1001 or sex like '喃';
查询结果不重复
去重操作,类似于set集合
select distinct id fom user;
对查询结果排序
- desc 降序
- asc 升序
select * from user order by age desc;
分组查询
group by 关键字可以将查询结果按某个字段或多个字段进行分组。字段中值相等的为一组
group by 属性名 [having 条件表达式][with rollup]
- having 用来限制分组后的显示,满足条件被显示
- with rollup 会在所有记录的最后加上一条记录,该记录是上面所有记录的总和
group by
关键字可以和group_concat()
函数一起使用,group_concat()
函数会把每个分组中指定字段都显示出来,同时group by
关键字通常与集合函数一起使用。集合函数包括count()
,sum()
,avg()
,max()
,min()
。
单独使用group by关键字来分组
group by单独使用意义不大,配合函数才是王道
select * from user group by sex;
group_by 与group_concat()函数
每个分组中指定字段值都显示出来,下列查询语句会分两组,
男
,女
两组,并且显示所有name
字段的值,以逗号隔开
select sex,group_concat(name) from user group by sex;
group_by 与 count()函数
select sex ,count(sex) from user group by sex;
having :限制输出结果
上列语句中,可能会输出不需要的值,可以通过having来限制输出
select sex,count(sex) from user group by sex having count(sex)>=3;
group by 与with rollup 一起用
最后一条则为总和
select sex count(sex) from user group by sex with rollup;
limit 限制查询结果的数量
limit 初始位置,记录数
select * from user limit 2;
select *from user limit 0,10;
集合函数
count() 计数
统计总和个数
select count(*)from user;
sum()求和
select num,sum(score)from grade where num=1000;
avg()求平均值
select course,avg(socre)from grade gorup by course;
max()最大值
select max(age) from table1;
min()最小值
select min(age) from table1;
连接查询
连接查询能将两个或两个以上的表按某个条件连接起来,从中选取需要的数据,连接查询是同时查询两个或两个以上的表时使用
内连接查询:
select class1.name ,class2.name from class1,class2 where class1.id=class2.id;
外连接查询:
- left 查询第一个表的所有数据,第二个表只查询匹配的数据
- right 与left相反
select 属性名列表 from 表1 left|right join 表2 on 表1.属性名= 表2.属性名
子查询
带in关键字子查询
子查询将一个查询语句嵌套在另一个查询语句中,内层的查询结果将作为外层查询条件
select * from user where id in(select id form depat);
select name,score from computer_stu where score >=(select ....)
带比较运算符的子查询
select * from user where age>=(select ...)
带exists关键字的子查询
不返回数据,返回真假
select * from user where exists (select ....)
带any关键字的子查询
当子查询返回的任何一个值满足
select *from computer_stu where score>=any (select ...)
带all 关键字的子查询
当子查询任何值都必须满足
select * from computer where score>all(select ....)
合并查询
将查询结果合并在一起
select 语句1 union|union all select 语句2 union |union all
为表取别名
表名 表的别名
或 表名 as 表的别名
select name as 名称 from userr;
使用正则表达式:
正则表达式 | 含义 |
---|---|
^ | 匹配开始部分 |
$ | 匹配结束部分 |
. | 代表任意一个字符 |
[abc] | 匹配‘abc’中任意一个字符 |
[^abc] | 匹配除了'abc'中任意一个字符 |
a| b | c | a,b,c任意一个字符 |
* | 代表多个该符号之前的字符,0和1个 |
+ | 代表多个符号之前的字符,1个 |
字符串{N} | 出现N次 |
字符串{M,N} | 至少M次,最多N次 |
select * from info where name regexp '^L';
网友评论