目录
一、数据库查询
1.简单查询
(1) 查询特定的列
select id,name from stu;
(2)全信息查询
select * from stu;
(3)给列起别名
select id 编号,name 姓名 from stu;
(4)distinct
#查询出都有哪些班级的学生
select distinct clazzID from stu;
(5)查询时执行计算
#一年的生活费
select alimoney*12 from stu;
(6)查询结果排序(asc升,desc降)
select * from stu order by id asc,alimoney asc;
(7)条件查询
select * from stu where alimoney is null;
#查询出工资在8000以上的男员工有哪些
select * from emp where salary>8000 and sex=1;
select * from emp where salary>8000 && sex=1;
#查询出工资为6000-8000的员工
select * from emp where salary>=6000 and salary<=8000;
select * from emp where salary between 6000 and 8000;
#查询出20号部门或者30号部门的员工
select * from emp where deptId=20 or deptId=30;
select * from emp where deptId between 20 and 30;
select * from emp where deptId in(20,30);
#查询出不在20号部门并且不在30号部门的员工
select * from emp where deptId not in(20,30);
select * from emp where deptId !=20 && deptid !=30;
(8) 模糊条件查询
#查询出姓名中含有e的员工
select * from emp where ename like '%e%';
#查询出姓名中以e结尾的员工
select * from emp where ename like '%e';
#查询出姓名中倒数第二个字符是e的员工
select * from emp where ename like '%e_';
(9) 分页查询
每页开始的值=(当前的页码-1)*每页的数据量
select * from emp limit 86,5;
#查询出工资最高的前三个人
select * from emp order by salary desc limit 0,3;
2.复杂查询
(1) 聚合查询/分组查询
聚合函数:count(),sum(),avg(),max(),min()
#查询出所有员工的数量
select count(*) from emp;
#使用员工的编号列查询所有员工的数量
select count(eid) from emp; #推荐使用主键列
#使用员工部门编号列查询所有员工的数量
select count(deptId) from emp;
#查询出所有女员工的工资总和
select sum(salary) from emp where sex=0;
#查询出20号部门的平均工资
select avg(salary) from emp where deptId=20;
#查询出年龄最大的员工的生日(生日最小)
select min(birthday) from emp;
#查询10号部门的最高工资是多少
select max(salary) from emp where deptId=10;
#查询出男女员工的数量、平均工资分别是多少
select count(eid),avg(salary),sex,ename from emp group by sex;
#查询出各部门的工资总和、最高工资、最低工资
select sum(salary),max(salary),min(salary),deptId from emp group by deptId;
#获取日期中的年份 1993-7-6
select year('1993-7-6');
#查询出1993年出生的员工有哪些
select * from emp where year(birthday)=1993;
#md5加密
select md5('123456');
(2) 子查询
select * from emp where year(birthday)=( select year(birthday) from emp where ename='tom')
and ename!='tom';
(3) 多表查询
前提:表之间已建立关联
select ename,dname from emp,dept where deptId=did;
select emp.ename,dept.dname from emp,dept where emp.deptId=dept.did;
- 内连接
select ename,dname from emp inner join dept on deptId=did;
- 左外连接
select ename,dname from emp left outer join dept on deptId=did;
- 右外连接
select ename,dname from emp right outer join dept on deptId=did;
- 全连接
full join on,mysql不支持全连接
union 联合后,合并相同的记录
union all 联合后,不合并相同的记录
全连接解决方法:联合左外连接与右外连接,并合并相同的记录
(select ename,dname from emp left outer join dept on deptId=did)
union
(select ename,dname from emp right outer join dept on deptId=did);