设为首页 收藏本站
查看: 862|回复: 0

[经验分享] Oracle培训(二十八)——Oracle 11g 第四章知识点总结——多表查询

[复制链接]

尚未签到

发表于 2016-8-6 06:03:18 | 显示全部楼层 |阅读模式
Oracle培训(二十八)——Oracle 11g 第四章知识点总结——多表查询

  
  知识点预览
  多表查询
  

  多表查询
  
  1.从多个表中获取获取数据
  

  2.笛卡尔集
  a)笛卡尔集会在下面条件下产生:
  省略连接条件
  连接条件无效
  所有表中的所有行互相连接
  b)为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
  

  3.连接的类型
  a)Oracle 提供的连接 (8i 或更早):
  i.Equijoin
  ii.Non-equijoin
  iii.Outer join
  iv.Self join
  b)适用于SQL: 1999的连接
  i.Cross joins
  ii.Natural joins
  iii.Using clause
  iv.Full or two sided outer joins
  v.Arbitrary join conditions forouter joins
  

  4.Oracle 连接
  a)使用连接在多个表中查询数据。
  
  SELECT table1.column, table2.column
  FROM table1, table2
  WHERE table1.column1 = table2.column2;
  
  b)在 WHERE 字句中写入连接条件。
  c)在表中有相同列时,在列名之前加上表名前缀。
  

  5.等值连接
  
  

SELECT employees.employee_id,employees.last_name,
employees.department_id, departments.department_id,
departments.location_id
FROM  employees, departments
WHERE employees.department_id = departments.department_id;


  6.多个连接条件与 AND 操作符
  

  7.区分重复的列名
  a)使用表名前缀在多个表中区分相同的列。
  b)使用表名可以提高效率。
  c)在不同表中具有相同列名的列可以用别名加以区分。
  8.表的别名
  a)使用别名可以简化查询。
  b)使用表名前缀可以提高执行效率。
  
  

SELECTe.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM   employees e , departments d
WHERE  e.department_id = d.department_id;


  9.连接多个表
  
  连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。
  10.非等值连接
  
  

SELECTe.last_name, e.salary, j.grade_level
FROM   employees e, job_grades j
WHERE  e.salary
BETWEEN j.lowest_sal AND j.highest_sal;


  11.外连接
  a)外连接语法
  
   使用外连接可以查询不满足连接条件的数据。
       外连接的符号是 (+)。
  
  SELECT table1.column,table2.column
  FROM table1,table2
  WHERE table1.column(+)= table2.column;
  
  SELECT table1.column,table2.column
  FROM table1,table2
  WHERE table1.column= table2.column(+);
  
  
  

SELECTe.last_name, e.department_id, d.department_name
FROM   employees e, departments d
WHERE  e.department_id(+) = d.department_id ;


  
  12.自连接
  
  

SELECTworker.last_name || ' works for '
|| manager.last_name
FROM   employees worker, employees manager
WHERE  worker.manager_id = manager.employee_id ;


  13.使用SQL: 1999 语法连接
  
  使用连接从多个表中查询数据:
  
  SELECT table1.column, table2.column
  FROM table1
  [CROSS JOIN table2]|
  [NATURAL JOINtable2] |
  [JOIN table2USING (column_name)] |
  [JOIN table2
   ON(table1.column_name = table2.column_name)]|
  [LEFT|RIGHT|FULLOUTER JOIN table2

   ON (table1.column_name = table2.column_name)];
  
  14.叉集
  a)使用CROSS JOIN 子句使连接的表产生叉集。
  b)叉集和笛卡尔集是相同的。
  
  

SELECTlast_name, department_name
FROM   employees
CROSS JOINdepartments ;


  15.自然连接
  a)NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。
  b)在表中查询满足等值条件的数据。
  c)如果只是列名相同而数据类型不同,则会产生错误。
  
  

SELECT department_id, department_name,
location_id, city
FROM   departments
NATURAL JOIN locations ;


  16.使用 USING 子句创建连接
  a)在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。
  b)使用 USING 可以在有多个列满足条件时进行选择。
  c)不要给选中的列中加上表名前缀或别名。
  d)NATURAL JOIN 和 USING 子句经常同时使用。
  
  

SELECT e.employee_id, e.last_name, d.location_id
FROM   employees e JOINdepartments d
USING (department_id) ;


  
  17.使用ON 子句创建连接
  a)自然连接中是以具有相同名字的列为连接条件的。
  b)可以使用 ON 子句指定额外的连接条件。
  c)这个连接条件是与其它条件分开的。
  d)ON 子句使语句具有更高的易读性。
  
  

SELECT e.employee_id, e.last_name, e.department_id,
d.department_id,d.location_id
FROM   employees e JOINdepartments d
ON     (e.department_id =d.department_id);

SELECT employee_id, city, department_name
FROM   employees e
JOIN   departments d
ON     d.department_id =e.department_id
JOIN   locations l
ON     d.location_id =l.location_id;


  18.内连接 与 外连接
  a)在SQL: 1999中,内连接只返回满足连接条件的数据。
  b)两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外联接。
  c)两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,这种连接称为满 外联接。
  19.左外联接
  
  

SELECTe.last_name, e.department_id, d.department_name
FROM   employees e
LEFT OUTER JOINdepartments d
ON   (e.department_id = d.department_id) ;


DSC0000.jpg
  
  
  20.右外联接
  
  

SELECTe.last_name, e.department_id, d.department_name
FROM   employees e
RIGHT OUTER JOINdepartments d
ON    (e.department_id = d.department_id) ;


  
DSC0001.jpg

  
  
  21.满外联接
  
  

SELECTe.last_name, e.department_id, d.department_name
FROM   employees e
FULL OUTER JOINdepartments d
ON   (e.department_id = d.department_id) ;



  
DSC0002.jpg

  
  22.增加连接条件
  
  

SELECTe.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM   employees e JOIN departments d
ON     (e.department_id = d.department_id)
AND    e.manager_id = 149 ;


  
DSC0003.jpg

  
  23.示例
  a)每个子查询当做临时表
  多表查询 分步思想 化整为零思想
  
  b)查询SALES部门的所有雇员的经理名字
  c)查询雇员所在部门的部门名称
  

1).selectdeptno from emp;
2).selecte.deptno from emp e, dept d;
3).select e.ename,e.deptno,d.dname from emp e, dept d
Wheree.detno=d.deptno;

  
  d)笛卡尔积
  中国队
  美国队
  巴西队
  日本队
  
  中国- 美国
  中国- 巴西
  中国- 日本
  
  笛卡尔积:
  

select c1.name,c2.name
from t_c c1,t_c c2


  
  消除笛卡尔积
  

select c1.name,c2.name
from t_c c1,t_c c2
where c1.name != c2.name;



  
  等值连接
  
  自连接
  e)查询每个雇员的经理名字
  

select e.empno,e.ename,e.mgr,m.empno,m.ename
from emp e,emp m
where e.mgr=m.empno;


  
  f)查询编号是10的所有雇员的经理名字
  
  
  
  g)查询SALES部门的所有雇员的经理名字
  h)查询部门名称是SALES的部门编号
  

Select deptno from dept Where dname=’SALES’
selecte.ename,m.ename,e.deptno,d.dname
fromemp e,emp m,(
Select deptno,dname
from dept
Where dname='SALES'
) d
where e.mgr=m.empno ande.deptno=d.deptno;


  
  
  i)找出没有经理的那个人所在的部门以及该部门所在的地区城市(显示该人的名字和所在部门名字和地区名字) hr用户
  分析:
  

  

--找出没有经理的雇员
Select* from employees
Where manager_id  is null;
--找到这个人所在的部门名称
Selecte.first_name|| '' || e.last_name,d.department_name
From departments d,(
Select* from employees
Wheremanager_id  is null) e
wheree.department_id=d.department_id;
--显示该人所在的城市
--整合

  j)查询出在“Americas”这个国家里的所有员工以及其所在的部门
  分析:
  

--查询出“Americas”所在的地区id
Select region_id from regions whereregion_name = ‘Americas’;
--查询出地区id是上述结果的这个国家的ID
selectc.country_id,c.country_name,r.region_name
from countries c,(
Selectregion_id,region_name
fromregions
whereregion_name = 'Americas') r
wherec.region_id=r.region_id;
--查询出有哪些地方在上一步的范围里
selectl.city,l.location_id,t1.country_name,t1.region_name
from locations l,      
(selectc.country_id cid,c.country_name,r.region_name
fromcountries c,(
Selectregion_id,region_name
fromregions
whereregion_name = 'Americas') r
wherec.region_id=r.region_id) t1
wherel.country_id=t1.cid;
--查询落在上步结果里的部门
selectd.department_id,d.department_name,t2.city,t2.country_name,t2.region_name
from departments d ,(
selectl.city,l.location_id,t1.country_name,t1.region_name
fromlocations l,      
(selectc.country_id cid,c.country_name,r.region_name
fromcountries c,(
Selectregion_id,region_name
fromregions
whereregion_name = 'Americas') r
wherec.region_id=r.region_id) t1
wherel.country_id=t1.cid
) t2
whered.location_id=t2.location_id;
--用等值连接实现:
selecte.first_name,d.department_name,l.city
from employees e, departmentsd,locations l,countries c,regions r
where e.department_id = d.department_id and d.location_id=l.location_idand l.country_id=c.country_id and c.region_id=r.region_id;


  
  k)hr用户解锁,并设置密码123
  解锁 以管理员身份登录sys system
  Alter user hr account unlock;
  设置密码
   Alteruser hr identified by 123;
  Conn hr/123;
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253477-1-1.html 上篇帖子: Oracle存储过程被锁无法编译的解决 下篇帖子: Oracle培训(三十)——Oracle 11g 第十二章知识点总结——其他数据库对象
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表