天天看点

SQL中的DQL语句二(学习笔记三)DQL语句简介注:以下将使用mysql数据库管理系统中的mysql数据库中的emp表作为例子一、条件查询(续)二、数据排序

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
...