- 多表查询的操作、限制、笛卡尔积的问题
- 统计函数及分组统计的操作
- 子查询的操作,并且结合限定查询、数据排序、多表查询、统计查询一起完成各个复杂查询的操作
- 数据库的更新操作:增加、修改、删除数据
- 数据伪列的作用:ROWNUM,ROWID;
- 完成一套复杂查询的应用案例
多表查询的操作、限制、笛卡尔积的问题
.
多表查询
在之前所使用的查询操作之中,都是从一张表之中查询所出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下:
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 自己感觉这么写应该不是最好的,看看就行了!