【东软实训】SQL多表链接

如果一个查询同时涉及两个以上的表,则称之为链接查询,链接查询是关系数据库中最主要的查询,主要包括等值链接查询、非等值链接查询、自身链接查询、外链接查询和复合条件链接查询。 
这篇博文我们来对多表链接进行学习。

Outline

  • 链接的基本概念
  • Oracle自有的链接方法
    • 等值链接
    • 非等值链接
    • 自身链接
  • SQL标准语法连接方法
    • 交叉连接(笛卡尔连接)
    • 自然连接
    • Using与On语句
    • 左外连接、右外连接、全连接

Notes

## 链接的基本概念

  • 链接是在多个表之间通过一定的链接条件,使表之间发生关联,进而能从多个表之间获取数据。
  • 语法为
    SELECT    table1.column, table2.column
    FROM    table1, table2
    WHERE    table1.column1 = table2.column2;
  • 在 WHERE子句中书写链接条件。N个表相连时,至少需要N-1个链接条件。
  • 如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。

【链接的分类】

  一个用户查询请求涉及到多个表的时候,链接两个表的条件为=时,就是等值链接查询;其他的运算符链接的就是非等值查询。 注意:链接条件中的各链接字段类型必须是可比的,但不必是相同的,整型和实型是可比的,但是字符型和整型就不可比。

  内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。

  外连接不仅包含符合连接条件的行,还包含左表(左连接时)、右表(右连接时)或两个边接表(全外连接)中的所有数据行。

 

## Oracle自有的连接方法(select from语句)

【等值连接】

 链接两个表的条件为=时,就是等值链接查询

SQL> SELECT     emp.empno,   emp.ename, emp.deptno, dept.deptno, dept.loc2  FROM       emp, dep
3 WHERE emp.deptno=dept.deptno;

 

注意:我们还可以使用And运算符添加其他查询条件,如:

注意:我们还可以用列别名提高性能和限制歧义列名

  • 在用到多个表时可以使用表名作前缀来限定列;
  • 通过使用表前缀可以提高性能;
  • 通过使用列的别名可以区分来自不同表但是名字相同的列;

如:

 

【非等值连接】

 

SQL>    SELECT  e.ename, e.sal, s.grade2    FROM    emp e,   salgrade s3    WHERE   e.sal4    BETWEEN     s.losal AND s.hisal;

 

 

【自身连接】

   一个表与自己进行连接,这种连接称为表的自身连接查询。 
  具体实现的时候,我们可以把自己的表起两个别名,一个是first, 一个是second.在设计的时候可以把这两个表想成是完全两个一样的表,但是各自的字段我们都可以只有调用访问。 

SQL> SELECT worker.ename||' leader is '||manager.ename2  FROM    emp worker, emp manager3  WHERE   worker.mgr = manager.empno;

 

 ## SQL标准语法连接方法

 【交叉连接】

  • 交叉连接会产生连个表的交叉乘积,和两个表之间的笛卡尔积是一样的;
  • 交叉连接使用 CROSS JOIN 子句完成。
  • 笛卡尔积: 第一个表中的所有行和第二个表中的所有行都发生连接。
  • 笛卡尔积在下列情况产生:
    • 连接条件被省略
    • 连接条件是无效的
  • 为了避免笛卡尔积的产生,通常需要在WHERE子句中包含一个有效的连接条件。
<--笛卡尔积写法-->
SQL> SELECT     emp.empno,   emp.ename, emp.deptno,dept.deptno, dept.locFROM       emp, dept;


<--交叉连接写法--> SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc FROM emp CROSS JOIN dept;

 

【自然连接】

  • 自然连接是对两个表之间相同名字和数据类型的列进行的等值连接;
  • 如果两个表之间相同名称的列的数据类型不同,则会产生错误;
  • 使用NATURAL JOIN子句来完成。如:
    SELECT  empno,ename,sal,deptno,loc 
    FROM    emp 
    NATURAL JOIN     dept; 

【Using和On语句】

自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件,如:

SELECT     e.ename,e.ename,e.sal,deptno,d.loc 
FROM       emp e JOIN dept d USING (deptno) 
WHERE      deptno = 20 ;

 

  • 使用USING子句创建连接时,应注意以下几点:
    • 如果如果有若干个列名称相同但数据类型不同,自然连接子句可以用USING子句来替换,以指定产生等值连接的列
    • 有多于一个列都匹配的情况,使用USING子句只能指定其中的一列
    • USING子句中的用到的列不能使用表名和别名作为前缀
    • NATURAL JOIN子句和USING子句是相互排斥的,不能同时使用
  • On语句:
    • 自然连接条件基本上是具有相同列名的表之间的等值连接;
    • 如果要指定任意连接条件,或指定要连接的列,则可以使用ON子句;
    • 用ON将连接条件和其它检索条件分隔开,其它检索条件写在WHERE子句
    • ON子句可以提高代码的可读性
SELECT     e.empno, e.ename, d.loc,m.ename 
FROM           emp e 
JOIN           dept d 
ON             e.deptno = d.deptno 
JOIN           emp m 
ON             e.mgr = m.empno; 

 

【左外连接、右外连接、全连接】

  • 外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
  • 三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:
    • 左外连接(⟕)还返回左表中不符合连接条件单符合查询条件的数据行。
    • 右外连接(⋉)还返回右表中不符合连接条件单符合查询条件的数据行。
    • 全外连接()还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。
  • 说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。在三种类型的外连接中,OUTER 关键字是可省略的。
<--左外连接-->
SELECT     e.ename,e.deptno,d.loc 
FROM       emp e 
LEFT OUTER JOIN dept d 
ON         (e.deptno = d.deptno); 

<--右外连接--> SELECT e.ename,e.deptno,d.loc FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);
<--全连接--> SELECT e.ename,e.deptno,d.loc FROM emp e FULL OUTER JOIN dept d ON (e.deptno = d.deptno);

 

转载于:https://www.cnblogs.com/hithongming/p/9333801.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博鳌“‘AI+时代’来了吗”分论坛,嘉宾们有何重要观点?...

雷锋网(公众号&#xff1a;雷锋网)3月27日消息&#xff0c;正在进行中的博鳌亚洲论坛2019年年会&#xff0c;于2019年3月26日至29日在中国海南博鳌举办。今年博鳌论坛的主题为“共同命运 共同行动 共同发展”。今天&#xff0c;在主题为《“AI时代”来了吗&#xff1f;》分论坛…

一款统计摸鱼时长的开源项目

对于我们程序员&#xff0c;在工作中一天8小时&#xff0c;不可能完全在写代码了&#xff0c;累了刷刷论坛、群里吹吹牛&#xff0c;这都是非常正常的。虽然一天下来&#xff0c;可能我们都可以按时完成工作&#xff0c;但是我们不知道&#xff0c;时间都花在哪里了&#xff0c…

saltstack 主题说明

转载于:https://www.cnblogs.com/40kuai/p/9335869.html

基于spring boot 的ssm项目的简单配置

2019独角兽企业重金招聘Python工程师标准>>> 我前面的帖子有介绍spring boot的简单搭建&#xff0c;现在我再讲讲spring boot的简单配置 首先&#xff0c;项目结构 启动类 RestController 注解相当于ResponseBody &#xff0b; Controller合在一起的作用。 Sprin…

nest 架构_如何与其他人分享您的Nest Cam Feed

nest 架构Your Nest Cam can help you keep an eye on your home from anywhere you are, but more eyes you trust to watch your stuff is more comforting. If you want someone else to check in once in a while, you can share your Nest Cam feed with a simple, passwo…

.Net 和Assembly下滑其它回升,TIOBE编程语言2022年12排行榜

楔子TIOBE编程语言排行榜一般反应的是语言的生态&#xff0c;个人比较喜欢这个排行。来看下2022年最后一个月12月&#xff0c;最后一天,TIOBE的排行榜单。榜单分析这里只看下前10名的编程语言&#xff0c;里面非常显眼的是所有的语言都增加了生态环境&#xff0c;包括不被看好的…

Haproxy安装与配置

Haproxy安装与配置 有关高负载均衡的软件&#xff0c;目前使用比较多的是haproxy、nginx和lvs。下面我们就开始学习haprxoy这款软件。 1、Haproxy概念 1.1、haproxy原理 haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP&#xff08;第七层&#xff09;应用的代理&…

删除word中所有的表格_如何在Word中删除表格

删除word中所有的表格If you’ve inserted a table in Word and you now want to delete it, you may have found it’s not all that straightforward to delete the entire table without deleting other content around the table. We’ll show you a couple of ways around…

Jenkins在windows平台下,让Powershell和批处理可以拉起进程并保持

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;无尽的折腾后&#xff0c;终于又回到…

MVC身份验证及权限管理(转载)

from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式&#xff0c;其中最常用的就是我们的Form认证&#xff0c;需要配置相应的信息。例如下面的配置信息&#xff1a; <authentication mo…

WPF-23 基于Timer任务调度

.NET的FCL中提供了几个计时器&#xff0c;大多数初学者都不清楚他们有什么不同&#xff0c;那我们这节来剖解一下每个计时器的本质&#xff1a;1.System.Threading.Timer如果在一个线程池上执行一个定时的周期性的后台线程任务他是最好的选择&#xff0c;这个类是和线程池相关联…

在.NET中不安装Office使用EPPlus生成带图表(Chart)的Excel报表

在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的需求&#xff0c;特别是在一些ASP.NET网站中&#xff0c;有时候我们并不能保证Web服务器上一定安装了Office组件&#xff0c;所以使用微软的Office来生成Excel并不保证在所有情况下都使用&#xff0c;有时候即使W…

facebook 邀请好友_如何在Facebook上与某人解除好友

facebook 邀请好友It’s very easy for your Facebook News Feed to get cluttered. After a few years adding ukulele playing magicians you meet wandering the street and the bar staff at every bar you go to regularly, it gets overrun with people you’ll never se…

mac下npm/node的安装和卸载、升级;node、npm升级后最后删掉node_modules重新安装

mac还是使用brew install简单一些&#xff1b;最好使用一种安装方式&#xff0c;不要多种方式互用&#xff1b; 更新npm到最新版本npm install -g npm更新npm到指定版本 npm -g install npm2.9.1指定安装目录npm install --prefix /usr/local -g npm 1、从官网https://nodejs.o…

Edison的2022年终总结

大家好&#xff0c;我是Edison。2022年即将结束&#xff0c;又到了做年终总结的时候&#xff0c;它是我每年的一个习惯&#xff0c;意味着又要开始新的征途&#xff0c;在开始新的征途之前回顾一下很有必要。艰难抉择&#xff1a;从互联网到制造业今年最大的变化就是又换了份工…

JNI

配置NDK&#xff0c;调用JNI最终会生成一个so库&#xff0c;如果so库生成了。直接在项目中使用so库即可调用本地方法。注意&#xff1a;api的包名要与so库定义的包名一致。 1什么是jni jni java native interface java本地开发接口&#xff0c;是JAVA和C互相调用的桥梁。 2jni有…

dvd vlc 复制_如何使用VLC翻录DVD

dvd vlc 复制There are many ways to rip a DVD to your computer, but if you’re looking for the most straightforward option, VLC is easy and free. Besides, you probably already have VLC on your computer (and if you don’t, you should). Here, we’ll show you …

新年芯事 | 龙芯物联网主控芯片龙芯1C102和龙芯1C103流片成功

前言近期&#xff0c;龙芯中科面向物联网领域研制的主控芯片--龙芯1C102和龙芯1C103流片成功&#xff0c;两款微控制器芯片各项功能测试正常&#xff0c;符合设计预期。 龙芯1C102主要面向智能家居以及其他物联网设备详细介绍龙芯1C102采用龙芯LA132处理器核心&#xff0c;是一…

【加更】搭建基于chatgpt的钉钉聊天机器人

应某些小伙伴的加更请求&#xff0c;出一期基于钉钉上的聊天机器人&#xff0c;我顺便加更一期&#xff0c;搭建一个钉钉聊天机器人的小教程。首先进入到钉钉开放平台的后台管理系统&#xff1a;https://open.dingtalk.com/进入到 应用开发->企业内部开发->机器人右上角选…

word中 有注释标签吗_如何在Word中注释图像

word中 有注释标签吗If you’re writing a document that includes images, you may want to add annotations to those images to clarify what they represent. You can add callouts to your images to point out particular parts of the image and add text to describe t…