数据库的子查询

在数据库中会遇到子查询也会遇到多表连接,但是有的时候多表查询和子连接可以相互的转换(主要还是看情况,有的时候转换容易,而有的时候转换是非常困难的。


个人的理解是只用什么方便就用哪个查询,使用哪个顺手就用哪个查询。不要因为这两个方法可以相互转换写出来一个就要想破脑袋的将另一个方法也写出来,虽然可以转换,但有的时候真的可能转换不聊,尤其是对刚接触SQL子查询的新手,对什么都充满了好奇,想出一种方法就想用另一种方法将其求解出来。)


首先先说一下使用这两个方法的条件(说错了,请大家指点)

使用连接的时候。假设要显示两个列,其中一个列来至一张表,另一个列来至令一张表。需要将这两张表都显示出来的话,需要将这两张表进行关联之后再显示出来。例如:常用的有员工表和部门表

1017814-20170809122753824-1448412182.png
员工表
1017814-20170809122850261-1315840118.png
部门表
要将这从这两个部门中的分别抽取一个值(员工表中取一个:员工的姓名,部门表中从中抽取一个:部门的名称)写出的结果如下表:

    SELECT a.last_name,b.department_name
    FROM HR.EMPLOYEES a
    JOIN HR.DEPARTMENTS b
    ON a.department_id = b.department_id;

1017814-20170809123154183-468275339.png

使用子查询的时候。假如要显示一个表中的重要数据。需要跟另一个表中的数据进行对比之后才能显示出来(或者是与本表中的某个数据进行对比才能显示出来),但是不需要显示对比的表的内容。所以可以使用子查询的方式进行挑选。

使用的例子:假设要查询员工号等于某一个员工,工资比某一员工高的员工。如下:

    //使用子查询的方式进行写
    SELECT last_name, job_id, salary
    FROM HR.employees
    WHERE job_id =
        (
            SELECT job_id
            FROM HR.employees
            WHERE last_name = 'Abel'
        )
    AND salary >
        (
            SELECT salary
            FROM HR.employees
            WHERE last_name = 'Abel'
        );

    //使用多表连接
    SELECT a.last_name
    FROM HR.EMPLOYEES a
    JOIN HR.EMPLOYEES b ON(a.job_id = b.job_id)                        //使用等值的方式进行连接
    JOIN HR.EMPLOYEES c ON(a.salary > c.salary)                        //使用非等值的方式进行连接
    WHERE B.LAST_NAME = 'Abel' AND c.last_name = 'Abel'        //个人的理解:将各各表中的内容进行筛选

1017814-20170809124617495-1786967866.png

转载于:https://www.cnblogs.com/gxcstyle/p/7324660.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值