Oracle 连接查询<一>

在Oracle数据库中,连接查询分为交叉连接、内连接、外链接3种类型。其中,交叉连接结果是所有其他连接结果的超集,而外连接结果又是内连接结果的超集。

  1. 交叉连接

    交叉连接又称为笛卡尔积连接,是两个或多个 表之间的无条件连接。一个表中所有记录分别与其他表中所有记录进行记录。如果进行连接的表分别有n1,n2,n3...条记录,那么交叉连接的结果集中将有n1 x n2 x n3 x...条记录。例如,emp表中有14条记录,dept表中有4条记录,那么两个交叉连接后有56条记录,语句为

    SQL> SELECT empno,ename,sal,dname,loc FROM emp,dept;

内连接

内连接是根据指定的连接条件进行连接查询,只有满足连接条件的数据才会出现在结果集中。

当执行两个表内连接查询时,首先在第一个表中查找到第一条记录,然后从头开始扫描第二个表,逐一查找满足连接条件的记录,找到后将其与第一个表中的第一个表中的第一条拼接形成结果集中的一个记录。当第二个表被扫描一遍后,再从第一个表中查询第二个记录,然后再从头扫描第二个表,逐一查找满足连接条件的记录,找到后将其与第一个表中的第二个记录拼形成结果集中的一个记录。重复执行,知道第一个表中的记录全部记录都处理完毕为止。

在Oracle数据库中,内连接的表示方式有两种。

  • 标准SQL语句的连接方式

    SELECT table1.column,table2.column[,...]

    FROM table1 [INNER] JOIN table2 [JOIN] ON condition;

  • Oracle 扩展的连接方式

    SELECT table1.column,table2.column[,...]

    FROM  table1,table2[,...] WHERE condition;

根据连接条件不同,内连接又可以分为相等内连接、不相等内连接两类。如果是在同一个表或视图中进行连接查询,则称为自身连接。

(1)相等连接

相等连接是指使用等号(“=”)指定连接条件的连接查询。进行比较的不同表中列的名称可以不同,但类型必须是匹配的。如果连接的表中有相同名称的列,则需要在列名前加表名,以区分是哪个表中的列。例如,查询10号部门员工的员工号、员工名、工资、部门号和部门名,语句为

SQL>SELECT empno,ename,sal,emp.deptno,dname FROM emp JOIN dept

ON emp.deptno=10 AND emp.deptno=dept.deptno;

(2)不相等连接

如果连接条件中的运算符不是等号而是其他关系运算符,则称为不相等连接。例如,查询10号部门员工的工资等级,语句为

SQL> SELECT empno,ename,sal,grade FROM emp JOIN salgrade

ON sal>losal AND sal<hisal AND deptno=10;

SQL>SELECT empno,ename,sal,grade FROM emp,salgrade

WHERE sal>losal AND sal<hisal AND deptno=10;

(3)自身连接

自身连接是指在同一个表或视图中进行连接,相当于同一个表作为两个或多个表使用。例如,查询所有员工的员工号、员工名和该员工领导的员工名、员工号,语句为

SQL>SELECT work.empno,work.ename,manager.empno,manager.ename

FROM emp work JOIN emp manager ON work.mgr=manager.empno;

SQL>SELECT work.empno,work,ename,manager.empno,manager.ename

FROM emp work,emp manager WHERE work.mgr=manager.empno;

时间: 2024-10-05 06:37:05

Oracle 连接查询<一>的相关文章

Oracle连接查询

一.内连接和外连接    内连接用于返回满足连接条件的记录:而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录,语法如下: Oracle代码 select table1.column,table2.column from table1 [inner|left|right|full]join table2 on table1.column=table2.column; inner join表示内连接.left join表示左外连接.right join表示右外连

oracle 连接查询,和(+)符号的用法

--连接查询 左链接.右链接,全链接 --内链接select e.account 用户名, e.empname 名称, c.comname 公司名称  from employee e inner join company c on (e.com_sq = c.sequen) where c.sequen = 1; --连接查询也可以用这种方法来查询select e.account 用户名, e.empname 名称, c.comname 公司名称  from employee e,company

oracle 连接查询

在SQL Server中已经学习过内联接(inner join).外联接(outer join),外联接又分为左外联接(left outer join)和 右外联接(right outer join).Oracle中对两个表或者若干表之间的外联接用(+)表示. 代码演示:请查询出工资大于2000元的员工的姓名,部门,工作,工资. 由于部门名称在dept中,其他的信息在emp表中,需要内联接才能完成. SQL> SELECT e.ENAME,e.JOB,e.SAL,d.DNAME 2 FROM e

Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页

GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group by deptno; --根据部门分组,并统计 Select deptno, count(*) form emp group by deptno; select deptno, avg(sal) from emp group by deptno; --每个部门的平均工资 HAVING子句 用于指定

Oracle(sql)文盲大扫除思维导图系列(三)——多表连接查询子查询

继续上图 一些demo --通过连接运算符可以实现多个表查询,连接是关系数据库模型的主要特点. --在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来. --一般来说,连接查询比嵌套查询的效率高一点.所以,在Transact-SQL中推荐使用这种方法. select * from emp; select * from dept; select * from salgrade; --先来看内连接,内连接是最典型和最常用的连接运算,内连接通常通过连接谓词或运算符(如joi

oracle(sql)基础篇系列(二)&mdash;&mdash;多表连接查询、子查询、视图

    多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所在的部门名字 --(1)必须明确的指出重复字段属于哪个表 select ename,dname dept.deptno from emp,dept where emp.deptno = dept.deptno;   --(2)新语法:join...on(...=...) select ename,

C#连接Oracle数据库查询数据

C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; using System.Collections.Generic; using System.ComponentModel using System.Data.OracleClient;;//这行和下一行都要先在引用中填加system.data.oracleclient using System.Da

oracle 多表连接查询

一.内连接(inner join (可简写为join)) 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值. 1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复属性. (区别于自然连接) SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; SELECT DEPT.DNAME,EMP.ENAME FROM EMP,DEPT WHERE EMP.D

【学亮开讲】Oracle内外连接查询20181119

--内连接查询 --需求:查询显示业主编号.业主名称.业主类型名称 select os.id 业主编号,os.name 业主名称,ot.name 业主类型名称 from t_owners os,t_ownertype ot where os.ownertypeid=ot.id --需求:查询显示业主编号.业主名称.地址和业主类型 select ow.id 业主编号,ow.name 业主名称,ad.name 地址,ot.name 业主类型 from t_owners ow,t_ownertype