MySQL内连接、外连接、交叉连接
外连接:
左连接: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内连接、外连接、交叉连接的更多相关文章
- mysql数据库中的多表查询(内连接,外连接,子查询)
用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...
- mysql 内连接 左连接 右连接 外连接
mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...
- 知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右 ...
- sql内连接外连接自然连接
为什么我们要使用内连接和外连接呢?可以从两张或者多张表中找出,我们需要的属性. 这个比较好:http://www.cnblogs.com/youzhangjin/archive/2009/05/22/ ...
- mysql中的内连接,外连接实例详解
内连接: 只连接匹配的行左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边 ...
- SQL中的内连接外连接和交叉连接是什么意思?
内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...
- mysql8必知必会7 连接 内连接 外连接 交叉连接
/* 2 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- --------------- ...
- SQL内连接-外连接join,left join,right join,full join
1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...
- 【cl】多表查询(内、外连接)
交叉连接(cross join):该连接产生的结果集笛卡尔积 a有7行,b有8行 a的第一行与b的每一行进行连接,就有8条a得第一行 7*8=56条 select a.real_name,s.u ...
- Oracle内链接+外连接详解
inner join(内连接) 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据.也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表 ...
随机推荐
- P2464 [SDOI2008]郁闷的小J
题目描述 小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的. 具体说 ...
- day28 反射 属性操作 getattr hasattr setattr delattr
反射 用字符串来对应其同名的属性或者方法,通过某种方法调用这个字符串来执行方法或者获取属性 网络编程的时候非常好用,是很重要的内容 先看个示例吧: class Teather: dic = { &qu ...
- day13 生成器 三元运算 列表解析
本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象想要得到生成器的值必须要用for或者next,list等来获取 生成器生成器就是一个可迭代对象 ...
- MT【30】椭圆的第二定义解题
问题:上式表示的区域是怎样的? 解答:利用椭圆第二定义易知当取等号时为椭圆,又令$y$趋向于$+\infty$时不等号不成立,故可以判断为椭圆内部区域. 评:利用mathmatics软件容易得到
- 精选Spring Boot三十五道必知必会知识点
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家.本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spr ...
- 自学工业控制网络之路2.2-PROFINET
返回 自学工业控制网络之路 自学工业控制网络之路2.2-PROFINET PROFINET由PROFIBUS国际组织(PROFIBUS International,PI)推出,是新一代基于工业以太网技 ...
- SharePoint 2013 批量导入、删除帐号
删除一个group里所有的帐号: cls ########################### # "Enter the site URL here" $SITEURL = &q ...
- POJ1088(记忆搜索加dp)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 106415 Accepted: 40499 Description ...
- AutoCompleteTextView和自定义的CursorAdapter
用雅虎天气接口和AutoCompleteTextView开发天气应用(1) 2014/03/20 | 分类: ANDROID, 开发 | 2 条评论 | 标签: 天气, 安卓开发 分享到:5 jQue ...
- 迅雷thunder://协议解密
echo -n 'thunder://''Cg==' | sed 's?thunder://??' | base64 -d | sed 's/^AA//; s/ZZ$//' 将thunder://替换 ...