多标联查-外连接

3)外连接

等值连接,需要两个表的关联字段等值才将结果返回。

如果需要将某一个表记录全部返回,即使另一个表找不到

对等字段记录,此时可以使用外连接。

*a.左外连接

----使用LEFT OUTER JOIN...ON...语法------

select e.ename,e.sal,e.deptno,d.dname

from emp e left outer join dept d

on(e.deptno=d.deptno);

A left outer join B on(...)

以A表记录显示为主,B表记录为补充.

当A表记录在B表找不到对等记录时,B以NULL方式补充。

b.右外连接

select e.ename,e.sal,e.deptno,d.dname

from emp e right outer join dept d

on(e.deptno=d.deptno);

上面语句是以dept表显示为主,emp为补充.如果emp没有

对等记录,字段值以NULL补充。

select * from ja

right outer join jb on(ja.id=jb.id);

等价于

select * from jb

left outer join ja on(ja.id=jb.id)

----在JOIN...ON之前的外连接写法--------

//(+)所在表为补充表,另一方是主表

select * from ja,jb

where ja.id(+)=jb.id; //jb为主,ja为补充

c.全外连接

全外连接=左外连接+右外链接-(重复记录)

select * from ja

full outer join jb on(ja.id=jb.id);

//查询部门编号,部门名称,部门员工人数

select d.deptno,

d.dname,

count(e.ename) num

from DEPT d left outer join EMP e

on(d.deptno=e.deptno)

group by d.deptno,d.dname

order by d.deptno;

EMPNO ENAME DEPTNO DNAME

... ... 10 ...

NULL NULL 40 ...

NULL NULL 50 ...

//按部门分组统计,count(*)和count(ename)的区别

count(*) = 1

count(ename) = 0

//查询部门在NEW YORK和CHICAGO的员工编号和员工名称

select e.empno,e.ename

from DEPT d join EMP e on(d.deptno=e.deptno)

where d.loc in (‘NEW YORK‘,‘CHICAGO‘);

时间: 2024-10-14 21:13:14

多标联查-外连接的相关文章

Linq to EF 内连接和左外连接

Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.本文主要讲解没连接和左外连接. 本次使用到的数据实体模型具体的创建方法不再累述.该实体模型中包括Student.Course两个表,他们之间是一对多的关系. 一.内连接 内连接与SqL中inner join一样,即找出两个序列的交集 Model1Container model = new Model1Container(); //内连接 var query = from s in model.Student join c in mode

内连接与外连接

数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3.自连接(连接发生在一张基表内) select a.studentno, a.studentname, b.classname from students a, classes b where a.classid(+) = b.classid; STUDENTNO STUDENTNA

数据库编程1 Oracle 过滤 函数 分组 外连接 自连接

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接 本文实验基于的数据表: winsows安装好Oracle11g之后,开始实验 SQLplus 登陆 ORacle sqlplus 退出的方式 查看用户之下有什么表 查看表的所有记录,不区分大小写 设置SQLplus行宽,页宽,列宽: 清屏命令 select as 语法 1,as别名的使用 2,没有引号带有空格的别名,无法识别: 3,带有

数据库编程2 Oracle 过滤 函数 分组 外连接 自连接

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 续:数据库编程1 Oracle 过滤 函数 分组 外连接 自连接 where like模糊查询,查询员工姓名是4个字母 SQL> select * from emp where ename like '____';      EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM    

连接(交叉连接、内连接、外连接、自连接)

本文非原创 可分为:交叉连接.内连接.外连接.自连接 1.使用交叉连接: 它是非限制连接,就是将两个表格不加任何条件的组合在一起, 即第一个表格的所有记录分别和第二个表格的每一条记录相连接 组合成新的记录,连接后结果集的行数是两个表格的行数的乘积, 列为两表列之和. 语法: (1)select 列名列表 from 表名1 cross join 表名2 (2)select 列名列表 from 表名1 (起别名) , 表名2 注意:当显示某一些字段要用表名指定. 例:select a.book_na

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转载)

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.     2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEFT

内连接,外连接,交叉连接

两个表要做连接,就必须有个连接字段 A表 B表 在A表中的Aid和B表中的Bnameid就是两个连接字段 内连接:利用内连接可获取两表的公共部分的记录:Select * from A JOIN B ON A.Aid=B.Bnameid 运行结果如下: 其实select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的. 外连接:外连接分为两种,一种是左连接(Left JOIN)和

内连接和外连接的区别

在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚.这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下.希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助.(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B. 表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据 表B结构如下: Bid:int:

外连接 内链接 子查询

  笛卡尔积查询:(没有意义) 语法: * select * from A,B; * 笛卡尔积的查询的结果不是想要的结果!!! 内连接查询 语法: * select * from A inner join B on 条件; --- inner 可以省略!!! * select * from A join B on 条件; 案例: * select * from dept join emp on dept.did = emp.dno; 等价于 * select * from dept,emp wh