数据库基础—数据查询语言(DQL)!

  • A+
所属分类:SQL技巧

数据库基础—数据查询语言(DQL)!

数据库基础—数据查询语言(DQL)!

​DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数

一.基础查询

1.查询多个字段

SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;

2.查询所有字段

SELECT * FROM 表名 ;

3.设置别名

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;

ps:1.as可以省略

2.常用场景:条件查询,子查询,多表查询

4.去除重复记录

SELECT DISTINCT 字段 FROM 表名;

PS:1.distinct只能在select语句中使用

2.distinct必须在所有字段前面

3.如果有多个字段需要去重,则会对多个字段进行组合去重,即所有字段的数据重复才会被去重

 

二.条件查询

1.语法

SELECT 字段列表 FROM 表名 WHERE 条件列表 ;

2.常见比较运算符

> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN ... AND ... 在某个范围之内(含最小、最大值)
IN(...) 在in之后的列表中的值,多选一
LIKE 占位符 模糊匹配(_匹配单个字符, %匹配任意个字符)
IS (not) NULL

ps:是一个整体,不能改

是NULL

3.常见逻辑运算符

AND 或 && 并且 (多个条件同时成立)
OR 或 || 或者 (多个条件任意一个成立)
NOT 或 ! 非 , 不是

4.like的使用

4.1 语法

LIKE  '字符串' NOT LIKE  '字符串'

4.2 %和_

% 应该是最常用的通配符了,它代表任意长度的字符串,包括0

比如: a%b 表示以字母 a 开头,以字母 b 结尾的任意长度的字符串;该字符串可以代表 ab、acb、accb、accrb 等字符串

_ 只能代表单个字符,字符的长度不能等于0,即字符长度必须等于1;相对于 % 来说, _ 肯定没这么常用

比如: a_b 可以代表 acb、adb、aub 等字符串

ps:1.匹配的字符串必须加单引号或双引号

2.like匹配的字符串是不区分大小写的,如果需要区分大小写,需要在like后加binary

 

三.聚合函数

1.常见的聚合函数

count统计数量   max最大值   min最小值   avg平均值   sum求和

2.语法

SELECT 聚合函数(字段) FROM 表名 ;

ps:NULL值是不参与所有聚合函数运算的

 

四.分组查询

1.语法

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

2.

 

五.排序查询

1.语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

 ps:1.ASC : 升序(默认值)   DESC: 降序

2.对多个字段排序时,只有第一个排序字段有相同的值,才会对第二个字段进行排序

 

六.限制查询

1.语法

limit 初始位置,记录数;

ps:初始位置是0

2.指定初始位置

select * from 表 limit 2,2;

3.不指定初始位置

select * from 表 limit 记录数;

4.limit+offset

limit 记录数 offset 初始位置

 

 

七、select 查询示例

1. 基本语法

 

select 列名 from 表名 where 限制条件;

注意,select可以查得到更改了但是未提交的数据

2. 基本查询

 

(1)查询emp表中的指定列,比如empno,ename和job

select empno, ename, job from EMP;

(2)以别名的形式查询emp表中的指定列,比如empno,ename和job

select empno as 工号, ename 姓名, job 岗位 from EMP;

(3)以表别名的形式查询emp表中的指定列,比如empno,ename和job

select t1.EMPNO,t1.ENAME,t1.JOB from EMP t1;

3. 模糊查询 like、_

 

%:表示0个或者多个字符
_:表示一位字符,一般称_为占位符

(1) 查询emp中姓名为S开头的员工信息。

select empno, ename, job, mgr, hiredate, sal, comm, deptno from EMP  where ENAME like 'S%';

(2)查询emp中姓名结尾为S的员工信息。

select empno, ename, job, mgr, hiredate, sal, comm, deptno from EMP  where ENAME like '%S';

(3) 查询emp中姓名的包含A的员工信息。

select empno, ename, job, mgr, hiredate, sal, comm, deptno from EMP  where ENAME like '%A%';

(4) 查询emp中姓名的中间有A的员工信息。

select empno, ename, job, mgr, hiredate, sal, comm, deptno from EMP  where ENAME like '_%A%_';

(5) 查询emp中名字的第二个字符为L的员工信息

select *from EMP where ENAME like '_L%';

escape函数 表示a后面的一位数没有特殊含义

(6)查询姓名中含%的学生信息

select * from stu where sname like '%a%%' escape('a');

(7) 查询姓名中含_的学生信息

select * from stu where sname like '%a_%' escape('a');

(8)查询姓名中含a和_的学生信息

select * from stu where sname like '%aaa_%' escape('a');

(9) 查询姓名中含_和%的学生信息

select * from stu where sname like '%a_%a%%' escape('a');

注意:查询所有列时,用列名代替 select * 会提高查询效率

select * from emp;
select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp;  

4. 条件查询

 

(1) 查询工号为7788的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where EMPNO=7788;

(2) 查询部门20的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where DEPTNO=20;

5. 不等查询

 

(1) 查询不在部门20的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where DEPTNO<>20;
select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where DEPTNO!=20;

(2) 查询工资在1500以下的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where sal<1500;

(3) 查询工资在2500以上的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp where sal > 2500;

6. 逻辑查询

 

and / or / in / not in / between and / all / any

(1) 查询在20部门并且工资在1500以上的员工信息

select * from emp where DEPTNO=20 and SAL>1500;

(2) 查询工资在1500以下或者工资在2500以上的员工信息

select * from emp where sal<1500 or sal>2500;

(3) 查询在20部门并且工资在1500以下或者在10部门工资2500以上的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno
from emp
where (DEPTNO = 20 and sal < 1500)
   or (DEPTNO = 10 and sal > 2500);

(4) 查询在部门10,20的员工信息

select empno, ename, job, mgr, hiredate, sal, comm, deptno
from emp
where DEPTNO = 10
   or DEPTNO = 20;
select empno, ename, job, mgr, hiredate, sal, comm, deptno
from emp
where DEPTNO in (10, 20);

(5)查询岗位不是clerk、salesman、manager的员工信息

select EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
from emp
where job not in ('CLERK', 'SALESMAN', 'MANAGER');

(6)查询工资在1500到2500的员工信息

select * from emp where sal between 1500 and 2500;

between and 包含两边,是闭区间,必须小的数值在前面

(7) 查询工资比20部门的所有人的工资都高的员工信息 >all(子查询) 相当于大于子查询中的最大值

select empno, ename, job, mgr, hiredate, sal, comm, deptno
from emp
where sal > all (select sal from emp where DEPTNO = 20);

(8) 查询工资比20部门的有些人的工资都高的员工信息 -->any 相当于大于子查询中的最小值

select * from emp
where sal > any(select sal from EMP where DEPTNO=20);

(9) 查询出comm列为空值的员工信息

select * from emp where COMM is null;

(10) 查询出comm列不为空值的员工信息

select * from emp where COMM is not null;

 

 

 

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

数据库基础—数据查询语言(DQL)!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

  • 我的微信
  • weinxin
  • 我的知识星球
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: