Welcome 微信登录

首页 / 数据库 / MySQL / Oracle数据库之SQL连接查询

前言现实中有这么一种需求,有时候我们需要查询的数据是在多个表中的,那么如何从多个表中查询数据呢?这就需要通过表的连接来实现查询了。笛卡尔积在定义连接之前我们需要简单的了解一下笛卡尔积,笔者不会纠结与其定义,只是看看其实际效果其实笛卡尔积就是没有连接条件或者连接条件无效的连接,例如:select *from emp ,dept;--其结果倾向于一个巨大的记录数,无实际意义上面可以看出笛卡尔积得出的是一个巨大的无意义的记录集合,我们可以通过在where子句中使用有效的连接来避免这种情况,使之具有实际意义。连接定义就是在笛卡尔积的基础上使用连接条件,例如根据两个表的相同列进行连接。若果要进行n个表的连接那么就的添加n-1个连接条件。例如:select *from emp ,dept where emp.deptno = dept.deptno;连接类型连接主要有两种类型等值连接、非等值连接.还包括一些其他的连接方式:多连接、自连接、 定置运算符等值连接上面已经使用过了,即是表连接的where条件是一个表的列等于另一个表的列,通常情况下是主键和外键的判等连接。select *from emp ,dept where emp.deptno = dept.deptno;Tips:因为deptno在两个表中都存在,所以要使用表.字段的形式,否则Oracle认为其歧义等值连接中同样还可以添加约束条件select *from emp ,dept where emp.deptno = dept.deptno and emp.ename ="CLARK";--结果只取一条记录同样可以定义标的别名,不过需要注意的是定义了别名之后,必须通过别名访问字段,不能通过表明来访问了select *from emp e ,dept d where e.deptno = d.deptno and e.ename ="CLARK";非等值连接通过观察scott用户下的emp表和salgrade表,可以知道的是他们之间没有直接的对应项,而是emp的sal列的值在salgrade表中的LOSAL和HISAL之间,他们不是等值连接。select * from emp e,salgrade s where e.sal between s.losal and s.hisal;
  • 1
  • 2
  • 3
  • 下一页
innodb中的REDO解析MySQL的MyISAM引擎不支持事务相关资讯      Oracle数据库连接  SQL连接查询  SQL查询 
  • SQL查询中in、exists、not in、not  (04月16日)
  • 配置Oracle 客户端连接到数据库  (08/17/2013 08:14:57)
  • PHP客户端连接Oracle数据库  (03/08/2013 10:56:47)
  • Hadoop上时实类SQL查询系统对比  (12/01/2013 10:04:25)
  • 提高SQL查询效率  (06/05/2013 06:14:38)
  • Oracle数据库三种连接方式  (01/29/2013 09:45:29)
本文评论 查看全部评论 (0)
表情: 姓名: 字数