SQL中的DQL语句二
- DQL语句简介
- 注:以下将使用mysql数据库管理系统中的mysql数据库中的emp表作为例子
- 一、条件查询(续)
-
- 1.and 与 or
- 2.in
- 3.模糊查询like
- 二、数据排序
-
- 关于顺序
DQL语句简介
Data QueryLanguage 数据查询语言
注:以下将使用mysql数据库管理系统中的mysql数据库中的emp表作为例子
本次内容接上次的学习笔记:
SQL中的DQL语句一(学习笔记二)
一、条件查询(续)
1.and 与 or
and 与or中最需要注意的是优先级问题,
比如:找出薪资大于1000的并且部门编号是20或30部门的员工。
稍不注意就可能会写成:
因为and 的优先级大于or,所以,上面的代码实际上是选出了所有部门编号为30的员工和部门编号为20且工资大于1000的员工。见下面的输出结果。
+--------+---------+--------+
| ename | sal | deptno |
+--------+---------+--------+
| ALLEN | 1600.00 | 30 |
| WARD | 1250.00 | 30 |
| JONES | 2975.00 | 20 |
| MARTIN | 1250.00 | 30 |
| BLAKE | 2850.00 | 30 |
| SCOTT | 3000.00 | 20 |
| TURNER | 1500.00 | 30 |
| ADAMS | 1100.00 | 20 |
| JAMES | 950.00 | 30 |
| FORD | 3000.00 | 20 |
+--------+---------+--------+
在sql中当然也有小括号。所以,在不确定优先级的时候,用小括号是必不可少的。
输出结果:
+--------+---------+--------+
| ename | sal | deptno |
+--------+---------+--------+
| ALLEN | 1600.00 | 30 |
| WARD | 1250.00 | 30 |
| JONES | 2975.00 | 20 |
| MARTIN | 1250.00 | 30 |
| BLAKE | 2850.00 | 30 |
| SCOTT | 3000.00 | 20 |
| TURNER | 1500.00 | 30 |
| ADAMS | 1100.00 | 20 |
| FORD | 3000.00 | 20 |
+--------+---------+--------+
2.in
in在有些时候是可以代替or来使用的,比如,选择岗位是manager和salesman的员工,用or是这样写的:
如果使用 in 则是这样写的:
特别注意: 在and与or中我们要找出薪资大于1000的并且部门编号是20或30部门的员工,如果用in来写,是这样的
输出结果:
+--------+---------+--------+
| ename | sal | deptno |
+--------+---------+--------+
| ALLEN | 1600.00 | 30 |
| WARD | 1250.00 | 30 |
| JONES | 2975.00 | 20 |
| MARTIN | 1250.00 | 30 |
| BLAKE | 2850.00 | 30 |
| SCOTT | 3000.00 | 20 |
| TURNER | 1500.00 | 30 |
| ADAMS | 1100.00 | 20 |
| FORD | 3000.00 | 20 |
+--------+---------+--------+
即在in中的括号并不表示一个区间,而是表示等于,上面代码的意思就是
选出 薪资大于1000的并且部门编号是20 或 30部门的员工,
而不是薪资大于1000的并且部门编号是20 到 30部门的员工。
注意不要犯迷糊。
mysql中还有not关键字,如果想选出不包含什么的,可以写成 not in
3.模糊查询like
mysql中提供了模糊查询like,这个关键字可以比较人性化的查询一些东西。
like 一般与 % 和 _ 进行搭配使用
% 代表任意多个字符, _ 代表任意1个字符
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a%' //在第二位含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
注意:有的时候可能会出现查询 _ 或者 % 的情况,这个时候,来一个转义字符就可以进行查询了 即 ’\%‘或者’\_‘即可.
二、数据排序
在数据排序中,需要用到新的内容,order by
关于order by ,它的逻辑是以某列为标准对整个表进行升序排序或者降序排序。
例:
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| JAMES | 950.00 |
| ADAMS | 1100.00 |
| WARD | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN | 1600.00 |
| CLARK | 2450.00 |
| BLAKE | 2850.00 |
| JONES | 2975.00 |
| SCOTT | 3000.00 |
| FORD | 3000.00 |
| KING | 5000.00 |
+--------+---------+
order by 默认是升序排序,当然,我们也可以指定排序方式,
asc表示升序,desc表示降序。这里,写在最后面。
例:
select ename,sal from emp order by sal asc;
select ename,sal from emp order by sal desc;
注:对于字符串,它是按照首字母进行排序,当首字母相同时比较第二个字母,依次类推.
例:
输出结果:
+--------+
| ename |
+--------+
| ADAMS |
| ALLEN |
| BLAKE |
| CLARK |
| FORD |
| JAMES |
| JONES |
| KING |
| MARTIN |
| MILLER |
| SCOTT |
| SMITH |
| TURNER |
| WARD |
+--------+
order by 也可以通过两个条件进行排序.
例:
select ename,sal from emp order by sal asc,ename asc;
select ename,sal from emp order by sal asc,ename desc;
输出结果:
+--------+---------+ +--------+---------+
| ename | sal | | ename | sal |
+--------+---------+ +--------+---------+
| SMITH | 800.00 | | SMITH | 800.00 |
| JAMES | 950.00 | | JAMES | 950.00 |
| ADAMS | 1100.00 | | ADAMS | 1100.00 |
| MARTIN | 1250.00 | | WARD | 1250.00 |
| WARD | 1250.00 | | MARTIN | 1250.00 |
| MILLER | 1300.00 | | MILLER | 1300.00 |
| TURNER | 1500.00 | | TURNER | 1500.00 |
| ALLEN | 1600.00 | | ALLEN | 1600.00 |
| CLARK | 2450.00 | | CLARK | 2450.00 |
| BLAKE | 2850.00 | | BLAKE | 2850.00 |
| JONES | 2975.00 | | JONES | 2975.00 |
| FORD | 3000.00 | | SCOTT | 3000.00 |
| SCOTT | 3000.00 | | FORD | 3000.00 |
| KING | 5000.00 | | KING | 5000.00 |
+--------+---------+ +--------+---------+
注意看sal同时为1250,与sal同时为3000的那个,他们在排序时位置是不一样的。
注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段。
关于顺序
结合上面的 where,目前sql查询语句的写的顺序为
select
*
from
表名
where
条件
order by
...