SQL语句的四种连接
SQL的四种连接查询
内连接
inner join 或者 join
外连接
左连接 left join 或者 left outer join
右连接 right join 或者 right outer join
完全外连接 full join 或者 full outer join
先创建数据库testjoin
- create database testjoin;
然后引用此数据库testjoin
- use testjoin;
然后创建person表和card表
- create table person(id int,name varchar(20),cardid int);
- create table card(id int,name varchar(20));
然后在表中插入数据
- insert into card values (1,'饭卡'),(2,'建行卡'),(3,'农行卡'),(4,'工商卡'),(5,'邮政卡');
- insert into person values (1,'张三',1);
- insert into person values (2,'李四',3);
- insert into person values (3,'王五',6);
+------+--------+
| id | name |
+------+--------+
| 1 | 饭卡 |
| 2 | 建行卡 |
| 3 | 农行卡 |
| 4 | 工商卡 |
| 5 | 邮政卡 |
+------+--------+
5 rows in set (0.00 sec)
+------+------+--------+
| id | name | cardid |
+------+------+--------+
| 1 | 张三 | 1 |
| 2 | 李四 | 3 |
| 3 | 王五 | 6 |
+------+------+--------+
3 rows in set (0.00 sec)
两张表并没有设置外键
1.inner join 查询(内连接查询)
内连接查询就是两张表中的数据,通过某个相等的字段进行查询,查询出的结果是两张表都有的数据,即查询两张表的交集
- mysql> select * from person inner join card on person.cardid=card.id;
- +------+------+--------+------+--------+
- | id | name | cardid | id | name |
- +------+------+--------+------+--------+
- | 1 | 张三 | 1 | 1 | 饭卡 |
- | 2 | 李四 | 3 | 3 | 农行卡 |
- +------+------+--------+------+--------+
2.left join 查询(左外连接)
左外连接会把左面表中的数据全部取出来,而右边表中的数据,如果有相等的就像是出来,如果没有就补充NULL
- mysql> select * from person left join card on person.cardid=card.id;
- +------+------+--------+------+--------+
- | id | name | cardid | id | name |
- +------+------+--------+------+--------+
- | 1 | 张三 | 1 | 1 | 饭卡 |
- | 2 | 李四 | 3 | 3 | 农行卡 |
- | 3 | 王五 | 6 | NULL | NULL |
- +------+------+--------+------+--------+
3.right join 查询(右外连接)
右外连接会把右面表中的数据全部取出来,而左边表中的数据,如果有相等的就像是出来,如果没有就补充NULL
- mysql> select * from person right join card on person.cardid=card.id;
- +------+------+--------+------+--------+
- | id | name | cardid | id | name |
- +------+------+--------+------+--------+
- | 1 | 张三 | 1 | 1 | 饭卡 |
- | 2 | 李四 | 3 | 3 | 农行卡 |
- | NULL | NULL | NULL | 2 | 建行卡 |
- | NULL | NULL | NULL | 4 | 工商卡 |
- | NULL | NULL | NULL | 5 | 邮政卡 |
- +------+------+--------+------+--------+
4.mysql 不支持full join
- mysql> select * from person full join card on person.cardid=card.id;
- ERROR 1054 (42S22): Unknown column 'person.cardid' in 'on clause'
mysql要想实现全连接,可以使用左外连接和右外连接的并集union进行连接
- mysql> select * from person right join card on person.cardid=card.id
- union
- select * from person left join card on person.cardid=card.id;
- +------+------+--------+------+--------+
- | id | name | cardid | id | name |
- +------+------+--------+------+--------+
- | 1 | 张三 | 1 | 1 | 饭卡 |
- | 2 | 李四 | 3 | 3 | 农行卡 |
- | NULL | NULL | NULL | 2 | 建行卡 |
- | NULL | NULL | NULL | 4 | 工商卡 |
- | NULL | NULL | NULL | 5 | 邮政卡 |
- | 3 | 王五 | 6 | NULL | NULL |
- +------+------+--------+------+--------+
SQL语句的四种连接的更多相关文章
- SQL中的四种连接方式
转自:http://www.cnblogs.com/afirefly/archive/2010/10/08/1845906.html 联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指 ...
- SQL的四种连接
SQL的四种连接-内连接.左外连接.右外连接.全连接 今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图 ...
- ORCAL 数据库的约束以及SQL语言的四种类型
oracle数据库约束: 定义:要输入的这个值是一个什么样的值, 或者是哪个范围内的值 作用: 确保完整性, 确保精确性 1, 非空约束(not null) 记录一条信息的时候如果用户名和密码没有被记 ...
- sql语句有几种写法
sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...
- .net连接sql server的几种连接字符串的写法
.net连接sql server的几种连接字符串的写法 1, 混合验证模式登录 server=电脑名 或 电脑IP;database=数据库名;uid=数据库登录名;password=数据库登录密码 ...
- Oracle的sql语句的两种判断形式
Oracle的sql语句的两种判断形式 判断当前列同时改动当前列 判断一个情况改动其他值 一类情况详解:实现的是当num这一列的值为3时,就显示好 以此类推 1)case num when 3 the ...
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
[原文]:http://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. ...
- 深入了解SQL的四种连接&不然要命的!
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
随机推荐
- webstorm常见快捷方法与遇到的一些问题
1.动态添加标签快捷写法 例子:生成10个文字按顺序编号的class为task-item的div 2.win10下webstorm的terminal无法输入? 打开一个 cmd.exe,标题栏 右键 ...
- thinkphp sql解析缓存
除了查询缓存之外,ThinkPHP还支持SQL解析缓存,因为ThinkPHP的ORM机制,所有的SQL都是动态生成的,然后由数据库驱动执行. 直线电机厂家 所以如果你的应用有大量的SQL查询需求,那么 ...
- 27 和为S的两个数字
0 引言 题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 1 抽象问题具体化 举例: 序列为{1,2,3,4 ...
- Dll注入技术之ComRes注入
DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...
- word 文献标题自动编号
来自:word中自动编号和多级编号的使用 选中标题或段落,点击鼠标右键,在编号菜单内选择适合的自动编号样式.或者在窗口上方的“开始”选项卡中选择编号样式.如果对已选的编号样式不满意,可以照以上方法直接 ...
- 剑指offer——26树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题解: 注意,所谓的子结构,是树的形状和值相同,并非判断B是不是A的一部分[如果是这样,那就是 ...
- mybatis浅显认识
mybatis主配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configu ...
- 20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl+k+
1.模板类pair的用法 包含头文件#include<utility> http://blog.csdn.net/laixingjun/article/details/9005200 ...
- Hbase启动的时候出现:[RpcServer.handler=28,port=60000] ipc.RpcServer: RpcServer.handler=28,port=60000: exiting,master.HMasterCommandLine: Master exiting
hadoop 版本:CDH5.02 Hbase 版本:hbase-0.96.1.1-cdh5.0.2 配置文件:hbase-site.xml <configuration> <pro ...
- 【CF1215F】 Radio Stations
题目 比较精妙的\(\text{2-sat}\)建图了 还是按照套路把每个电台拆成\((0/1,i)\)表示不选/选 前两种连边是板子就不解释了 考虑如何限制选择一个唯一的\(f\),并且还能限制不选 ...