oracle表内连接和外连接
n 概述
表连接分为内连接和外连接
n 内连接
内连接实际上就是利用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;
n 外连接
①左外连接 (如果左侧的表完全显示我们就说是左外连接)
②右外连接 (如果右侧的表完全显示我们就说是右外连接)
③完全外连接 (完全显示两个表,没有匹配的记录置为空)
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表内连接和外连接的更多相关文章
- 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 ...
- Oracle 内连接和外连接
内连接用于返回满足连接条件的记录:而外连接则是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回满足不满足连接条件的记录!从Oracle9i开始,可以在From 子句中指定连接语法.语法如 ...
- SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)
SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...
- 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 连接分 ...
- oracle 内连接、外连接、自然连接、交叉连接练习
oracle 内连接.外连接.自然连接.交叉连接练习 --查询员工信息 select * from emp; --查询部门信息 select * from dept; --需求:查询员工姓名.薪资和所 ...
- 【Oracle】内连接、外连接、(+)的使用
表各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 40C 连接分为两种:内连接与外连接. A.内连接 内连接,即最常见 ...
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- 【Oracle学习笔记-4】内连接和外连接的区别
参考链接(非常棒) 摘要 下面主要以两个例子进行说明: 例子1: 表A结构如下: select * from A | 表B结构如下: select * from B 两个表要做连接,就必须有个连接字段 ...
- SQL多表联合查询(交叉连接,内连接,外连接)
连接查询: 交叉连接: 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据航数乘以第二个表中符合,查询条件的数据行数,例如department ...
随机推荐
- Tensorflow技巧
1.尽量控制图片大小在1024以内,不然显存会爆炸. 2.尽量使用多GPU并行工作,训练下降速度快. 3.当需要被检测的单张图片里物体太多时,记得修改Region_proposals的个数 4.测试的 ...
- 创建Hadoop用户
- ubuntu查看并杀死进程
Ubuntu 查看和杀死进程 今天在netbeans中关闭webrick时,发现没有关闭掉,打入localhost:3000 依然显示页面,发现无法从nb中再次关闭 只有进入ubuntu的进程下关闭 ...
- java多线程三种方式
java多线程都有几种方式 有三种: (1)继承Thread类,重写run函数 创建: class xx extends Thread{ public void run(){ Thread.sleep ...
- jeecms怎么修改后台访问路径?
1,修改后台访问路径: 如:http://localhost:8080/jeeadmin/jeecms/login.do 改:http://localhost:8080/hailou/index.do ...
- win10 下安装 neo4j
1.neo4j介绍 neo4j是基于Java语言编写图形数据库.图是一组节点和连接这些节点的关系.图形数据库也被称为图形数据库管理系统或GDBMS.详细介绍可看Neo4j 教程 2.安装Java jd ...
- MyBatis连接Neo4j问题记录:mapper参数传递(节点标签作为参数)
MyBatis与Neo4j的连接我在上一篇做了,这是链接:https://blog.csdn.net/qq_34233510/article/details/82496101 上一篇中UserMapp ...
- PHP快速导出Excel文件 (采用xlsx Writer)
<?php include_once("xlsxwriter.class.php"); ini_set('display_errors', 0); ini_set('log_ ...
- JavaScript 对象的所有方法名称转换为大写
function A() { this.do1 = function () { console.log(1); }; this.do2 = function () { console.log(2); ...
- html 遮罩层以及弹出框的制作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...