SQL多表查询

  1. 多表查询的操作、限制、笛卡尔积的问题
  2. 统计函数及分组统计的操作
  3. 子查询的操作,并且结合限定查询、数据排序、多表查询、统计查询一起完成各个复杂查询的操作
  4. 数据库的更新操作:增加、修改、删除数据
  5. 数据伪列的作用:ROWNUM,ROWID;
  6. 完成一套复杂查询的应用案例

多表查询的操作、限制、笛卡尔积的问题

.
多表查询

在之前所使用的查询操作之中,都是从一张表之中查询所出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下:

select [distinct] * | 字段 [别名] [,字段[别名]] from 表名称[别名],[表名称[别名],…….],[ ]代表可选择项

当我们查询dept,emp的信息时:


能够发现,SMITH查询了两次,这是因为笛卡尔积查询

在后面加入一些限定条件:


此时的查询结果之中已经消除了笛卡尔积,但是现在只属于显示上的消除,而真正笛卡尔积依然存在,因为数据库的操作机制就属于逐行的进行数据判断,那么按照这个思路理解,现在假设两张数据表的数据量都很大,那么使用这种多表查询的话,效率会如何呢?如果数据量很大,那么这种情况的查询性能很差,甚至会不显示
ps:在多表查询之中,不同的表中有了相同字段名称时,访问这些字段必须加上表名称,即“表.字段”
在具体查询中,可能会遇到表明特别长的,所以可以使用简写:

查询出每一位雇员的姓名、职位、领导的姓名(自身关联实例):


但是这里少了一个KING雇员信息,这就涉及左右关联查询


LEFT JOIN 语法解释

参考:http://www.w3school.com.cn/sql/sql_join_left.asp

再来一个范例:查询处每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门的名称及位置
首先面对这么多的信息,对于新手来说比较难下手,我们可以拆分:
先查询出雇员的编号、姓名、基本工资、职位:

在此基础上,查询出领导的姓名,引入自身关联

查询部门名称及位置,引入dept表,既然有新的表进来,则需要继续增加消除笛卡尔积的条件:


使用了两个left join
其实,教程上还没学到这个left join 自己感觉这么写应该不是最好的,看看就行了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值