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

1.为什么要拆表?

去除冗余数据

2.表与表之间的关系

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第1张图片

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

3.多表查询

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第2张图片

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

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第3张图片

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第4张图片

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第5张图片

1)合并结果集

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第6张图片

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;

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第7张图片

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

SELECT * FROM demo2 UNION ALL SELECT * FROM demo3;

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第8张图片

2)连接查询

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第9张图片

a.笛卡尔积

b.内连接inner

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第10张图片

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;

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第11张图片

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;

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第12张图片

c.外连接outer

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第13张图片

select * from table1 left/right outer join table2 on 条件
09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第14张图片

d.自然连接natural

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第15张图片

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

sql语句

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

查询结果

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第16张图片

3)子查询

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第17张图片

sql语句

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

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

查询结果:

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】_第18张图片

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

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

你可能感兴趣的:(MySQL,MYSQL)