SQL :Structured Query Language(结构化查询语言)
SQL介绍
它是操作数据库管理系统的一个标准:主要对数据库进行CRUD的操作, 数据库的运算都是通过SQL来完成的.
create:创建
delete:删除
update:修改
retrieve:检索
市面上的主流数据库都遵守SQL规范:
注:不同的数据库对SQL的支持又有些不同;
SQL根据命令功能的不同分为5个部分:
(1) DDL(Data Definition Language)数据定义语言
create,alter,drop,truncate,comment on,rename to...
以数据库表为例: 对表中结构操作 (创建表 create,修改表结构alter ,删除表 drop)
(2) DML(Data Manipulation Language)数据操纵语言
insert,update,delete
以数据库表为例: 对表中记录操作 (添加记录 insert,删除记录 delete,修改记录 update)
(3) DCL(Data Control Language)数据控制语言
grant,revoke...
(4) DQL(Data Query Language)数据查询语句
select
(5) DTL(Data Transaction Language)数据事务语言
commit,rollback,savepoint
SQL语法 - 单表查询
select column1, column2,column3 ...
from table_name
where (and, or, in,is [not] null,like ,between .. and)
order by column1 [asc/desc],column2 [asc/desc]
表结构
(1) 部门表结构
(2) 员工表结构
表记录
(1) 部门表数据
(2) 员工表数据
SQL - 单表查询
- 查询所有的部门信息
select deptno,dname,loc
from dept
- 查询所有员工的信息
select empno,ename,job,mgr,salary,comm,hiredate,deptno
from emp
表别名、列别名
- 查询所有员工的编号,姓名,职位
select e.empno '员工编号',e.ename '姓名',e.job '职位'
from emp e
- 查询所有员工所有职位,不要重复
select distinct job from emp
条件查询
- 查询薪资超过2000的员工的编号,姓名,薪资
select empno,ename,salary
from emp
where salary >2000
- 查询在10部门的员工编号,姓名
select empno,ename
from emp
where deptno = 10
- 查询在10部门 职位是'CLERK'的员工的编号,姓名,薪资
select empno,ename,salary
from emp
where deptno = 10 and job ='CLERK'
- 查询没有绩效的员工的编号,姓名,薪资,绩效
select empno,ename,salary,comm
from emp
where comm is null -- 没有绩效
select empno,ename,salary,comm
from emp
where comm is not null -- 有绩效
- 查询职位是'SALESMAN'或'CLERK'的员工的编号,姓名,职位
select empno,ename, job
from emp
where job = 'SALESMAN' or job = 'CLERK'
或者
select empno,ename, job
from emp
where job in( 'SALESMAN' , 'CLERK')
- 查询在10或20部门的员工的编号,姓名,职位,部门编号
select empno,ename, job,deptno
from emp
where deptno = 10 or deptno = 30
或者
select empno,ename, job,deptno
from emp
where deptno in(10,30)
- 查询薪资在2000 - 3000之间的员工的编号,姓名,薪资
select empno,ename, job,deptno
from emp
where salary >=2000 and salary <=3000
或者
select empno,ename, job,deptno
from emp
where salary between 2000 and 3000
模糊查询 like
% :任意多个任意字符
_ : 任意一个字符
- 查询出名称以'S'开头的员工编号,姓名
select empno,ename
from emp
where ename like 'S%'
- 查询出名称包含'A'字母的员工编号,姓名
select empno,ename
from emp
where ename like '%A%'
- 查询出名称包含'AR'字母的员工编号,姓名
select empno,ename
from emp
where ename like '%AR%'
- 查询出名称中第二个字母是'E'的员工编号,姓名
select empno,ename
from emp
where ename like '_E%'
- 查询出名称中倒数第二个字母是'E'的员工编号,姓名
select empno,ename
from emp
where ename like '%E_'
排序 order by
- 升序 order by 列名 asc , 默认是升序,所以asc可以省略
- 降序 order by 列名 desc
order by 列1 [asc / desc], 列2 [asc / desc]
- 查询员工信息,按照名字字母顺序排序
select empno,ename,job,mgr,salary,comm,hiredate,deptno
from emp
order by ename asc
- 查询10部门的员工编号,姓名,薪资,按照薪资的升序排序
select empno,ename,job,mgr,salary,comm,hiredate,deptno
from emp
where deptno =10
order by salary asc
- 查询10部门的员工编号,姓名,薪资,职位,,按照薪资的升序排序,若薪资相同,则按照职位字母顺序降序排序
select empno,ename,job,mgr,salary,comm,hiredate,deptno
from emp
where deptno =10
order by salary asc , job desc