表联接

表1:teacher
+----+--------+
| id | name   |
+----+--------+
|  1 | 刘德华 |
|  2 | 张学友 |
|  4 | 黎明   |
+----+--------+
表2:student
+----+------+--------+
| id | name | tea_id |
+----+------+--------+
|  1 | 张三 |      1 |
|  2 | 李四 |      1 |
|  3 | 王五 |      1 |
|  4 | 赵六 |      2 |
|  5 | 孙七 |      2 |
+----+------+--------+


1.内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]
第一种写法:(相当于多表查询,用的是where!)
select t.*,s.* from teacher t,student s where t.id=s.tea_id;
第二种写法:(inner省略了)
select t.*,s.* from teacher t join student s on t.id=s.tea_id;
第三种写法:
select t.*,s.* from teacher t inner join student s on t.id=s.tea_id;


+----+--------+----+------+--------+
| id | name   | id | name | tea_id |
+----+--------+----+------+--------+
|  1 | 刘德华 |  1 | 张三 |      1 |
|  1 | 刘德华 |  2 | 李四 |      1 |
|  1 | 刘德华 |  3 | 王五 |      1 |
|  2 | 张学友 |  4 | 赵六 |      2 |
|  2 | 张学友 |  5 | 孙七 |      2 |
+----+--------+----+------+--------+


2.外连接有三种方式:左连接,右连接和全连接。
2.1 左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配
找不到与左表匹配的,用null表示。[x left [outer] join y on...]
第一种写法:
select t.*,s.* from teacher t left join student s on t.id=s.tea_id;
第二种写法:
select t.*,s.* from teacher t left outer join student s on t.id=s.tea_id;


+----+--------+------+------+--------+
| id | name   | id   | name | tea_id |
+----+--------+------+------+--------+
|  1 | 刘德华 |    1 | 张三 |      1 |
|  1 | 刘德华 |    2 | 李四 |      1 |
|  1 | 刘德华 |    3 | 王五 |      1 |
|  2 | 张学友 |    4 | 赵六 |      2 |
|  2 | 张学友 |    5 | 孙七 |      2 |
|  4 | 黎明   | NULL | NULL |   NULL |
+----+--------+------+------+--------+


2.2 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,
找不到匹配的,用null填充。[x right [outer] join y on...]
第一种写法:
select t.*,s.* from teacher t right join student s on t.id=s.tea_id;
第二种写法:
select t.*,s.* from teacher t right outer join student s on t.id=s.tea_id;


+------+--------+----+------+--------+
| id   | name   | id | name | tea_id |
+------+--------+----+------+--------+
|    1 | 刘德华 |  1 | 张三 |      1 |
|    1 | 刘德华 |  2 | 李四 |      1 |
|    1 | 刘德华 |  3 | 王五 |      1 |
|    2 | 张学友 |  4 | 赵六 |      2 |
|    2 | 张学友 |  5 | 孙七 |      2 |
+------+--------+----+------+--------+


2.3 全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)
第一种写法:
select t.*,s.* from teacher t full join student s on t.id=s.tea_id;
第二种写法:
select t.*,s.* from teacher t full outer join student s on t.id=s.tea_id;


3 交叉连接(结果是笛卡尔积)
select t.*,s.* from teacher t cross join student s;
等效于:
select t.*,s.* from teacher t,student s;
+----+--------+----+------+--------+
| id | name   | id | name | tea_id |
+----+--------+----+------+--------+
|  1 | 刘德华 |  1 | 张三 |      1 |
|  2 | 张学友 |  1 | 张三 |      1 |
|  4 | 黎明   |  1 | 张三 |      1 |
|  1 | 刘德华 |  2 | 李四 |      1 |
|  2 | 张学友 |  2 | 李四 |      1 |
|  4 | 黎明   |  2 | 李四 |      1 |
|  1 | 刘德华 |  3 | 王五 |      1 |
|  2 | 张学友 |  3 | 王五 |      1 |
|  4 | 黎明   |  3 | 王五 |      1 |
|  1 | 刘德华 |  4 | 赵六 |      2 |
|  2 | 张学友 |  4 | 赵六 |      2 |
|  4 | 黎明   |  4 | 赵六 |      2 |
|  1 | 刘德华 |  5 | 孙七 |      2 |
|  2 | 张学友 |  5 | 孙七 |      2 |
|  4 | 黎明   |  5 | 孙七 |      2 |
+----+--------+----+------+--------+


5自连接:连接的表都是同一个表,同样可以由内连接,外连接各种组合
方式,按实际应用去组合。
SELECT a.*,b.* FROM table_1 a,table_1 b WHERE a.[name]=b.[name] --连接的两表是同一个表,别称不一样




SELECT a.*,b.* FROM table_1 a LEFT JOIN table_1 b ON a.[name]=b.[name] --左连接写法

转载于:https://www.cnblogs.com/yaoxiaodan/p/5285723.html

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

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

相关文章

sql 之as(Aliases)别名(mysql)

使用别名主要原因是因为如果在很多表的时候,我们的表名可能会混淆,导致语句不清晰,那么我们使用别名就可以让我们操作数据库表的时候更加清晰明了,那么我们假设有如下表: 那么我们查找我们age1的值为11的数据&#…

C语言发展史(The development of the C language)-BCPL、B与C【转】

The Development of the C Language*Dennis M. RitchieBell Labs/Lucent TechnologiesMurray Hill, NJ 07974 USA 概要在1970s早期,C编程语言是作为新生的Unix操作系统的系统实现语言而设计的。衍生于无类型(typeless)语言BCPL,它进化出了一个类型结构【…

linux shell之find高级点的用法

1 查找当前目录a.txt和b.txt文件,下面的o是or的意思, -iname是忽略大小写的意思(-o -iname) find . -iname a.txt -o -iname b.txt 2 查找当前目录下的除了a.txt的文件(!) find . ! -iname "a.txt" 3 查看当前目前下的目录(-type d) find . -type d 4 查看当前目…

Java Eclipse开发环境搭建及注意事项

一、所需工具 (1)JDK(http://www.oracle.com/technetwork/java/javase/downloads/index.html) (2)Tomcat 7.0(http://tomcat.apache.org/download-70.cgi,选择: 32-bit/64-bit Windows Service Installer (pgp,

基于.NetCore开发博客项目 StarBlog - (3) 模型设计

系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计...基于.NetCore开发博客项目 StarBlog - 接口返回值包装基于.NetCore开…

matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...

MATLAB读取文件夹下特定类型格式文件的文件名并读取该格式文件的数据利用代码对大量数据进行自动批处理时,首先需要获取该数据存放的文件夹(文件夹路径),然后获取该文件夹下某一类型数据所有的文件名,最后通过特定的数据读取代码读取数据进行…

sqlserver建表语句_重新认识MySQL中的COUNT语句

在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,统计数量操作更是经常被用到。关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可以使用,那就是COUNT。而对于COU…

显示学生各科成绩和总成绩-面试被问到

表结构如下: name schedule score 张三 语文 20张三 数学 60张三 英语 80李四 数学 30李四 英语 60李四 语文 80 想要的结果如下: 姓名 语文 数学 英语 总成绩 …

sql INNER JOIN 取得两个表中存在连接匹配关系的记录(mysql)

首先:JOIN 通常与 ON 关键字搭配使用 其次我们来看我们的两个表格: table1: table2: 在这里,INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。 例如我要取到table1和table2之…

【Linux】IPC-消息队列

问题 消息队列id 和键值KEY区别? 首先要注意一个概念:IPC结构都是内核的结构。也就是说IPC结构由内核维护,对于每个进程都是公共的,不属于某个特定进程。只有这样,IPC结构才能支持它们“进程间通信”的功能。 有两个东…

linux shell之得到当前路径下的目录

方法1 find . -type d 方法2 ^是开头开头得意思,然后d是dictionary意思 ls -al | grep ^d 方法3 ls -F | grep /$ 方法4 ls -d */

python中html.parser_在Python中使用HTMLParser解析HTML的教程

如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻、图片还是视频。假设第一步已经完成了,第二步应该如何解析HTML呢?HTML本质上是XML的子集&…

分别统计出其中英文字母、空格、数字和其它字符的个数 matlab 程序,编写一段程序,要求先输入一行字符,然后分别统计出其中英文...

编写一个求和的程序,要求能任意输入两个整数,求和 用javascript写functionadd(){varAdocument.getElementById("a").value;varBdocument.getElementById("b").value;varA用C语言编写一段程序,输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符…

【ArcGIS遇上Python】长时间序列(30年)每两组栅格数据对应做减法运算求物候参数

Python语言在ArcGIS软件中发挥着乾坤大挪移的作用,然而很多人并不知道它的厉害之处。今天我们利用Python语言来批处理遥感物候数据,获取物候期的参数。 说明: (1)Up_Path:始期数据路径变量 (2)Down_Path:末期数据路径变量 (3)outPath:相减输出结果路径变量 完…

Blazor University (14)渲染树

原文链接:https://blazor-university.com/components/render-trees/渲染树当浏览器呈现内容时,它不仅绘制 HTML 中定义的元素,还必须根据页面大小(元素流)计算绘制它们的位置。例如,以下 Bootstrap HTML 将…

思科加强生成树性能的属性(Portfast /Uplinkfast/BackboneFast)与RSTP的关系

思科加强生成树性能的属性(Portfast/Uplinkfast/BackboneFast)与RSTP的关系本文截自于博主CCNP交换技术稿件内容4.2.6思科加强生成树性能的属性(Portfast/Uplinkfast/BackboneFast)与RSTP的关系首先说明一下,为什么笔者…

数据结构(java语言描述)顺序栈的使用

1.声明Istack接口; package stack;public interface Istack { public void clear(); public boolean isEmpty(); public int length(); public Object peek(); public void push(Object x) throws Exception; public Objec…

sql LEFT JOIN RIGHT JOIN(左连接)(mysql)

我们首先来看我们的两个表: table1: table2: 在这里,LEFT JOIN(内连接,或等值连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。 …

linux shell之xargs 、tr、sha1sum、head、tail一般使用

1 xargs命令 有点类似-exec命令 1)删除当前目录下面的c文件 find . -name "*.c" | xargs rm 2)统计当前c文件里面的代码行数 find . -name "*.c" | xargs wc -l 2 tr命令 替换命令 1)把大小替换成小写 echo &quo…

php的_auto,AutoPHPCheck下载

AutoPHPCheck官方版是一款相当优秀的php开发人员专用PHP验证工具,AutoPHPCheck官方版功能全面,便捷好用,支持执行快速验证来帮助您确保代码的安全性,并且软件还附带了一个基本的语法检查器,可以查找并帮助您处理错误。…