oracle数据库操作---4 多表查询,使用连接在多表中查询数据

本文详细介绍了在Oracle数据库中进行多表查询的方法,包括笛卡尔积问题、如何避免笛卡尔积、内连接、外连接、自连接、自然连接、叉集以及使用WHERE、ON和USING子句创建连接。通过实例解析了各种连接方式的语法格式和应用,帮助读者掌握在多表中查询数据的技巧。
摘要由CSDN通过智能技术生成

多表查询,使用连接在多表中查询数据

多表查询

在了解了单表查询后,与单表查询类似的想法——多表查询也就应运而生
按照常理,其语法格式与单表查询类似,于是按照我们的想法有如下的代码:

select * from employees;--107
select * from departments;--27
select * from employees,departments order by salary;--27 * 107

但是结果我们发现,employees表中的107行数据,departments中的27行数据,在第三行的结果居然多达107*27条,这是不科学的,一个雇员居然将所有的部门信息全部纳入,这明显是不符合常理的,而这种现象,就被称作笛卡尔积。

  1. 笛卡尔积
    笛卡尔积会在下面条件下产生:

    1. 省略连接条件
    2. 连接条件无效
    3. 所有表中的所有行互相连接

    因此为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
    那如何得到我们想要的数据,就是接下来要学习的内容了。

  2. Oracle连接
    使用连接在多个表中查询数据。
    语法格式

    SELECT  table1.column, table2.column
    FROM  table1, table2
    WHERE  table1.column1 = table2.column2;
    

    在 WHERE 子句中写入连接条件。
    在表中有相同列时,在列名之前加上表名前缀

    1. 等值连接

      --oracle的等值连接 
      --当两张表查询时  对于两张表中都存在的字段 则必须指明所查询的字段来自于那张表  使用表名.字段名来指定
      -- 在等值连接中 如果一张表中存在null值 而另一张表中不存在 则不会显示该条记录
      -- 可以避免笛卡尔积的产生
      select first_name,last_name,employees.department_id,department_name 
      from employees,departments
      where  employees.department_id = departments.department_id;
      

      结果得到106条数据,因为员工中有一人没有部门。
      同时我们也该了解一下主键外键,如图:
      在这里插入图片描述

    2. 表的别名的使用
      要知道的是,我们可以在多表查询时,为每张表起一个别名,与之前的别名规则相似,表的别名不能使用as,
      区分重复的列名
      使用表名前缀在多个表中区分相同的列
      在不同表中具有相同列名的列可以用表的别名加以区分
      表的别名
      使用别名可以简化查询。
      使用表名前缀可以提高执行效率
      运用这个规则之前的代码可改写为:

      select first_name,last_name,dept
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值