Ø 基本格式
Select 属性列表
From 表名和视图名列表
[where 条件表达式1]
[group by 属性名1 [having条件表达式2]]
[order by 属性名2 [asc|desc]];
属性列表:*代表选择全部属性,不然就挨个选择,中间用‘,‘隔开。如果查看的时候想换一个名字输出属性名,可以用as ‘自定义名’。例如:id as ’编号‘
表名和视图名列表:选择表,不同的表用‘,’隔开。如果后面还会用到表名,可以临时起一个简单的名称,例如:select * fromstudent s wheres.id=1;
[where 条件表达式1]:可以选择查询条件,满足条件才会输出,不同的条件可以用and/or连接。
[group by 属性名1 [having条件表达式2]]:可以分组,对于一个字段,值相同的将分为一组,经常与count(),max(),min()等函数一同使用。
Having 表达式也可以限定查询条件,而且是分组之后的查询条件,比where多了分组的内容。
[order by 属性名2 [asc|desc]]:对于输出进行排序,asc是正序,desc是逆序,默认为asc。
查询条件 | 符号或者关键字 |
比较 | =,<,<=,>,>=,!=,<>,!>,!< |
指定范围 | Between and,not between and |
指定集合 | In,not in |
匹配字符 | Like,not like |
是否为空值 | Is null,is not null |
多个查询条件 | And,or |
Ø 带in的关键字查询
[not] in(元素1,元素2)
例:select * from employee where id in(1001,1002,.1003);
Ø 带between and的范围查询
[not] between 取值1 and 取值2
例:select * from employee where age between 15 and 25;
Ø 带like的字符匹配查询
[not] like ‘字符串’
%代表任意长度字符串,_代表单个字符串。b%k可以查询到 bk,bck
Bcdk break等,b_k只能查询到bck,bdk,bok等三个字符的。
例:select * from employee where name like ‘aric%’;
Ø 查询空值
Is [not] null;
select * from employee where id is null;
Ø 带有and|or
条件表达式1 and 条件表达2
select * from employee where id i=1 and age>25;
Ø 查询结果不重复
Select distinct 属性名
例:select distinct age from employee ;
这样同一个年龄值的只会出现第一个,其他隐藏。
Ø 查询结果排序
select * from employee order by age [asc|desc];
Ø 分组查询
groupby 属性名1 [having 条件表达式2];
select* from employee group by sex;
--group_concat():该函数能显示每个分组的全部字段。
Selectsex, group_concat() from employee group by sex;
Count():统计每个分组里的数量
Selectsex ,count() from employee group by sex;
Ø Limit限制查询数量
Select* from employee limit 2;
表示只查询两行。
Select* from employee limit 3 2;
表示从第三行开始,查询两行
Ø 集合函数
Count():查询有多少行
sum():某个字段的总和
avg():某个字段的平均数咯。
max():某个字段的最大值
min():最小值
~ 连接查询
Ø 内连接
字段相同时
Select * from employee e,department dwhere e.id=d.id;
Ø 外连接
Select 属性列表
From表1 left|right join 表2
On表1.属性=表2.属性;
~ 子查询
Ø 带in的子查询
Select * from employee where d_id in
(selectid from department where id>5);
简单说就是in后面的元素可以用查询替代
Ø 带比较符的查询
Select * from students where socre>(selectscore form table01 where leve=1)
比较符后面的也可以跟子查询
Ø 带exists的子查询
Select * from students where exists (selectscore form table01 where leve=1);
就是说内层查询,没查询到,就不继续,查询到了,才经行外层查询,但内外数据没有依赖关系。
Ø 带any关键字
Select * from students where score>any(selectscore form table01 where leve=1);
Score 满足any其中的任意一个条件就可以了。
Ø 带all关键字
Select * from students where score>all(selectscore form table01 where leve=1);
Score 满足all的所有条件才能被查询到。
~ 合并查询结果
Select 语句1
Union|union all
Select 语句2
Union|union all
Select 语句N
可以把不同的查询结果合并,但字段名要一致,、
union会去掉重复部分,union all不会去掉重复部分。
~ 正则表达式查询
属性名regexp ‘正则表达式’
Select * from employ where name regexp ‘正则表达式’;
正则表达式
正则表达式的模式字符 | 含义 |
^ | 匹配字符串开始的部分 |
$ | 匹配字符串结束的部分 |
. | 代表字符串中的任意一个字符,包括回车和换行 |
[字符集合] | 匹配’字符集合’中的任意一个 |
[^字符集和] | 匹配除了’字符集合’中的任意一个 |
S1|S2|S3 | 匹配S1,S2,S3中的任意一个字符 |
* | 代表多个该符号之前的字符,包括0个和1个 |
+ | 代表多个该符号之前的字符,包括1个 |
字符串{N} | 字符串出现N次 |
字符串{M,N} | 字符串至少出现M次,至多出现N次 |
举例:
查询字符或字符串开头的记录 | ‘^L’ | Lucy Lily |
‘^aaa’ | Aaa aaabd | |
查询字符或字符串结尾的记录 | ‘c$’ | Aric eric |
‘aaa$ | aaa dadaaa | |
用‘.’来代替字符串中的任意部分 | ‘^L..y$’ | Lucy Lily |
匹配指定字符串中的任意一个字符 | ‘[ceo]’ | Aric eric jack lucy tom abc12 |
‘[0-9]’ | Abd12 ad321 | |
‘[a-c0-9]’ | Aric eric jack lucy aaa dadaaa ‘’aaabd abc12 ad321 | |
匹配指定字符以外的 | ‘[^a-w0-9]’ | Lucy Lily |
匹配指定字符串 | ‘ic’ | Aric eric |
使用*和+来匹配多个字符 | ‘a*c’ | Aric eric jack lucy abc12 |
‘a+c’ | jack | |
使用{M}或者{M,N}来指定字符串连续出现次数 | ‘ab{1,3}’ | aaabd abc12 ababb |
‘a{3}’ | aaa dadaaa aaabd |