分别给表取了别名emp:e,dept:d,salarygrade:s。子查询中别名:emp:e1。'-- '为备注,命令行操作不影响。
第2题:
-- 获取emp表所有字段(如果不需要所有字段,指定字段即可,比如e.ename)和dept表的dname字段
SELECT e.*,d.dname,
-- 获取上级领导的姓名,并取别名mgrname
(SELECT e1.ename FROM emp e1 WHERE e.mgr=e1.empno) as mgrname,
-- 获取工资等级,并取别名grade
(SELECT s.gid FROM salarygrade s WHERE e.sal BETWEEN s.lowsalary AND s.highsalary) as grade
-- emp表和dept表左外连接(emp表中deptno有对应不到的部门名称,不知道你需不需要没有部门名称的员工数据,这里也获取到)
FROM emp e left join dept d ON e.deptno=d.deptno
-- 筛选出不是经理,但工资高于经理的数据(用了子查询先获取经理的工资)
WHERE e.job != '经理' and e.sal > any (SELECT sal FROM emp WHERE job='经理');
第3题:
-- 获取emp表所有字段和dept的dname字段
SELECT e.*,d.dname
-- emp表和dept表左外连接(emp表中deptno有对应不到的部门名称,这里也获取到)
FROM emp e left join dept d ON e.deptno=d.deptno
-- 筛选出工作内容不在子查询结果内(即查询出所有张姓的工作内容)
WHERE e.job not in (SELECT e1.job FROM emp e1 WHERE e1.ename like '张%');
这是要求解什么呢?就给两个表