SQL-内连接、外连接(左、右)、交叉连接
本文测试基于以下两个表,student(左) \ teacher(右),使用数据库MariaDB,图形化界面HeidiSQL.
连接查询的概念:根据两个表或多个表的列之间的关系,从这些表中查询数据,即联合查询通常用连接的方式实现。
一、交叉连接
交叉联接返回左表中每一行与右表中每一行的所有行组合。交叉联接也称作笛卡尔积。有一下两种方法:
select 字段列表 from 表1,表2;
select 字段列表 from 表1 cross join 表2;
实例(两种方法):
MariaDB [test]> select * from student,teacher;
MariaDB [test]> select * from student cross join teacher;
运行结果:
+----+----------+------+----+--------+
| id | name | cid | id | name |
+----+----------+------+----+--------+
| 1 | Geoffrey | 1 | 1 | 张三 |
| 1 | Geoffrey | 1 | 2 | 李四 |
| 1 | Geoffrey | 1 | 3 | 王五 |
| 1 | Geoffrey | 1 | 4 | NULL |
| 2 | Tracy | 2 | 1 | 张三 |
| 2 | Tracy | 2 | 2 | 李四 |
| 2 | Tracy | 2 | 3 | 王五 |
| 2 | Tracy | 2 | 4 | NULL |
| 3 | Benjamin | 1 | 1 | 张三 |
| 3 | Benjamin | 1 | 2 | 李四 |
| 3 | Benjamin | 1 | 3 | 王五 |
| 3 | Benjamin | 1 | 4 | NULL |
| 4 | William | 1 | 1 | 张三 |
| 4 | William | 1 | 2 | 李四 |
| 4 | William | 1 | 3 | 王五 |
| 4 | William | 1 | 4 | NULL |
| 5 | Julie | NULL | 1 | 张三 |
| 5 | Julie | NULL | 2 | 李四 |
| 5 | Julie | NULL | 3 | 王五 |
| 5 | Julie | NULL | 4 | NULL |
| 6 | NULL | 2 | 1 | 张三 |
| 6 | NULL | 2 | 2 | 李四 |
| 6 | NULL | 2 | 3 | 王五 |
| 6 | NULL | 2 | 4 | NULL |
+----+----------+------+----+--------+
24 rows in set (0.00 sec)
二、外连接
1. 右连接
右表有就显示,左表有则显示,无则填写NULL。
select 字段列表 from 表1 right join 表2 on 条件;
测试中在原命令的基础上,添加了别名和排序。
MariaDB [test]> select a.id, a.name '学生姓名', b.name '老师姓名' from student as a right join teacher as b on a.cid=b.id order by a.id;
+------+--------------+--------------+
| id | 学生姓名 | 老师姓名 |
+------+--------------+--------------+
| NULL | NULL | 王五 |
| NULL | NULL | NULL |
| 1 | Geoffrey | 张三 |
| 2 | Tracy | 李四 |
| 3 | Benjamin | 张三 |
| 4 | William | 张三 |
| 6 | NULL | 李四 |
+------+--------------+--------------+
7 rows in set (0.00 sec)
2. 左连接
左表有就显示,右表有则显示,无则填写NULL。
select 字段列表 from 表1 left join 表2 on 条件;
MariaDB [test]> select a.id, a.name '学生姓名', b.name '老师姓名' from student as a left join teacher as b on a.cid=b.id order by a.id;
+----+--------------+--------------+
| id | 学生姓名 | 老师姓名 |
+----+--------------+--------------+
| 1 | Geoffrey | 张三 |
| 2 | Tracy | 李四 |
| 3 | Benjamin | 张三 |
| 4 | William | 张三 |
| 5 | Julie | NULL |
| 6 | NULL | 李四 |
+----+--------------+--------------+
6 rows in set (0.00 sec)
三、内连接
显示相互关联的条目。
select 字段列表 from 表1 inner join 表2 on 条件;
MariaDB [test]> select a.id, a.name '学生姓名', b.name '老师姓名' from student as a inner join teacher as b on a.cid=b.id order by a.id;
+----+--------------+--------------+
| id | 学生姓名 | 老师姓名 |
+----+--------------+--------------+
| 1 | Geoffrey | 张三 |
| 2 | Tracy | 李四 |
| 3 | Benjamin | 张三 |
| 4 | William | 张三 |
| 6 | NULL | 李四 |
+----+--------------+--------------+
5 rows in set (0.01 sec)
四、总结
注意两个词即可:
基准(如左连接,会以表1为基准,显示条目数量同表1)
关联(通过on条件,两个表达式产生相互作用的两个条目称为有关联,如左连接为以表1为基准,并且可以显示表2中对应信息)
SQL-内连接、外连接(左、右)、交叉连接的更多相关文章
- sql内连接外连接自然连接
为什么我们要使用内连接和外连接呢?可以从两张或者多张表中找出,我们需要的属性. 这个比较好:http://www.cnblogs.com/youzhangjin/archive/2009/05/22/ ...
- 知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右 ...
- mysql数据库中的多表查询(内连接,外连接,子查询)
用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...
- mysql 内连接 左连接 右连接 外连接
mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...
- SQL中的内连接外连接和交叉连接是什么意思?
内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...
- ORACLE 左连接 右连接 内连接 外连接 全连接 五中表连接方式
1.左连接 :left join 2.右连接:right join 3.内连接:inner join 4.外连接:outer join 5.全连接:full join
- SQL内连接-外连接join,left join,right join,full join
1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...
- mysql8必知必会7 连接 内连接 外连接 交叉连接
/* 2 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- --------------- ...
- mysql中的内连接,外连接实例详解
内连接: 只连接匹配的行左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边 ...
- Oracle内链接+外连接详解
inner join(内连接) 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据.也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表 ...
随机推荐
- Confluence 6 查看索引和提示
查看索引 Confluence 使用被称为 Lucene 的搜索引擎.如果你希望在你的 Confluence站点中查看更多有关索引的细节,你可以下载并且运行 Luke.Luke 是一个开发和诊断工具, ...
- Confluence 6 访问你的宏正文(body)
请查看 Writing User Macros 页面获得有关如何写用户宏的介绍. 这个页面介绍你可以在用户宏中可以使用的的代码信息. 访问你的宏正文(body) 在你用户宏模板中的 $body 对象可 ...
- Function types cannot have argument labels 错误解决方案
今天在封装网络工具类的时候 报错了 经过分析发现是在Swift3.0 把闭包的入参的参数名去掉就好了 正确写法 completion: @escaping (Any?, Bool)->() 错误 ...
- Java基本语法(一)
一.标识符 (1)标识符就是在编写程序时给类,变量,方法等起的名字 (2)标识符的命名规则:标识符由字母,数字,下划线和$组成;第一个字符不能是数字;不能与关键字重名 二.关键字 定义:也称保留字,是 ...
- python压缩文件
#coding=utf-8 #压缩文件 import os,os.path import zipfile #压缩:传路径,文件名 def zip_compression(dirname,zipfile ...
- 首次使用idea步骤
修改代码提示快捷键 默认是ctrl+空格,这个会跟中英文切换的快捷键冲突. 我这里改成了alt+/ tomcat的配置
- zabbix 3.2.4 使用详解
一:zabbix简介及原理 二:zabbix添加主机: /usr/share/zabbix/include/locales.inc.php #这里为zabbix语言包路径‘zh_CN’ 为true ...
- urls.py路由系统分发的本质
路由系统分发的本质 反向生成redirect跳转url 1.在urls.py中指定url的name from django.conf.urls import url from django.contr ...
- Android NDK笔记
目录 Android NDK笔记 AOSP Android repository Android SDK / SDK Tools NDK cmake && ninja lldb adb ...
- C#学习-方法
方法是由方法签名和一系列语句的代码块组成. 其中方法签名包括方法的访问级别(比如public或private).可修饰符(例如abstract关键字).方法名称和参数. C#也支持方法重载.方法重载指 ...