本文测试基于以下两个表,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-内连接、外连接(左、右)、交叉连接的更多相关文章

  1. sql内连接外连接自然连接

    为什么我们要使用内连接和外连接呢?可以从两张或者多张表中找出,我们需要的属性. 这个比较好:http://www.cnblogs.com/youzhangjin/archive/2009/05/22/ ...

  2. 知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)        (3)全外连接(左右 ...

  3. mysql数据库中的多表查询(内连接,外连接,子查询)

    用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...

  4. mysql 内连接 左连接 右连接 外连接

    mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...

  5. SQL中的内连接外连接和交叉连接是什么意思?

    内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...

  6. ORACLE 左连接 右连接 内连接 外连接 全连接 五中表连接方式

    1.左连接 :left join 2.右连接:right join 3.内连接:inner join 4.外连接:outer join 5.全连接:full join

  7. SQL内连接-外连接join,left join,right join,full join

    1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...

  8. mysql8必知必会7 连接 内连接 外连接 交叉连接

    /* 2 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- --------------- ...

  9. mysql中的内连接,外连接实例详解

    内连接: 只连接匹配的行左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边 ...

  10. Oracle内链接+外连接详解

    inner join(内连接) 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据.也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表 ...

随机推荐

  1. NPOI打印设置

    打印设置主要包括方向设置.缩放.纸张设置.页边距等.NPOI 1.2支持大部分打印属性,能够让你轻松满足客户的打印需要. 方向设置首先是方向设置,Excel支持两种页面方向,即纵向和横向. 在NPOI ...

  2. ssh: connect to host github.com port 22: Connection timed out

    问题描述 $ git clone git@github.com:MaugerWu/MaugerWu.github.io.git Cloning into 'MaugerWu.github.io'... ...

  3. JAVA图书管理系统汇总共27个

    好多人都在搜索图书管理系统,感觉这个挺受欢迎的,所以整理了一系列的图书管理系统,让大家选择.java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/683 ...

  4. 处理ftp服务器 在重启后ftp客户端不能连接访问的问题

    1:环境:centos7 2:当在重启centos7 linux服务器后,再连接ftp客户端不能链接 此时需要检查以下几点: 2-1:核查ftp服务是否启动正常: [root@localhost ~] ...

  5. 其他 Confluence 6 的 cookies 和备注

    其他 Confluence 的 cookies 针对 Confluence 的功能,我们还使用了其他的一些 cookies 来存储基本的 产品持久性(product presentation).Con ...

  6. Confluence 6 针对大数据量备份

    XML 站点备份的方式只针对 Confluence 包含有几千页面的情况,XML 备份所需要的时间随着数据量的变化而增加.另外的一个问题是 XML 站点的备份将会包含上 G 的附件数据,随着数据量的增 ...

  7. nginx官方模块之http_random_index_module

    作用 目录中选择一个随机主页 语法

  8. bzoj 2190

    题意:求 题解:这题...数据范围是真小... 研究一下这一表达式,发现gcd(i,j)=1表示i,j互质,那么互质肯定能想到欧拉函数,可是欧拉函数要求j<i,那么我们变化一下:显然原矩阵是对称 ...

  9. 修改jenkins发布账号信息

  10. Jenkins构建后发送邮件

    我们首先安装Jenkins邮件扩展插件“ Email Extension Plugin ”. Jenkins和插件的安装方法见上一篇文章:http://qicheng0211.blog.51cto.c ...