mysql⽤来连接查询条件的关键字_MySQL查询
⼀、MySQL中select的基本语法形式:
select 属性列表
from 表名和视图列表
[where 条件表达式1]
[group by 属性名1[having 条件表达式2]]
[order by 属性名2[asc|desc]]
说明:
1、如果有where⼦句,就按照“条件表达式1”指定的条件进⾏查询。如果没有where⼦句,就查询所有记录;
2、如果有group
by⼦句,就按照“属性名1”指定的字段 进⾏分组。如果group
by⼦句后带着having关键字,那么只有满⾜“条件表达式2”中指定的条件的才能够输出。group
by⼦句通常和count()、sum()等聚合函数⼀起使⽤;
3、如果有order
by⼦句,就按照“属性名2”指定的字段进⾏排序。排序⽅式由“asc”和“desc”两个参数指出,默认的情况时“asc”。
⼆、单表查询 单表查询是指从⼀张表中查询所需要的数据。查询数据时,可以从⼀张表中查询数据,也可以从多张表中查询数据。两者的查询⽅式上有⼀定的区别。因为单表查询只在⼀张表上进⾏操作,所以查询⽐较简单。
1、查询所有字段:(1)列出表的所有字段
(2)使⽤“*”查询所有字段
2、查询指定字段:
在属性列表中列出所要查询的字段,查询结果显⽰顺序与select属性列表中设定顺序相同。
3、查询指定记录:
where⼦句可以⽤来指定查询条件
4、带in关键字的查询:
语法规则 [not]in(元素1,元素2,…,元素n)
5、带between and 的范围查询
select * from employee where age not between 15 and 25
6、带like的字符匹配查询
(1)完整字符串匹配:
select * from employee where name like 'Aric';select * from
employee where name = 'Aric';
like跟=相同。
(2)不完整字符串匹配(模糊查询),使⽤通配符的时候就不能⽤等号了:
借助于通配符%(%为任意字符或字符串)
select * from employee where homeaddr like
'北京%';匹配homeaddr前两个汉字为'北京'的记录,此时⽤=查询结果为空。
借助于通配符_(_的位置为⼀个任意字符)
select * from employee where name like 'Ar_c'
not like 与like ⽤法类同。
7、查询空值(is null):
如果字段的值是空值,则满⾜查询条件,该记录被查询出来。如果字段的值不是空值,则不满⾜查询条件。
其语法规则如下:
is [not] null
其中,“not”是可选参数,加上not表⽰字段不是空值满⾜条件。
8、带and的多条件查询:
and关键字可以⽤来联合多个条件进⾏查询。使⽤and关键字时,只有同时满⾜所有查询条件的记录才会被查询出来,如果不满⾜这些查询条件的其中⼀个,这样的记录将被排除。
and关键字的语法规则如下:
条件表达式1 and 条件表达式2 […and 条件表达式n]
其中,and可以连接两个条件表达式。⽽且,可以同时使⽤多个and关键字,这样可以连接更多的条件表达式。
9、带or的多条件查询只要满⾜这⼏个查询条件中的⼀个,这样的记录将会被查询出来。如果不满⾜这些查询条件的任何⼀个,这样的记录将被排除掉。or关键字的语法规则跟and
类同。
10、查询结果不重复如果表中某些字段上没有唯⼀性约束,这些字段可能存在着重复的值。可以使⽤distinct关键字来消除字段中的重复记录。
例⼦:select distinct d_id from employee;
11、对查询结果排序从表中查询出来的数据可能是⽆序的,或者其排列顺序不是⽤户所期望的顺序,为了是查询结果的顺序满⾜⽤户的要求,可以使⽤order
by对记录进⾏排序。
语法规则:
order by 属性名[asc|desc]
例⼦:select * from employee order by age;select * from employee order
by d_id asc,age desc;
12、分组查询group
by关键字可以将查询结果按某个字段或者多个字段进⾏分组。字段中值相等的为⼀组。
其语法规则:
join和in哪个查询更快group by 属性名[having 条件表达式][with rollup]
有以下⼏种情况:
单独使⽤group by关键字来分组
group by关键字与group_concat()函数⼀起使⽤
group by关键字与集合函数⼀起使⽤
group by关键字与having⼀起使⽤
按多个字段进⾏分组
group by 关键字与with rollup⼀起使⽤
例⼦:
select * from employee
group by d_id;
当有两条记录的d_id相同时,只能输出第⼀条。
⽤group by对多个字段进⾏分组的时候,⾸先按照第⼀个字段分组,在第⼀个字段相同时再按第⼆个字段进⾏分组。select sex,count(sex) from employee
group by sex with rollup;
with rollup在最后插⼊⼀条求和记录。
例⼦:
mysql> select sex,group_concat(name) from
employee
-> group by sex with rollup;
+------+---------------------+
| sex | group_concat(name) |
+------+---------------------+
| 男 |
张三,王五,Aric |
| ⼥ |
李四 |
| NULL | 张三,王五,Aric,李四 |
+------+---------------------+
3 rows in set (0.00 sec)
13、⽤limit限制查询结果的数量:
可以⽤来指定查询结果从哪条记录开始显⽰。还可以指定⼀共显⽰多少条记录。有两种使⽤⽅式。
(1)不指定初始位置
select * from employee limit 2;
不指定位置时,从第⼀条开始,按limit指定数量显⽰。
如果limit值⼤于表中记录数,会显⽰表中所有记录。
(2)指定初始位置
select * from employee limit 0,2;
0指初始位置,2表⽰记录数。
从第⼀条记录开始,查询数量为2条。
mysql中0表⽰第⼀条,1表⽰第⼆条。
三、使⽤集合函数查询(group
by关键字通常需要与集合函数⼀起使⽤)1、count()⽤来统计记录的条数select count(*) from employee;
查询employee表中的所有记录数
select d_id,count(*)from employee
group by d_id;
统计employee表中不同d_id值的记录数
2、sum()⽤来计算字段的值的综合select
num,sum(score) from grade where num=1001;
统计学号为1001的学⽣课程成绩的总和
select num,sum(score) from grade group by num;
按学号统计每个同学课程成绩的总和
3、avg()⽤来计算字段的值的平均值select
num,avg(score) from grade group by num;
求每个学⽣的平均分数
select course,avg(score) from grade group by course;
求每个科⽬的平均分数
4、max()⽤来查询字段的最⼤值select
num,course,max(score) from grade group by course;
例⼦:
mysql> select * from work;
+------+------+------+---------+
| id | name |
sex |
info |
+------+------+------+---------+
| 1001 | hjh | NULL |
NULL |
| 1002 | cch | NULL |
NULL |
| 1003 | zk | NULL | student
|
+------+------+------+---------+
3 rows in set (0.00 sec)
mysql> select max(name) from work;
+-----------+
| max(name) |
+-----------+
|
zk |
+-----------+
1 row in set (0.00 sec)
字符串⽐较,先⽐较第⼀个字符的asi码,相等时再⽐较后⾯的字符。
求出每⼀科⽬的最⾼分的学号、科⽬和成绩。
5、min()⽤来查询字段的最⼩值(类同于max())
四、连接查询 连接查询是将两个或两个以上的表按某个条件连接起来,从中选择选取需要的数据,连接查询是同时查询两个或两个以上的表时使⽤的。当不同的表中存在表⽰相同意义的字段时,可以通过该字段来连接这⼏个表。
1、内连接查询(当两个表中存在表⽰相同意义的字段时,可以通过该字段来连接这两张表。当该字段的值相等时,就查询出该记录)
例⼦:
mysql> select
num,name,employee.d_id,age,sex,d_name,function
-> from employee,department
-> where employee.d_id=department.d_id;
+-----+------+------+------+------+--------+----------+
| num | name | d_id | age | sex | d_name | function |
+-----+------+------+------+------+--------+----------+
| 1 | 张三 | 1001
| 26 |
男 | 科研部 | 研发产品 |
| 2 | 李四 | 1001
| 24 |
⼥ | 科研部 | 研发产品 |
| 3 | 王五 | 1002
| 25 |

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。