PL/SQL循序渐进全面学习教程--课程三 从多个表中提取数据

课程三 从多个表中提取数据
  
  本课重点:
  1、SELECT FROM 多个表,使用等连接或非等连接
  2、使用外连接OUTER JOIN
  3、使用自连接[@more@]  课程三 从多个表中提取数据
  
  本课重点:
  1、SELECT FROM 多个表,使用等连接或非等连接
  2、使用外连接OUTER JOIN
  3、使用自连接
  注意:以下实例中标点均为英文半角
  一、连接的概念:
  
  是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。
  连接类型:
  等连接、不等连接、外连接、自连接
  二、Cartesian product :
  指的是当JOIN条件被省略或无效时,所有表的行(交叉)都被SELECT出来的现象。
  Cartesian product可以产生大量的记录,除非是你有意如此,否则应该加上某种条件限制。
  SQL> SELECT name, last_name
  2 FROM s_dept, s_emp;
  300 rows selected. 其中一个表12行,一个表25行。
  
  三、简单连接查询:
  SELECT table.column, table.column...
  FROM table1, table2
  WHERE table1.column1 = table2.column2;
  
  如:SQL> SELECT s_emp.last_name, s_emp.dept_id,
  2 s_dept.name
  3 FROM s_emp, s_dept
  4 WHERE s_emp.dept_id = s_dept.id;
  注意:表前缀的重要性:
  SQL> SELECT s_dept.id ”Department ID”,
  2 s_region.id ”Region ID”,
  3 s_region.name ”Region Name”
  4 FROM s_dept, s_region
  5 WHERE s_dept.region_id = s_region.id;
  在WHERE 段中,如果没有前缀,两个表中都有ID字段,就显得的模棱两可,AMBIGUOUS。
  这在实际中应该尽量避免。
  WHERE 字段中,还可以有其他的连接条件,如在上例中,加上:
  INITCAP(s_dept.last_name) = ’Menchu’;
  再如:WHERE s_emp.dept_id = s_dept.id AND s_dept.region_id = s_region.id AND s_emp.commission_pct > 0;
  
  四、表别名ALIAS:
  1、使用别名进行多表查询 。
  2、仅在这个查询中生效,一旦用了表别名,就不能再用表的原有的名字进行连接。
  实例:
  SQL> SELECT c.name ”Customer Name”,
  2 c.region_id ”Region ID”,
  3 r.name ”Region Name”
  4 FROM s_customer c, s_region r
  5 WHERE c.region_id = r.id;
  别名最多可以30个字符,但当然越少越好。最好也能容易识别。
  五、非等连接
  非等连接一般用在没有明确的等量关系的两个表;
  最简单的说:非等连接就是在连接中没有“=”出现的连接。
  SQL> SELECT e.ename, e.job, e.sal, s.grade
  2 FROM emp e, salgrade s
  3 WHERE e.sal BETWEEN s.losal AND s.hisal;
  说明:Create a non-equijoin to evaluate an employee’s salary grade. The salary 必须在另一个表中最高和最低之间。
  其他操作符<= >= 也可以实现,但是BETWEEN是非常简单实用的。
  BETWEEN ....AND是指闭区间的,这点要注意 ,请大家测试。
  六、外连接
  语法结构:SELECT table.column, table.column
  FROM table1, table2
  WHERE table1.column = table2.column(+);
  实例:
  SQL> SELECT e.last_name, e.id, c.name
  2 FROM s_emp e, s_customer c
  3 WHERE e.id (+) = c.sales_rep_id
  4 ORDER BY e.id;
  显示.....,即使有的客户没有销售代表。
  * 可以理解为有+号的一边出现了NULL,也可以做为合法的条件。
  外连接的限制:
  1、外连接符只能出现在信息缺少的那边。
  2、在条件中,不能用 IN 或者 OR做连接符。
  七、自连接
  同一个表中使用连接符进行查询;
  FROM 的后面用同一个表的两个别名。
  实例:
  SQL> SELECT worker.last_name||’ works for ’||
  2 manager.last_name
  3 FROM s_emp worker, s_emp manager
  4 WHERE worker.manager_id = manager.id;
  意味着:一个员工的经理ID匹配了经理的员工号,但这个像绕口令的连接方式并不常用。
  以后我们会见到一种 子查询:
  select last_name from s_emp where salary=(select max(salary) from s_emp)
  也可以看作是一种变向的自连接,但通常我们将其

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/34329/viewspace-916778/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/34329/viewspace-916778/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值