数据库基础—数据查询语言(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
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论