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只返回来自源表中的相关的行,即查询的结果表包含的两源表 ...
随机推荐
- windows Sever 2012下Oracle 12c安装配置方法图文教程
windows Sever 2012下Oracle 12c安装配置方法图文教程 Oracle 12c安装配置方法图文教程,具体内容如下 1.我们开启虚拟机 2.Windows Sever 2012启动 ...
- Confluence 6 导入一个 Confluence 站点
有下面 2 种类方法可以导入一个站点 - 通过上传一个文件或者从你 Confluence 服务器上读取一个目录.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录上 ...
- Confluence 6 配置管理员联系页面
管理员联系页面是一个格式化的页面,这个页面能够允许 Confluence 用户在 Confluence 中向管理员发送消息(在这部分的内容,管理员是默认管理员用户组的成员). 有关用户组的解释,请参考 ...
- leetcode(js)算法之914卡牌分组
给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...
- Java的家庭记账本程序(C)
日期:2019.2.4 博客期:029 星期一 今天初步修改了程序,实现了几个基本的功能: 个人信息管理.除查询以外的全部功能!
- laravel 路由缓存
使用路由缓存之前,需要知晓路由缓存只能用于控制器路由,不能用于闭包路由,如果路由定义中包含闭包路由将无法进行路由缓存,只有将所有路由定义转化为控制器路由或资源路由后才能执行路由缓存命令: php ar ...
- laravel 频率限制throttle
在 Laravel 5.6 中,还引入了频率限制功能.所谓频率限制,指的是在指定时间单个用户对某个路由的访问次数限制,该功能有两个使用场景,一个是在某些需要验证/认证的页面限制用户失败尝试次数,提高系 ...
- node.js 的页面渲染方法ejs
.安装依赖的组件 npm i consolidate -D npm i ejs -D 2.布局服务端 const express = require('express'); const consoli ...
- vue和stylus在subline中显示高亮
首先: 安装这两个插件 Vue Syntax Highlight 和 stylus 1.按住 ctrl + shift + p 2.输入:install Package 3.输入: V ...
- Java和C冒泡排序
Java 示例代码: public class test { public static void main(String[] args) { String str = "321dca5&q ...
