概述

表连接分为内连接和外连接

内连接

内连接实际上就是利用where子句对两张表形成的笛卡尔集进行筛选,我们前面学习的查询都是内连接,也是在开发过程中用的最多的连接查询。

基本语法:

select  字段1,字段2,. . .  from 表1  inner join 表2  on  条件 . . .

select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno; 等同于

select emp.ename,dept.dname from emp inner join dept on emp.deptno=dept.deptno;

外连接

左外连接     (如果左侧的表完全显示我们就说是左外连接)

右外连接      (如果右侧的表完全显示我们就说是右外连接)

完全外连接    (完全显示两个表,没有匹配的记录置为空)

SQL> create table stu(id number,name varchar2(32));

SQL> create table exam(id number,grade number);

实际应用

显示所有人的成绩,如果没有成绩,也要显示该人的姓名和ID号,成绩显示为空。

select stu.name,stu.id,exam.grade from stu,exam where stu.id=exam.id;

上面我们使用的内连接:它的特点是只有两张表同时匹配,才被选择。

使用左外连接:

select stu.name,stu.id,exam.grade from stu left join exam on stu.id=exam.id;

如果stu(左表)的记录没有和exam任何一条记录匹配,也要被选中。

怎么判断一张表是左边,如果在left join左边,就是左表。

另外一种写法:

select stu.name,stu.id,exam.grade from stu,exam where stu.id=exam.id(+);

右连接(显示所有成绩,如果没有名字匹配,显示空)

select stu.name,stu.id,exam.grade from stu right join exam on stu.id=exam.id;

完全外连接(显示所有成绩和所有人的名字,如果相应的匹配值,则显示空)

说明:有外联,指定是右边的表如果没有和左边任何一条记录匹配,也要被选中。

另外还有一种写法:

select stu.name,stu.id,exam.grade from stu,exam where stu.id(+)=exam.id;

把(+)写在左边,就表示右外联。

小结:实际上左外联和右外联是可以互为转换

显示所有人的成绩,如果没有成绩,也要显示该人的姓名和ID号,成绩显示为空。

(1)select stu.name,stu.id,exam.grade from stu right join exam on stu.id=exam.id;

(2)select stu.name,stu.id,exam.grade from stu,exam where stu.id(+)= exam.id;

(3)select stu.name,stu.id,exam.grade from exam left join stu on stu.id=exam.id;

(4)select stu.name,stu.id,exam.grade from stu,exam where exam.id= stu.id(+);

完全外连接(显示所有成绩和所有人的名字,如果相应的匹配值,则显示空)

即:两个表查询,不管有没有匹配,全都显示。

select stu.name,stu.id,exam.grade from stu full outer join exam on stu.id=exam.id;

oracle表内连接和外连接的更多相关文章

  1. Oracle内连接、外连接、右外连接、全外连接小总结

    数据库版本:Oracle 9i 表TESTA,TESTB,TESTC,各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 ...

  2. Oracle 内连接和外连接

    内连接用于返回满足连接条件的记录:而外连接则是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回满足不满足连接条件的记录!从Oracle9i开始,可以在From 子句中指定连接语法.语法如 ...

  3. SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)

    SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...

  4. oracle中的内连接和外连接区别

    表t_user1,t_user2,t_user3,各有id,name两列 id name 1 10A 2 20A id name 1 10B 3 30B id name 1 10C 4 40C 连接分 ...

  5. oracle 内连接、外连接、自然连接、交叉连接练习

    oracle 内连接.外连接.自然连接.交叉连接练习 --查询员工信息 select * from emp; --查询部门信息 select * from dept; --需求:查询员工姓名.薪资和所 ...

  6. 【Oracle】内连接、外连接、(+)的使用

    表各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 40C 连接分为两种:内连接与外连接. A.内连接 内连接,即最常见 ...

  7. mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化

    先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...

  8. 【Oracle学习笔记-4】内连接和外连接的区别

    参考链接(非常棒) 摘要 下面主要以两个例子进行说明: 例子1: 表A结构如下: select * from A | 表B结构如下: select * from B 两个表要做连接,就必须有个连接字段 ...

  9. SQL多表联合查询(交叉连接,内连接,外连接)

    连接查询:     交叉连接:   交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据航数乘以第二个表中符合,查询条件的数据行数,例如department ...

随机推荐

  1. MySQL用户权限详细汇总

    1,MySQL权限体系 mysql 的权限体系大致分为5个层级:全局层级:全局权限适用于一个给定服务器中的所有数据库.这些权限存储在mysql.user表中.GRANT ALL ON .和REVOKE ...

  2. Phone List HDU1671 字典树Trie

    模板题...不过会爆内存,要小心 #include <iostream> #include <cstdio> #include <string.h> #pragma ...

  3. Django项目:CRM(客户关系管理系统)--19--11PerfectCRM实现King_admin分页显示条数

    登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html list_per_page = 2 #分页条数 list_per_page = 2 #分页条数 ...

  4. linux压缩打包

    linux下的压缩命令有tar.gzip.gunzip.bzip2.bunzip2. compress.uncompress.zip.unzip.rar.unrar等等,压缩后的扩展名有.tar..g ...

  5. 【react】react-reading-track

    这是一个很有趣的图书阅读demo 先放github地址:https://github.com/onlyhom/react-reading-track 我觉得这个博主的项目很有意思呢 我们一起看看代码啊 ...

  6. python之pip

    sudo vim /usr/bin/lsb_release 确保第一行是python2.7,不然无法使用pip安装第三方依赖

  7. 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集

    0. Data Lake Analytics(DLA)简介 关于Data Lake的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake 以及AWS和 ...

  8. SQL Server导入数据报错"无法在只读列“Id”中插入数据"

    使用sql server 导入数据报错:无法在只读列'id'中插入数据.如下图所示: 查找出现该问题的原因是表中id为自动增长的标识列,需要在[编辑映射]中勾选"启用标识插入": ...

  9. CF1067E Random Forest Rank

    CF1067E Random Forest Rank 可以证明: 一个树的邻接矩阵的秩,等于最大匹配数*2(虽然我只能证明下界是最大匹配) 而树的最大匹配可以贪心, 不妨用DP模拟这个过程 f[x][ ...

  10. java如何访问memcache

    1       Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的 ...