MySQL入门学习笔记
第五章:数据查询
7.1 建表
首先创建几个表,供我们后续操作的使用。
-- 部门表
create table dept(
deptno int primary key auto_increment, -- 部门编号
dname varchar(14) , -- 部门名字
loc varchar(13) -- 地址
) ;
-- 员工表
create table emp(
empno int primary key auto_increment,-- 员工编号
ename varchar(10), -- 员工姓名 -
job varchar(9), -- 岗位
mgr int, -- 直接领导编号
hiredate date, -- 雇佣日期,入职日期
sal int, -- 薪水
comm int, -- 提成
deptno int not null, -- 部门编号
foreign key (deptno) references dept(deptno)
);
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');
insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20);
insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30);
insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20);
insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30);
insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10);
create table salgrade(grade int,losal int,hisal int);
insert into salgrade(grade,losal,hisal) values(1,700,1200);
insert into salgrade(grade,losal,hisal) values(2,1201,1400);
insert into salgrade(grade,losal,hisal) values(3,1401,2000);
insert into salgrade(grade,losal,hisal) values(4,2001,3000);
insert into salgrade(grade,losal,hisal) values(5,3001,9999);
7.2 查询一个/多个字段
-- 语法格式
select 字段/字段列表 from 表名;
举例:查询员工的姓名
select ename from emp;
举例:查询员工的姓名,薪水和部门编号
select ename,sal,deptno
from emp;
7.3 查询结果设置别名
select 字段/字段列表 as 别名
from 表名;
举例:查询员工的姓名/薪水和年薪(按照12薪计算)
select ename,sal,sal*12 as 年薪
from emp;
7.4 条件查询
条件查询必须使用在where子句后面,where子句也必须放在from语句后面。
运算符 | 说明 |
---|---|
= | 等于 |
!= 或者 <> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
between … and … | 介于两个值之间 |
is null | 为空 |
is not null | 不为空 |
and | 且 |
or | 或者 |
in | 包含 |
not in | 不包含 |
not | 取非 |
like | 模糊查询,常和%以及_连用 |
-- 语法格式
select 字段/字段列表
from 表名
where 条件;
7.4.1 等于
举例:查询员工的工资等于5000的员工姓名,薪水,和上级领导编号
select ename,sal,mgr
from emp
where sal=5000;
7.4.2 大于/小于
举例:查询员工的薪水在2000及以上的员工姓名,薪水和部门编号
select ename,sal,deptno
from emp
where sal>2000;
7.4.3 不等于
举例:输出员工薪水不等于2000的员工姓名和薪水。
select ename,sal
from emp
where sal != 2000;
7.4.4 between … and …
举例:找出员工薪水在1100到1600之间的员工姓名,薪水和领导编号(包含两端的值)
select ename,sal,mgr
from emp
where sal between 1100 and 1600;
7.4.5 null
举例:找出哪些人没有津贴,输出员工姓名,薪水和津贴
select ename,sal,comm
from emp
where comm is null;
7.4.6 and/or 的使用
举例:找出薪水大于2000的并且部门编号是20或者30的员工姓名,薪水和部门编号
select ename,sal,deptno
from emp
where sal>2000 and (deptno = 20 or deptno=30);
7.4.7 in/not in 的使用
案例:查找工作岗位是经理或者分析师的员工姓名和工种。
select ename,job
from emp
where job in ('经理' , '分析师');
7.4.8 like模糊查询
关键字:模糊查询中有两个经常使用的关键字,一个是 % ,另一个是 _
%:代表任意多个字符
_:代表任意单个字符
举例:找出emp表中姓名含有 ‘一’ 的员工姓名,工种和员工编号。
select ename,job,empno
from emp
where ename like '%一%';
举例:找出员工姓名中第二个字是 ‘一’ 的员工姓名,薪水。
select ename,sal
from emp
where ename like '_一%';
7.5 数据排序
-- 语法结构
select 字段/字段列表
from 表名
order by 字段名 排序方式;
7.5.1 升序排序 asc
举例:按照员工的薪水进行升序排序,输出员工的姓名和薪水
select ename, sal
from emp
order by sal asc;
7.5.2 降序排序 desc
举例:按照员工的部门编号升序排序,部门编号相同的按照薪水降序排序。
select *
from emp
order by deptno asc ,sal desc;