MySQL 基础查询和 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
查询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 'total-salary' from emp
where salary + bonus > 6500;
1
2
2
得到:
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