orcale 之 多表查询
笛卡儿积

如上图所示对于orcale 中 emp 表中的数据和 dept 表中的数据(只列举了一部分)取笛卡儿积。一共生成了四组数据,这四组数据就叫笛卡儿积全集,为了避免笛卡儿积全集,我们可以使用 where 子句进行过滤,如图上所示在这四组数据中只有一组符合我们的要求。
总结以上提到的:
1. 笛卡儿积就是两个表的列数相加,行数相乘。
2. 为了避免笛卡儿积可以使用 n - 1 个条件进行过滤(n代表表的个数)。
内连接
内连接是一种常见的的多表查询,一般使用 inner join, 平时在使用的时候可以省略 inner 关键字。内连接组合两张表,并且基于他们的关联关系来连接它们。在使用内连接的时候需要指定表中的哪些字段组成关联关系,并且要说明基于什么的条件进行关联,它的语句如下:
INNER JOIN table_name ON condition
以上中 table_name是表名, condition则为进行连接时的条件。下面的语句是将 emp (员工)表和 dept(部门) 表根据部门的编号进行连接:
select * from emp
join dept on emp.deptno = dept.deptno;
在这个SQL 语句中首先要列出组成所有结果集所需的列名,而后在FROM关键字中指定所需要的表命,在INNER JOIN 关键字后列出要被连接的表名,而在ON后添加了进行连接的条件。需要注意的是在以后的工作和学习中我们不单单是连接两张表,很有可能是多张表呦。
外连接
外部连接和内部链接十分的相识主要是为了处理空值的匹配问题。外部链接的语法和内链接的语法几乎一样,主要区别就是对空值的处理。外部链接不需要两个表具有匹配的记录,这样可以指定某一个表作为基表总是放到结果集中,外部链接分为左外连接(LEFT OUTER JOIN),右外链接(RIGHT OUTER JOIN),全外链接(FULLOUTER JOIN)。
以上三者的共同点都是返回符合条件的数据,不同点有以下几点:
1. 左外链接会返回左表中不符合链接条件的数据
2. 右外连接会返回右表中不符合链接条件的数据
3. 全外连接会返回左表中不符合连接条件的数据和右表中符合连接条件查询的数据。
左外连接,即主表在左侧,字段全部显示,副表 null 补充对其。+号在右侧(副表)
select * from A,B where A.id = B.id(+)
右外连接,即主表在右侧,字段全部显示,副表 null 补充对其。+号在左侧(副表)
select * from A,B where A.id(+) = B.id
如查询部门的部门号,部门名称,以及部门的人数:
select d.deptno,d.dname,count(e.empno)
from emp e,dept d
where e.deptno(+)=d.deptno
group by d.deptno, d.dname;
-------------------------------------------------------
select d.deptno,d.dname,count(e.empno)
from emp e right outer join dept d
on e.deptno=d.deptno
group by d.deptno, d.dname;
自连接
自连接顾名思义:自己和自己链接,其实理解起来很简单,我们在使用表的时候给表起个别名,这样我们就相当于有两个表啦。
我们直接看一个例子:
查看员工的姓名和员工领导的姓名:
select e.ename 员工姓名, b.ename 老板姓名
from emp e inner join emp b
on e.mgr=b.empno;
---------------------------------------------------------
select e.ename 员工姓名, b.ename 老板姓名
from emp e, emp b
where e.mgr=b.empno;
orcale 之 多表查询的更多相关文章
- django(3) 一对多跨表查询、ajax、多对多
1.一对多跨表查询获取数据的三种形式:对象.字典.元组 例:有host与business两张表,host与business的id字段关联,business在host表中的对象名是b, 通过查询hos ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
- Oracle_多表查询
SQL多表查询 等值和不等值连接查询 从多个表中获取数据:如果在查询的时候,直接从多个表中获取数据.没有添加条件判断,会出现"笛卡尔积"错误 笛卡尔积错误 笛卡尔集会在下面条件下产 ...
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- MyBatis实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习总结(五)——实现关联表查询(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...
- sql多表查询时怎么获取查到的字段
首先,多表查询不能用hql(貌似hql就是不支持多表查询,如果可以,希望看到的朋友给个例子) List list = systemService.findListbySql("SELECT ...
- MyBatis入门学习教程-实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
随机推荐
- Java实现四则运算---任路乾,乐滔
1.GitHub地址:https://github.com/3116004700/ruanjiangongcheng 2.项目需求: 生成的题目中计算过程不能产生负数(完成) 生成的题目中如果存在形如 ...
- [LeetCode 题解]: Two Sum
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given an a ...
- Backup--BUFFERSIZE 和BUFFERCOUNT
在备份时,可以通过设置BUFFERSIZE 和BUFFERCOUNT来控制备份的时间和CPU的消耗 使用TF 3605 和 TF 3213 来显示备份使用的 BUFFERCOUNT DBCC TRAC ...
- 1:C#的三种异步的详细介绍及实现
一.介绍异步的前世今生: 异步编程模型 (APM,Asynchronous Programming Model) 模式(也称 IAsyncResult 模式),在此模式中异步操作需要 Begin 和 ...
- js拼接字符串传值,子窗口传值
避免下次再去查资料,记录一下 1.拼接字符串传值 "UpdateState?ids=" + subStr+"&remark="+reValue) 目标页 ...
- BAT 命令 .bat
echo.@.call.pause.rem(小技巧:用::代替rem)是批处理文件最常用的几个命令 echo 表示显示此命令后的字符 echo off 表示在此语句后所有运行的命令都不显示命令行本 ...
- 这些混账的开源库在煞笔Windows系统上的编译方法
母语不就是用来吐槽的么!!!!!说母语我不骂人难道还用英语么!!!!!!!!!! 说什么什么开源库好的狗日的,尼玛有种先搞定编译啊卧槽!!!!!!!!! 是的!!!!!你可以吐槽老子智商低用弱智煞笔W ...
- 201621123023《Java程序设计》第3周学习总结
一. 本周学习总结 写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 关键字:面向对象,类,对象,构造函数,封装,继承 用思维导图或者Onenote或其他工具将这些关键词组织起来 二.书 ...
- linux修改用户名
貌似只需要改红色的就行了,要保险就都改,比如阿里云服务器就要2个都改 ubuntu:修改 /etc/hostname 修改 /etc/hosts 比如:127.0 ...
- 51nod2004 终结之时 (支配树+树剖+树链的并)
link 我永远喜欢洛天依 给定一张图世末积雨云,你需要维护其支配树: 单点修改,子树修改,树链修改 子树求和,树链求和,多条树链的并集求和 撤销之前的操作 可以先用 Lengauer-Tarjan ...