Kbaor_2023_10_11_MySQL_ DQL 简单查询 条件查询
Kbaor_2023_10_11_MySQL_ DQL 简单查询 条件查询
简单查询
SELECT查询所有列
# *号代表指定表中的所有列名;
SELECT * FROM 表名;
# 如果使用第二种方式,每个列名之间必须要用逗号分隔,最后一个列名后面不写逗号;
# SQL语句的最后需要加分号;
SELECT 列名1,列名2,...列名n
FROM table;
空值
空值的含义
空值用NULL表示,表示一种无效的、未知的值,空值不是零,也不是空格
空值参与运算
空值参与算术运算,运算后的结果仍为NULL
消除重复行
消除重复行是消除相同的查询结果,只保留一行重复数据,使用关键字 DISTINCT 来完成
SELECT DISTINCT 列名1,列名2,....列名n
FROM 表名;
条件查询
单条件查询
SELECT empno, ename, deptno
FROM emp
WHERE deptno=20;
特殊比较运算符
特殊比较运算符,分别是BETWEEN...AND...、IN、LIKE、IS NULL。
BETWEEN...AND...
SELECT empno,ename,sal
FROM emp
WHERE sal BETWEEN 1000 AND 1500;
通过结果可以看出,工资等于1000和1500的员工也被查出来了,所以BETWEEN..AND..是闭区间查询。
IN
使用IN运算符可以查询出某列的值是否和给定集合内的任意一个值相等。
SELECT empno, ename, deptno
FROM emp
WHERE deptno IN (10 , 20)
通过结果可以看出,部门编号为10或20的员工都被查出来了。
LIKE
使用LIKE运算符可以查询出某列的值是否满足关键字匹配,也叫模糊查询
先介绍两个通配符:
% : 百分号,代表匹配零个或任意个字符。
_ : 下划线,代表匹配1个任意字符。
#查询员工姓名中以S开头的员工。
SELECT ename
FROM emp
WHERE ename LIKE 'S%';
#查询员工姓名中第二个字母是L的员工
SELECT ename
FROM emp
WHERE ename LIKE '_L%';
IS NULL
如果要查询某列的值是否为NULL,使用 “列名 = NULL”是查询不出来的。只能使用 “列名 IS NULL”
注意:查询某列不为空,使用 “列名 IS NOT NULL”
SELECT ename, mgr
FROM emp
WHERE mgr IS NULL;
多条件查询
多条件查询是按照多个条件同时进行查询,查询出的结果集要同时满足多个条件。多个条件之间需要使用逻辑运算符进行连接。
逻辑运算符包含逻辑与 AND,逻辑或 OR,逻辑非 NOT
#本题查询出的员工,需要同时满足两个条件,条件1:工资>1100,条件2:职位='CLERK',因此本题可以用逻辑与来解决,SQL语句为:
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
AND job='CLERK';
#查询工资大于1100或职位为‘CLERK’的员工编号、姓名、职位、工资。
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
OR job='CLERK';
#查询职位不为CLERK的员工编号、姓名、职位、工资。
SELECT empno, ename, job, sal
FROM emp
WHERE NOT (job='CLERK');
SELECT empno, ename, job, sal
FROM emp
WHERE job <> 'CLERK';
NOT运算符还可以和BETWEEN…AND、IN、LIKE、IS NULL一起使用,表示的含义分别为:
NOT BETWEEN .. AND .. :不在某个区间
NOT IN (集合):不在某个集合内
NOT LIKE :不像.....
IS NOT NULL: 不是空
运算符的优先级
| 优先级 | 运算分类 |
|---|---|
| 优先级 | 算术运算符 |
| 1 (最高) | 比较运算符 |
| 2 | 特殊比较运算符 |
| 3 | 逻辑非 |
| 4 | 逻辑与 |
| 5 (最低) | 逻辑或 |
课后作业
第三章
- 查询每名员工的员工姓名,入职时间。
- 查询部门表中部门名称及部门所在地。
- 查询所有员工的员工姓名,基本工资,试用期工资(基本工资的80%)显示的列名为员工姓名,基本工资,试用期工资。
- 查询所有员工的名字和领导编号,看看有哪些员工没有领导?
- 查询员工表中每种职位对应的薪资是多少(不要重复的数据)?
第四章
- 查询20号部门的部门名称和部门所在地。
- 使用两种写法查询员工工资在1500到2500(包括1500和2500)之间的员工姓名和员工工资。
- 查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。
- 查询员工姓名的第三个字母是A的员工姓名。
- 查询10号和20号部门以外部门的员工姓名、部门编号。
- 查询没有上级的员工(经理号为空)的员工姓名。
- 查询工资大于等于4500并且部门为10和20的员工的姓名、工资、部门编号。
- 查询10号部门和20号部门工资在2500以上或者工资在1500以下的员工名字,员工工资和部门编号。
课后作业答案
#第三章
#1. 查询每名员工的员工姓名,入职时间。
SELECT ename, hiredate
FROM emp;
#2. 查询部门表中部门名称及部门所在地。
SELECT dname, loc
FROM dept;
#3. 查询所有员工的员工姓名,基本工资,试用期工资(基本工资的80%)显示的列名为员工姓名,基本工资,试用期工资。
SELECT ename 员工姓名, sal 基本工资, sal*0.8 试用期工资
FROM emp;
#4. 查询所有员工的名字和领导编号,看看有哪些员工没有领导?
SELECT ename, mgr
FROM emp
WHERE mgr IS NULL;
#5. 查询员工表中每种职位对应的薪资是多少(不要重复的数据)?
SELECT DISTINCT job, sal
FROM emp;
#第四章
#1. 查询20号部门的部门名称和部门所在地。
SELECT dname, loc
FROM dept
WHERE deptno = 20;
#2. 使用两种写法查询员工工资在1500到2500(包括1500和2500)之间的员工姓名和员工工资。
#方法一
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 1500 AND 2500 ;
#方法二
SELECT ename, sal
FROM emp
WHERE sal >=1500 AND sal <=2500 ;
#3. 查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。
#方法一
SELECT ename, hiredate, job
FROM emp
WHERE hiredate >="1982-7-9"
AND job <>"SALESMAN" ;
#方法二
SELECT ename, hiredate, job
FROM emp
WHERE hiredate >="1982-7-9"
AND NOT (job ="SALESMAN" );
#4. 查询员工姓名的第三个字母是A的员工姓名。
SELECT ename
FROM emp
WHERE ename LIKE "__A%";
#5. 查询10号和20号部门以外部门的员工姓名、部门编号。
#方法一
SELECT ename,deptno
FROM emp
WHERE deptno <>10 AND deptno <>20;
#方法一
SELECT ename,deptno
FROM emp
WHERE deptno NOT IN (10)AND deptno NOT IN (20);
#6. 查询没有上级的员工(经理号为空)的员工姓名。
SELECT ename
FROM emp
WHERE mgr IS NULL;
#7. 查询工资大于等于4500并且部门为10和20的员工的姓名、工资、部门编号。
SELECT ename,sal,deptno
FROM emp
WHERE mgr IS NULL;
#8. 查询10号部门和20号部门工资在2500以上或者工资在1500以下的员工名字,员工工资和部门编号。
SELECT ename,sal,deptno
FROM emp
WHERE deptno =10 OR deptno = 20
AND (sal >2500 OR sal <1500 );
加油加油!

浙公网安备 33010602011771号