MySQL内外联结

一、内联结(INNER JOIN)
MySQL内联结使用INNER JOIN将多个数据表t1,t2隔开,结果是t1里的每一个数据行将与t2里的每一个数据行组合。


逗号连接符、CROSS JOIN和JOIN联结类型类似于INNER JOIN。



INNER JOIN、CROSS JOIN和JOIN(注意,不包括逗号操作符) 还支持另外几种用来表明如何对数据表里的数据列进行匹配的语法变体:
1、用一条ON子句代替WHERE子句。

2、使用USING()子句,类似于ON,但要求被联结的数据列必须是同名的。
二、左联结和右联结(外联结)
内联结只显示在两个数据表里都能找到匹配的数据行。
外联结除了显示同样的匹配结果,还可以把其中一个数据表在另一个数据表里没有匹配的数据行也显示出来。
外联结分左联结和右联结两种。
左联结意思是把左数据表在右数据表里没有匹配的数据行也显示出来。
右联结意思是把右数据表在左数据表里没有匹配的数据行也显示出来。
左联结工作原理:
前提:必须给出用来匹配两个数据表里的数据行的数据列(这里t1.i1 = t2.i2)。
如果左数据表的某个数据行与来自右数据表的某个数据行匹配时,那么这两个数据行的内容就会被选取为一个输出数据行。如果来自
左数据表的某个数据行在右数据表里找不到匹配,它就会被选取作为一个输出数据行,此时与它联结的是一个来自右数据表里的"假"数据行,这个“假”
数据行的所有数据列都包含NULL值。
换一句话说,在LEFT JOIN操作里,来自左数据表的每一个数据行在结果集里都有一个对应的数据行,不管它在右数据表里有没有匹配。
在结果集里,在右数据表里没有匹配的结果数据行有这样的特征:来自右数据表的所有数据列都是NULL值。
这个特征可以让你知道右数据表里缺少了哪些数据行。

左联结LEFT JOIN很有用,尤其是在你只想找出在右数据表里没有匹配的左数据表的行时,增加一条WHERE语句,让它把右数据表的数据列全部是NULL值(也就是那些在一个数据表里有匹配,但在另一个数据表里没有匹配)的数据行筛选出来。

一般来说,你把右数据表里值为NULL的数据列显示出来没有什么意义,可以在SELECT语句里输出列清单里剔除:

MySQL内外联结的更多相关文章
- MySQL的联结(Join)语法
MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如 ...
- mysql 内外链接
外联结:分为外左联结和外右联结. 左联结A.B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录 ...
- MySQL -- 表联结
创建联结:(使用WHERE联结)SELECTvend_name,prod_name,prod_priceFROMvendors,productsWHEREvendors.vend_id=product ...
- MySql中的内外联结查询
内联接只显示在两个数据表里都能找到匹配的数据行.外联接除了显示同样的匹配结果,还可以把其中一个数据表在另一个数据表里没有匹配的数据行也显示出来.外联接分左联接和右联接两种. 看下面的例子: 内联接: ...
- MySQL JOIN | 联结
联结是利用SQL的SELECT能执行的最重要的操作.为了提高存储的有效性和避免数据冗余,往往会将有关联的数据存储在好几张表中,那么怎样用一条SELECT语句就能检索出这些数据呢? 答案是JOIN(联结 ...
- mysql 左联结与右联结
mysql> select * from test; +----+------------+-------+-----------+ | id | name | score | subject ...
- mysql 表联结,内部联结
mysql> select * from user; +------+----------+-----------+ | id | name | address | +------+------ ...
- mysql 创建联结
mysql> select * from user; +------+----------+-----------+ | id | name | address | +------+------ ...
- MySQL 外部联结 内连接、左右外连接辨析
内连接 在进行跨表内连接查询数据时,查询结果只返回符合查询条件的数据:跨表内连接查询的结果和使用where的多表查询结果相同,其实就是普通的查询,没啥好说的 -- 语法: SELECT 别名1.字段名 ...
随机推荐
- SDUT2161:Simple Game(NIM博弈+巴什博弈)
传送门 题意 n堆石子,每次可以取一堆至三堆任意非零石子数,取完者赢,问最后谁能赢 分析 以前我们做过NIM博弈是对一堆进行操作,现在换成了三堆,其实对于n堆都一样一堆的情况 如果最后二进制每位数的1 ...
- 老天待我不薄,又来这么一题POJ1753
还是位运算+BFS系列题: 现在这种真是无比喜欢,今天搞了一上午这题...因为状态的改变写错了-T.T #include<cstdio> #include<queue> #in ...
- Codeforces731F Video Cards
考虑每个数在最大值内的倍数都求出来大概只有max(ai)ln(max(ai))个. 先排个序,然后对于每个数ai,考虑哪些数字可以变成ai*k. 显然就是区间[ai*k,ai*(k+1))内的数,这个 ...
- ubuntu 给文件夹创建桌面快捷方式, 其实就是创建个软链接
ln -s /home/zdj/Documents/windows_backup/2019Spring/ ~/Desktop/2019Spring ln -s /home/zdj/Documents/ ...
- Hadoop端口访问
Hadoop集群默认端口 Hadoop本地开发,9000端口拒绝访问
- [转]Linq 如何实现 in 与 not in
本文转自:http://blog.csdn.net/zhangyumei/article/details/5620363 接触 LINQ 也有很长的一段时间了,有些在 SQL 语句中用的很顺手的东西在 ...
- 【学习笔记】深入理解js原型和闭包(16)——完结
之前一共用15篇文章,把javascript的原型和闭包讲解了一下. 首先,javascript本来就“不容易学”.不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学javascrip ...
- git 初识
现在平时用的都是SVN,感觉还是挺好用的.就是有的时候解决冲突的时候有点麻烦.但这样也是不可避免的. 今天看来下GIT,同样是版本控制,GIT的原理,和SVN还是不一样的.我个人的理解,SVN是对每个 ...
- 关于maven source1.5报错
是因为maven 默认是1.5编译的 <build>//加上这个配置,把编译给改掉试试 <pluginManagement> <plugins> <plugi ...
- 洛谷 P1413 坚果保龄球
题目描述 PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zombie出现的那一秒站在 ...