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

[经验分享] OCP SQL 学习笔记

[复制链接]

尚未签到

发表于 2015-6-17 07:25:42 | 显示全部楼层 |阅读模式
  看执行计划:set autot traceonly,退出看set autot off
  第6章 表连接
  自然表连接:
  1.nature join: 可省去where条件,会自动匹配列名相同的列,如有多列相同,不建议用此法
  语法:select employee_name, department_id
  from  employees nature join departments
  2.using: 只能匹配1列,与nature join互斥,不能连用.可用where,用连接字段再判断时不能加前缀
  语法:select employee_name, department_id
  from  employees join departments
  using (department_id)
  3.on: 条件判断时如有别名,需加前缀
  通用语法:select last_name, department_id
  from employees e join departments d
  on (e.department_id = d.department_id)
  oracle语法:select last_name, department_id
  from employees e, departments d
  where (e.department_id = d.department_id)
  自连接:
  实例:SELECT worker.last_name emp, manager.last_name mgr
  FROM   employees worker JOIN employees manager
  ON    (worker.manager_id = manager.employee_id)
  
  非等价连接:
  实例-给员工工资分级  select e.last_name, e.salary, j.grade_level
  from   employees e join job_grades j
  on     e.salary
  between j.lowest_sal and j.highest_sal
  
  外连接:
  1.inner join
  2.left join
  3.left outer join
  通用语法:SELECT e.last_name, e.department_id, d.department_name
  FROM   employees e left outer join departments d
  ON   (e.department_id = d.department_id)
  oracle语法:SELECT e.last_name, e.department_id, d.department_name
  FROM   employees e ,departments d
  ON   (e.department_id = d.department_id(+))
  
  3.right join
  4.right outer join
  通用语法:SELECT e.last_name, d.department_id, d.department_name
  FROM   employees e right outer join departments d
  ON    (e.department_id = d.department_id)
  oracle语法:SELECT e.last_name, d.department_id, d.department_name
  FROM   employees e, departments d
  ON    (e.department_id(+) = d.department_id)
  5.full join
  6.full outer join
  通用语法:SELECT e.last_name, d.department_id, d.department_name
  FROM   employees e full outer join departments d
  ON   (e.department_id = d.department_id)
  oracle语法:SELECT e.last_name, d.department_id, d.department_name
  FROM   employees e,departments d
  WEHRE (e.department_id(+) = d.department_id)
  AND (e.department is null)
  :能用UNION ALL的时候尽量不用UNION,UNION需要排序,消耗CPU,UNION ALL的效率比UNION高
  
  嵌套子查询:
  1.in
  通用实例:select e.empno, e.deptno
  from emp e
  where e.deptno in (select d.deptno
  from dept d
  where d.loc = ‘CHICAGO’)
  更高效率的写法:select e.empno, e.deptno
  from emp e, dept d
  where (e.deptno = d.deptno) and  (d.loc = ‘CHICAGO’)   
  总结:外连接比子查询效率高
  
  
  笛卡尔集
  多表连接,没有连接条件,或者连接条件少了,都会产生笛卡尔集
  1.cross join
  通用语法:SELECT last_name, department_name
  FROM   employees
  cross join departments
  
  第七章 子查询
  注:单行子查询要用单行操作符,多行子查询要用多行操作符
  用命令查看详细错误:
  a.host
  b.oerr 错误编号
  
  1.实例:查出department_id为null的员工信息
  select * from employees
  where sys_op_map_nonnull (department_id)=(select sys_op_map_nonnull(department_id)
  from emplyees
  where department_id = 178)
  注:sys_op_map_nonnull 是内部函数,帮助文档里找不到,会把NULL值自动转换为‘FF’,即可找到department_id为null的employee
  
  2.实例: 各个部门有多少个员工
  select dname, (select count(*)
  from emp
  where emp.deptno = dept.deptno) cnt
  from dept
  
  3.标量查询实例
  select XX
  from dept
  where XX = f()   --查询某个函数的返回值,有多少条就计算多少次,效率较低
  效率高的方法:
  select XX
  from dept
  where XX = (select f() from dual) --函数只查询一次,计入缓存,效率较高
  4.any
  > any(子查询) --大于任何一个值
  < any(子查询) --小于任何一个值
  = any(子查询) --相当于in
  5.all
  >all(子查询)
  

运维网声明 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-78012-1-1.html 上篇帖子: OCP prepare 20140627 下篇帖子: ocp 042 第六章:管理用户安全性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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