外观
基础查询和 where 子查询
准备数据(部门表和员工表):
mysql
# 创建部门表
drop table if exists dept;
create table dept (
deptno int(2) not null,
dname varchar(14) collate utf8_bin default null,
loc varchar(13) collate utf8_bin default null,
primary key (deptno)
) engine=innodb default charset = utf8 collate = utf8_bin;
# 创建员工表
drop table if exists emp;
create table emp (
eno integer not null,
ename varchar(20) not null,
sex varchar(20) not null,
birthday varchar(20) not null,
jdate varchar(20) not null,
salary integer not null,
bonus integer not null,
epost varchar(20) not null,
deptno int(2) not null,
primary key (eno)
);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
基础查询
查询 emp 表中的所有员工,显示姓名、薪资、奖金:
mysql
select ename, salary, bonus from emp;1
查询 emp 表中的所有部门和职位:
mysql
select deptno, epost from emp;1
查询 emp 表中的所有部门和职位,并对数据去重:
mysql
select distinct deptno, epost from emp;1
where 子查询
查询 emp 表中薪资大于 5000 的所有员工,显示员工姓名、薪资:
mysql
select ename, salary from emp where salary > 5000;1
查询 emp 表中总薪资(薪资+奖金)大于 6500 的所有员工,显示员工姓名、总薪资:
mysql
select ename, salary + bonus from emp
where salary + bonus > 6500;1
2
2
得到:
| ename | salary + bonus |
|---|---|
| wanger | 8500 |
| lisi | 7000 |
| wangming | 9000 |
注意上面查询结果中的表头,将表头中的“salavy+bonus”修改为“total-salary”:
mysql
SELECT ename, salary + bonus AS `total-salary`
FROM emp
WHERE salary + bonus > 6500;1
2
3
2
3
得到:
| ename | total-salary |
|---|---|
| wanger | 8500 |
| lisi | 7000 |
| wangming | 9000 |
查询 emp 表中薪资在 7000 和 10000 之间的员工,显示员工姓名和薪资:
mysql
-- 普通写法
select ename, salary
from emp
where salary >= 7000 and salary <= 10000;
-- 使用 `between and` 的写法
select ename, salary
from emp
where salary between 7000 and 10000;1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
查询 emp 表中薪资为 5000、6000、8000 的员工,显示员工姓名和薪资:
mysql
-- 普通写法
select ename, salary
from emp
where salary = 5000 or salary = 6000 or salary = 8000;
-- 使用 `in` 的写法
select ename, salary
from emp
where salary in (5000, 6000, 8000);1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
查询 emp 表中薪资不为 5000、6000、8000 的员工,显示员工姓名和薪资:
mysql
-- 普通写法
select ename, salary
from emp
where not (
salary = 5000 or salary = 6000 or salary = 8000
);
-- 使用 `not in` 的写法
select ename, salary
from emp
where salary not in (5000, 6000, 8000);1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
查询 emp 表中薪资大于 4000 和薪资小于 2000 的员工,显示员工姓名、薪资:
mysql
select ename, salary
from emp
where salary > 4000 or salary < 2000;1
2
3
2
3