SQL 连接查询练习

                                          --连接查询练习
                                          --内连接
--返回有部门的员工工资和奖金
--92 语法
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM new_emp n, dept d
WHERE n.deptno = d.deptno;
--99 语法
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM new_emp n INNER JOIN dept d          --可以省略 INNER
ON n.deptno = d.deptno;
--或使用 JOIN...USING() 语句
SELECT  n.ename, n.sal, n.comm, deptno, d.dname
FROM new_emp n JOIN dept d          
USING(deptno);
--------------------------------------------------------------------------------------------------------
                                          --外连接(两表连接)
--叉集(笛卡尔集)
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM new_emp n CROSS JOIN dept d;
                                   
--没有部门的员工也返回(主表为员工表)
--92 语法
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM new_emp n, dept d
WHERE n.deptno = d.deptno(+);
--99 语法(右外连接)
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM  dept d RIGHT OUTER JOIN new_emp n
ON n.deptno = d.deptno;

--没有员工的部门也返回(主表为部门表)
--92 语法
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM new_emp n, dept d
WHERE n.deptno(+) = d.deptno;
--99 语法 (左外连接)
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM  dept d LEFT  JOIN new_emp n         --可以省略OUTER
ON n.deptno = d.deptno;

--既返回无部门的员工股,也返回无员工的部门
--92 语法不能两边都写 (+)
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM new_emp n, dept d
WHERE n.deptno(+) = d.deptno(+);          --该行报错
--99 语法(满外连接)
SELECT  n.ename, n.sal, n.comm, d.deptno, d.dname
FROM  dept d FULL OUTER JOIN new_emp n
ON n.deptno = d.deptno;
---------------------------------------------------------------------------------------------------------
                                          --外连接(三表连接)
--查询所有借书记录(不存在的学生和不存在的书均显示)
SELECT r.borrow_id, t.stu_id, t.stu_name, b.book_id, UPPER(b.book_name)
FROM student t, book b, borrow r
WHERE r.stu_id = t.stu_id(+) AND
              r.book_id = b.book_id(+)
ORDER BY r.borrow_id;

--只显示不存在的书
SELECT r.borrow_id, t.stu_id, t.stu_name, b.book_id, UPPER(b.book_name)
FROM student t, book b, borrow r
WHERE r.stu_id = t.stu_id       AND
              r.book_id = b.book_id(+)
ORDER BY r.borrow_id;

--只显示不存在的学生
SELECT r.borrow_id, t.stu_id, t.stu_name, b.book_id, UPPER(b.book_name)
FROM student t, book b, borrow r
WHERE r.stu_id = t.stu_id(+) AND
              r.book_id = b.book_id
ORDER BY r.borrow_id;

--书和学生必须都存在
SELECT r.borrow_id, t.stu_id, t.stu_name, b.book_id, UPPER(b.book_name)
FROM student t, book b, borrow r
WHERE r.stu_id = t.stu_id      AND
              r.book_id = b.book_id
ORDER BY r.borrow_id;

 

转载于:https://www.cnblogs.com/edwardli/p/7800215.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值