外连接:

左连接:left join 或 left outer join

以左边的表为基准,如果左表有数据,而右表没有数据,左表的数据正常显示,右表数据显示为空。


创建user表,用于记录用户

user_id username
1 王一
2 李二
3 张三

创建log表,用于记录用户的消费情况

user_id logging
1 100
2 200

分析用户的消费情况,每一个用户不一定都有消费,就要用到左连接,把每个用户的消费情况查出来,包括那些没有消费的用户。没有消费的显示为NULL。

select * from user left outer join log on user.user_id=log.user_id;
select * from user left join log on user.user_id=log.user_id;

查询结果:

user_id username user_id1 logging
1 王一 1 100
2 李二 2 200
3 张三 NULL NULL

右连接:right join 或 right outer join

以右边的表为基准,如果右表有数据,而左表没有数据,右表的数据正常显示,左表显示为空,定义完全和左连接相反。

select * from user right join log on user.user_id=log.user_id;
select * from user right outer join log on user.user_id=log.user_id;

查询结果:

user_id username user_id1 logging
1 王一 1 100
2 李二 2 200

右表中只有两条数据对应着左表中的两条数据,因为是右连接,以右面的为基础,右面没有的,左面有的就会被舍弃。


全连接:

注:MySQL并不支持full join,不过可以通过union 关键字来合并 left join 与 right join来模拟full join.

创建course表:

id course_name stu_id
1 数学 1
2 语文 2
3 英语 4
4 生物 3

创建student表:

stu_id stu_name
1 王一
2 李二
3 张三
5 李四

执行下面语句:

select * from student left join course on student.stu_id=course.stu_id
union
select * from student right join course on student.stu_id=course.stu_id;

查询结果:

stu_id stu_name id course_name stu_id1
1 王一 1 数学 1
2 李二 2 语文 2
3 张三 4 生物 3
5 李四 NULL NULL NULL
NULL NULL 3 英语 4

交叉连接 cross join:

交叉连接得到的是两个表的乘积,也叫笛卡儿积

还是上面的表执行sql语句:

select * from student cross join course;

得到结果如下:

stu_id stu_name id course_name stu_id1
1 王一 1 数学 1
2 李二 1 数学 1
3 张三 1 数学 1
5 李四 1 数学 1
1 王一 2 语文 2
2 李二 2 语文 2
3 张三 2 语文 2
5 李四 2 语文 2
1 王一 3 英语 4
2 李二 3 英语 4
3 张三 3 英语 4
5 李四 3 英语 4
1 王一 4 生物 3
2 李二 4 生物 3
3 张三 4 生物 3
5 李四 4 生物 3

注:如果不写连接条件,默认也是得到表的笛卡儿积,下面的sql语句中两个表只用了,隔开,得到的结果和上面的一样

select * from student,course;

内连接(等值连接): inner join ,=,>=,<=,<,>

注意内连接不分左表和右表,只是把两个表相对应的数据查出来,自动忽略不对应的数据。

user表,用于记录用户

user_id username
1 王一
2 李二
3 张三

log表,用于记录用户的消费情况

user_id logging
1 100
2 200

执行下面的语句

select * from user inner join log on user.user_id=log.user_id;
select * from user,log where user.user_id=log.user_id;

查询结果:

user_id username user_id1 logging
1 王一 1 100
2 李二 2 200

MySQL内连接、外连接、交叉连接的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 【cl】多表查询(内、外连接)

    交叉连接(cross join):该连接产生的结果集笛卡尔积 a有7行,b有8行    a的第一行与b的每一行进行连接,就有8条a得第一行 7*8=56条 select a.real_name,s.u ...

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

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

随机推荐

  1. MT【23】用算术几何不等式证明数列极限存在

    评:如果不需要精确到3,上界的求法可以利用$$(1+\frac{1}{n})^n*\frac{1}{2}*\frac{1}{2}<(\frac{n+\frac{1}{n}*n+\frac{1}{ ...

  2. 2.9 C++使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  3. 架构师成长之路2.1-PXE+Kickstart原理

    点击返回架构师成长之路 架构师成长之路2.1-PXE+Kickstart原理 PXE+Kickstart 主要用于在公司内网批量安装新服务器系统,这极大地简化了用光盘重复安装Linux操作系统的过程, ...

  4. 洛谷 [HNOI2014]道路堵塞 解题报告

    [HNOI2014]道路堵塞 题意 给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路. 又事SPFA玄学... 有个结论,新的最短路一定是\(1\ ...

  5. MySQL索引的使用方式和缺点

    一,create CREATE INDEX可对表增加普通索引或UNIQUE索引. CREATE INDEX index_name ON table_name (column_list) CREATE ...

  6. git 子模块

    为了方便各个子模块独立开发,或使用第三方不断更新的仓库,可以使用子模块来引用. 子模块对应的源码是子模块仓库的克隆. git submodule 与 subtree对比 git submodule 允 ...

  7. php框架:Flight 简介

    Flight是一个php的极简的有着微内核的框架,能过快速的构建RESTful的应用 官网地址: http://flightphp.com/ github地址:https://github.com/m ...

  8. SQL Server sp_executesql介绍和使用

    execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的, 如: ...

  9. python 面向对象之多态

    多态是什么? 用一句话来概括下,多态就是同一操作(方法)作用于不同的对象时,可以有不同的解释,产生不同的执行结果. #!/usr/bin/env python # -*- coding: utf-8 ...

  10. nginx upstream的配置

    upstream backend { server 13.4.2.14:8080 max_fails=2 fail_timeout=30s ; server 13.4.2.15:8080 max_fa ...