第六章练习4

• 1.创建一个员工表和部门表的交叉连接。

SELECT emp.*,dept.*from emp cross join dept;

• 2.使用自然连接,显示入职日期在80年5月1日之后的员工
姓名,部门名称,入职日期

SELECT ename 员工姓名,dname 部门名称,hiredate 入职日期 from emp
 NATURAL JOIN dept WHERE hiredate>'1980-05-01';

• 3.使用USING子句,显示工作在CHICAGO的员工姓名,部门
名称,工作地点

SELECT emp.ename 员工姓名,dept.deptno 部门名称,dept.loc 工作地点 
FROM emp JOIN dept using(DEPTNO)
WHERE loc='CHICAGO';

• 4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名
称,工作地点,薪资等级

SELECT emp.ename 员工姓名,dept.deptno 部门名称,dept.loc 工作地点,salgrade.grade 薪资等级
from salgrade,emp JOIN dept on(emp.DEPTNO=dept.DEPTNO) 
WHERE  loc='CHICAGO' AND sal BETWEEN salgrade.losal AND salgrade.hisal;

课后作业

• 1.显示员工SMITH的姓名,部门名称,直接上级名称
SELECT ename 姓名,dname 部门名称,mgr 直接上级名称 
FROM emp JOIN dept using (DEPTNO) 
WHERE ename='SMITH';

• 2.显示员工姓名,部门名称,工资,工资级别,要求工资
级别大于4级。

SELECT ename 员工姓名,dname 部门名称,sal 工资,grade 工资级别
from emp JOIN dept on(emp.DEPTNO=dept.DEPTNO),salgrade
WHERE grade>4 AND sal BETWEEN salgrade.losal AND salgrade.hisal;

• 3.显示员工KING和FORD管理的员工姓名及其经理姓名。

select e.ename 员工姓名,m.ename 经理姓名
from emp e,emp m
where e.mgr = m.empno
and m.ename in ('KING','FORD');

• 4.显示员工姓名,参加工作时间,经理名,参加工作时间,
要求参加时间比经理早。

select e.ename,e.hiredate,m.ename,m.hiredate
from emp e,emp m
where e.mgr = m.empno
and e.hiredate

• 5.使用左连接,查询每个员工的姓名,经理姓名,没有经
理的King也要显示出来。;

SELECT ename 员工姓名,IFNULL(mgr,'no manager') 经理姓名 
from emp left OUTER JOIN dept on(emp.DEPTNO=dept.DEPTNO);
select count(e.empno),m.empno,m.ename
from emp e 
left join emp m 
on e.mgr = m.empno 
group by m.empno,m.ename;

• 6.使用右连接,查询每个员工的姓名,经理姓名,没有经
理的King也要显示出来。

SELECT ename 员工姓名,IFNULL(mgr,'no manager') 经理姓名 
from emp right OUTER JOIN dept on(emp.DEPTNO=dept.DEPTNO);

你可能感兴趣的:(第六章练习4)