09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】

1.为什么要拆表?

去除冗余数据

2.表与表之间的关系

这里写图片描述

一对一
    比如
        人和身份证
        QQ和QQ密码
一对多(多对一)
    比如:学生和成绩的关系
多对多
    比如:老师和学生的关系

3.多表查询

这里写图片描述

使用的表格demo1student、demo2和demo3数据如下:

这里写图片描述

这里写图片描述

这里写图片描述

1)合并结果集

这里写图片描述

sql语句

-- 合并结果集  union和union all
  -- union 默认会去除完全一样的数据
SELECT * FROM demo2 UNION SELECT * FROM demo3;
  -- union all 不会去除重复数据
SELECT * FROM demo2 UNION ALL SELECT * FROM demo3;

查询结果:
1)– union 默认会去除完全一样的数据

SELECT * FROM demo2 UNION SELECT * FROM demo3;

这里写图片描述

2)– union all 不会去除重复数据

SELECT * FROM demo2 UNION ALL SELECT * FROM demo3;

这里写图片描述

2)连接查询

这里写图片描述

a.笛卡尔积

这里写图片描述

b.内连接inner

这里写图片描述

sql语句

-- 内连接
-- 将demo2和demo1student中分数相同的数据取出来合并在一起
SELECT * FROM demo2 INNER JOIN demo1student ON demo2.score=demo1student.score;
-- 将demo2和demo1student中id相同的数据取出,并且只显示这些信息:demo1student.id,demo1student.name,demo1student.age,demo1student.gender
-- 因为demo2和demo1student有3个id相同,所以会查询出三个数据
SELECT demo1student.id,demo1student.name,demo1student.age,demo1student.gender FROM demo2 INNER JOIN demo1student ON demo2.id=demo1student.id;

查询结果:
1)– 将demo2和demo1student中分数相同的数据取出来合并在一起

SELECT * FROM demo2 INNER JOIN demo1student ON demo2.score=demo1student.score;

这里写图片描述

2)– 将demo2和demo1student中id相同的数据取出,并且只显示这些信息:demo1student.id,demo1student.name,demo1student.age,demo1student.gender

– 因为demo2和demo1student有3个id相同,所以会查询出三个数据

SELECT demo1student.id,demo1student.name,demo1student.age,demo1student.gender 
FROM demo2 INNER JOIN demo1student ON demo2.id=demo1student.id;

这里写图片描述

c.外连接outer

这里写图片描述

select * from table1 left/right outer join table2 on 条件
这里写图片描述

d.自然连接natural

这里写图片描述

对比内连接和自然连接来说明:自然连接
自然连接可以自动去除重复这里是id

sql语句

-- 自然连接natural
SELECT * FROM demo2 INNER JOIN demo3; -- 内连接
SELECT * FROM demo2 NATURAL JOIN demo3;  -- 自然连接

查询结果

这里写图片描述

3)子查询

这里写图片描述

sql语句

-- 子查询
-- 语句含义:查出分数比id=4学生的年龄与分数和大的学生信息
SELECT * FROM demo1student WHERE score>(SELECT age+score FROM demo1student WHERE id=4);

-- 这里只是为了说明子查询怎么用,出的这个示例本身没有任何意义。

查询结果:

这里写图片描述

4.查询的实际应用(见下节)

地址:MySQL数据查询应用(实战)(一)http://blog.csdn.net/baidu_37107022/article/details/72629784
MySQL数据查询应用(实战)(二)http://blog.csdn.net/baidu_37107022/article/details/72630044

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值