SQL中的DQL语句二(学习笔记三)

笔记 专栏收录该内容
6 篇文章 0 订阅


DQL语句简介

Data QueryLanguage 数据查询语言

注:以下将使用mysql数据库管理系统中的mysql数据库中的emp表作为例子

本次内容接上次的学习笔记:
SQL中的DQL语句一(学习笔记二)

一、条件查询(续)

1.and 与 or

and 与or中最需要注意的是优先级问题,

比如:找出薪资大于1000的并且部门编号是20或30部门的员工。
稍不注意就可能会写成:

select ename,sal,deptno from emp where sal > 1000 and deptno = 20 or deptno = 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中当然也有小括号。所以,在不确定优先级的时候,用小括号是必不可少的。

select ename,sal,deptno from emp where sal>1000 and (deptno = 20 or deptno = 30);

输出结果:

+--------+---------+--------+
| 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是这样写的:

select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';

如果使用 in 则是这样写的:

select ename,job from emp where job in('SALESMAN' , 'MANAGER');

特别注意: 在and与or中我们要找出薪资大于1000的并且部门编号是20或30部门的员工,如果用in来写,是这样的

select ename,sal,deptno from emp where sal>1000 and deptno in(20,30);

输出结果:

+--------+---------+--------+
| 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 ,它的逻辑是以某列为标准对整个表进行升序排序或者降序排序。
例:

select ename,sal from emp order by sal;
+--------+---------+
| 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;

注:对于字符串,它是按照首字母进行排序,当首字母相同时比较第二个字母,依次类推.
例:

select ename from emp order by ename;

输出结果:

+--------+
| 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
...
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏作者

小雨凉如水

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值