1,简单查询
1,条件查询
查询部门编号为10的员工:
select *from emp where deptid='10'
举例:查询部门编号为null的员工
select *from emp where deptid is null
练习:满足7000以上的女员工
select *from emp where salary>7000 and sex='0'
2,复杂查询
子查询
示例:查询出高于平均工资的值
步骤一:查询出平均工资——11125
select avg(salary) from emp;
步骤二:查询出工资大于11125的员工
select*from emp where salary >11125;
综合:
select *from emp where salary>select avg(salary) from emp;
练习:查询出和timi同一个部门的员工有哪些?
select *from emp where eid=(select *from emp where eid='timi');
步骤一 :
select deptid from emp where ename="timi";
步骤二:
select *from emp where deptid=20;
所以综合起来就是:
select *from emp where deptid=(select deptid from emp where ename="timi") and ename!='timi';
不包括‘timi’加上
and ename!='timi'
练习:查询和'timi'同一年出生的年份
year()获取日期中的年份
3,多表查询
多表查询的数据他是分布在多个表里的
示例:查询所有员工的姓名及其部门名称
select ename,dname from emp,dept;
4,连接
1,内连接
select ename,dname from emp inner join dept on deptid=did;
2,左外连接
select 左数据项,右数据项 from 左数据表 左外显示 右表格 on 左数据=右边数据;
显示左侧表中所有记录,先写那个那个就是做
3, RIGHT外连接
select 左数据项,右数据项 from 左数据表 左外显示 右表格 on 左数据=右边数据;
select ename,dname from emp right outer join dept on deptid=did;
显示右侧表中所有记录,后写那个那个就是右
左外和右外显示中outer关键字可以省略
4,全连接
同时显示,左侧和右侧表中所以记录
full join.. on
mysql 不支持此链接
实现方法:
union all 联合后不合并相同的项目
union 联合后合并相同的项目
select ename,dname from emp left outer join dept on deptid=did;
union all;
select ename,dname from emp right outer join dept on deptid=did;
select ename,dname from emp left outer join dept on deptid=did)union all (select ename,dname from emp right outer join dept on deptid=did;
解决方案:将左外和右外连接进行联合,合并相同的相