SQL的四种连接查询

  内连接

    inner join 或者 join

  外连接

    左连接   left join 或者 left outer join

    右连接  right join 或者 right outer join

    完全外连接  full join 或者 full outer join

 先创建数据库testjoin

  1. create database testjoin;

然后引用此数据库testjoin

  1. use testjoin;

然后创建person表和card表

  1. create table person(id int,name varchar(20),cardid int);
  1. create table card(id int,name varchar(20));

然后在表中插入数据

  1. insert into card values (1,'饭卡'),(2,'建行卡'),(3,'农行卡'),(4,'工商卡'),(5,'邮政卡');
  1. insert into person values (1,'张三',1);
  2. insert into person values (2,'李四',3);
  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 查询(内连接查询)

  内连接查询就是两张表中的数据,通过某个相等的字段进行查询,查询出的结果是两张表都有的数据,即查询两张表的交集

  1. mysql> select * from person inner join card on person.cardid=card.id;
  2. +------+------+--------+------+--------+
  3. | id | name | cardid | id | name |
  4. +------+------+--------+------+--------+
  5. | 1 | 张三 | 1 | 1 | 饭卡 |
  6. | 2 | 李四 | 3 | 3 | 农行卡 |
  7. +------+------+--------+------+--------+

2.left join 查询(左外连接)

  左外连接会把左面表中的数据全部取出来,而右边表中的数据,如果有相等的就像是出来,如果没有就补充NULL

  1. mysql> select * from person left join card on person.cardid=card.id;
  2. +------+------+--------+------+--------+
  3. | id | name | cardid | id | name |
  4. +------+------+--------+------+--------+
  5. | 1 | 张三 | 1 | 1 | 饭卡 |
  6. | 2 | 李四 | 3 | 3 | 农行卡 |
  7. | 3 | 王五 | 6 | NULL | NULL |
  8. +------+------+--------+------+--------+

3.right join 查询(右外连接)

  右外连接会把右面表中的数据全部取出来,而左边表中的数据,如果有相等的就像是出来,如果没有就补充NULL

  1. mysql> select * from person right join card on person.cardid=card.id;
  2. +------+------+--------+------+--------+
  3. | id | name | cardid | id | name |
  4. +------+------+--------+------+--------+
  5. | 1 | 张三 | 1 | 1 | 饭卡 |
  6. | 2 | 李四 | 3 | 3 | 农行卡 |
  7. | NULL | NULL | NULL | 2 | 建行卡 |
  8. | NULL | NULL | NULL | 4 | 工商卡 |
  9. | NULL | NULL | NULL | 5 | 邮政卡 |
  10. +------+------+--------+------+--------+

4.mysql 不支持full join

  1. mysql> select * from person full join card on person.cardid=card.id;
  2. ERROR 1054 (42S22): Unknown column 'person.cardid' in 'on clause'

mysql要想实现全连接,可以使用左外连接和右外连接的并集union进行连接

  1. mysql> select * from person right join card on person.cardid=card.id
  2. union
  3. select * from person left join card on person.cardid=card.id;
  4. +------+------+--------+------+--------+
  5. | id | name | cardid | id | name |
  6. +------+------+--------+------+--------+
  7. | 1 | 张三 | 1 | 1 | 饭卡 |
  8. | 2 | 李四 | 3 | 3 | 农行卡 |
  9. | NULL | NULL | NULL | 2 | 建行卡 |
  10. | NULL | NULL | NULL | 4 | 工商卡 |
  11. | NULL | NULL | NULL | 5 | 邮政卡 |
  12. | 3 | 王五 | 6 | NULL | NULL |
  13. +------+------+--------+------+--------+

SQL语句的四种连接的更多相关文章

  1. SQL中的四种连接方式

    转自:http://www.cnblogs.com/afirefly/archive/2010/10/08/1845906.html 联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指 ...

  2. SQL的四种连接

    SQL的四种连接-内连接.左外连接.右外连接.全连接   今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图 ...

  3. ORCAL 数据库的约束以及SQL语言的四种类型

    oracle数据库约束: 定义:要输入的这个值是一个什么样的值, 或者是哪个范围内的值 作用: 确保完整性, 确保精确性 1, 非空约束(not null) 记录一条信息的时候如果用户名和密码没有被记 ...

  4. sql语句有几种写法

    sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...

  5. .net连接sql server的几种连接字符串的写法

    .net连接sql server的几种连接字符串的写法 1, 混合验证模式登录 server=电脑名 或 电脑IP;database=数据库名;uid=数据库登录名;password=数据库登录密码 ...

  6. Oracle的sql语句的两种判断形式

    Oracle的sql语句的两种判断形式 判断当前列同时改动当前列 判断一个情况改动其他值 一类情况详解:实现的是当num这一列的值为3时,就显示好 以此类推 1)case num when 3 the ...

  7. 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

  8. 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

    [原文]:http://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.    ...

  9. 深入了解SQL的四种连接&不然要命的!

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

随机推荐

  1. webstorm常见快捷方法与遇到的一些问题

    1.动态添加标签快捷写法 例子:生成10个文字按顺序编号的class为task-item的div 2.win10下webstorm的terminal无法输入? 打开一个 cmd.exe,标题栏 右键 ...

  2. thinkphp sql解析缓存

    除了查询缓存之外,ThinkPHP还支持SQL解析缓存,因为ThinkPHP的ORM机制,所有的SQL都是动态生成的,然后由数据库驱动执行. 直线电机厂家 所以如果你的应用有大量的SQL查询需求,那么 ...

  3. 27 和为S的两个数字

    0 引言 题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 1 抽象问题具体化 举例: 序列为{1,2,3,4 ...

  4. Dll注入技术之ComRes注入

    DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...

  5. word 文献标题自动编号

    来自:word中自动编号和多级编号的使用 选中标题或段落,点击鼠标右键,在编号菜单内选择适合的自动编号样式.或者在窗口上方的“开始”选项卡中选择编号样式.如果对已选的编号样式不满意,可以照以上方法直接 ...

  6. 剑指offer——26树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   题解: 注意,所谓的子结构,是树的形状和值相同,并非判断B是不是A的一部分[如果是这样,那就是 ...

  7. mybatis浅显认识

    mybatis主配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configu ...

  8. 20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl+k+

    1.模板类pair的用法 包含头文件#include<utility>   http://blog.csdn.net/laixingjun/article/details/9005200 ...

  9. 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 ...

  10. 【CF1215F】 Radio Stations

    题目 比较精妙的\(\text{2-sat}\)建图了 还是按照套路把每个电台拆成\((0/1,i)\)表示不选/选 前两种连边是板子就不解释了 考虑如何限制选择一个唯一的\(f\),并且还能限制不选 ...