数据库语法分类
SQL = 结构化查询语句
DQL = 数据查询语言
DDL = 数据定义语言
DML = 数据操作语言
DCL = 数据控制语言
实列SQL语句
# ========================万能公式===========================
# select 结果 from 表 where 条件 group by 分组列 having 条件 order by 排序列 asc/desc limit m,n;
# 查询语句 SELECT * FROM 表名;
#SELECT * FROM emp;
select * from dept;
# emp 为员工信息表;
# dept 为公司部门信息表;
# ======================查询列语句=========================
# 语法: select 列名1,列名2,... from 表名;
select * from emp;
select ename,empno from emp;
# ========================起别名============================
# 语法: select 表名1 别名1,表名2 别名2,... from 表名;
select * from emp;
select ename '员工姓名',job '岗位' from emp;
# =====================部分行分页查询========================
# 语法: select 结果 from 表 limit m,n; m代表起始行-1,n代表查询行共有多少数据
# 查询某部门
select * from emp limit 2,5;
select sal,ename from emp limit 1,7;
select ename '姓名',sal '工资' from emp limit 1,2;
# ========================排序===============================
# 语法1:select 结果 from 表名 order by 排序列 asc/desc; asc正序排列 desc倒序
# 语法2:select 结果 from 表名 order by 排序列 asc/desc,排序列 asc/desc 优先级为第一个
select * from emp;
# 练习1:查询员工姓名和工资,工资按照倒序排序,且列名显示姓名和工资
select ename '姓名',sal '工资' from emp order by sal desc;
# 练习2:查询部门信息,部门编号按照正序排序
select * from dept order by deptno asc;
# 练习3:查询员工工资和奖金,工资按照正序排列,当工资一样的时候,按照奖金倒序排列
select sal,comm from emp order by sal asc,comm desc;
# 练习4:查询工资最高的前三位员工信息
select * from emp order by sal desc limit 0,3;
# ====================条件查询==============================
# 语法: select 结果 from 表名 where 条件;
# 练习1 查询姓名为张三的员工信息
select * from emp where ename = '张三';
# 练习2 查询工资高于1000的员工信息
select * from emp where sal>1000;
# 练习1:查询工资高于1000,并且工资小于4000的员工信息
select * from emp where sal > 1000 and sal < 4000;
# 练习2:查询部门编号为10或者工作岗位为推销员的员工信息
select * from emp where deptno = 10 or job = '推销员';
# 练习3:查询所有员工的工资增加20%的员工姓名和增加后的工资
select emp.ename,sal*1.2 from emp;
# *************DQL复杂查询*************
# *************01 去重查询**************
# 语法:select distinct 去重列 from 表;
# 作用:查询表中某列不重复的值
# 案例:查询公司的工作岗位有哪些
# 结果:job
# 表:emp
# 条件:distinct job
select distinct job from emp;
# =====================模糊查询==============================
# 语法: select 列名 from 表名 where 列名 like '通配符\字符';
# 其中'_'为一个字符 '%'为0-N个字符
# 练习:查询姓名中包含十的员工信息
select * from emp where ename like '%十%';
# 练习:查询姓名中第三个字符为一的员工信息
select * from emp where ename like '__一%';
# 练习:查询姓王的员工信息
select * from emp where ename like '王%';
# =====================集合操作=============================
# 语法: select 结果 from 表 where 列名 in(x,y,z,....)
# 练习1:查询部门编号不为20,30,40的员工信息(使用两种方法写)
select * from emp where deptno not in(20,30,40);
Select * from emp where deptno != 20 and deptno != 30 and deptno != 40;
# 练习2:查询工资大于等于1000小于等于3000的员工信息(使用两种方法写)
select * from emp where sal>=1000 and sal <= 3000;
Select * from emp where sal between 1000 and 3000;
# ======================聚合函数=============================
# 作用函数: 可以实现一定功能的字符();
# max(列名): 求最大
# min(列名): 求最小
# sum(列名): 求和
# avg(列名): 求平均值
# count(列名): 求个数
# 语法: select 聚合函数 from 表;
# 练习:求公司的最低工资
select min(sal) from emp;
# 练习:求公司的平均工资
select avg(sal) from emp;
# 练习:求部门20最高工资
select max(sal) from emp where deptno = 20;
# 练习:求部门20最低工资
select min(sal) from emp where deptno = 20;
# 练习:求公司员工总数
select count(ename) from emp;
# 练习:求公司有奖金的员工人数(comm is not null)
select count(comm) from emp where comm is not null;
# ================分组查询==============================
# 语法: select 结果(要么是聚合函数,要么是分组列) from 表 where 条件 group by 分组列 having 条件(要么是聚合函数,要么是分组);
# 练习:查询工资高于1000的各部门人数
select count(*),deptno from emp where sal > 1000 group by deptno;
# 练习:查询部门的员工人数大于5的各个部门和人数
select deptno,count(*) from emp group by deptno having count(*) > 5;
# 练习:查询工作为两个字符的各部门的人数
select deptno,count(*) from emp where job like '__' group by deptno;
# 练习:查询工资高于1000且小于4000的各部门人数
select deptno,count(*) from emp where sal > 1000 and sal < 4000 group by deptno;
# ====================添加数据表===========================
create table dept(
deptno int primary key auto_increment,
dname varchar(14) ,
loc varchar(13)
) ;
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');
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 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);