数据库15:多表查询

数据库

十五、多表查询

UNION联合查询

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
union要求:

  • 两边 select 语句的字段数必须一样
  • 两边可以具有不同数据类型的字段
  • 字段名默认按照左边的表来设置
  • 用法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

INNER JOIN: 内连接 (交集)

数据库15:多表查询_第1张图片

  • INNER JOIN 关键字在表中存在至少一个匹配时返回行。
  • 语法
SELECT 字段
FROM1 INNER JOIN2
ON1.字段=2.字段;
-- 或:
SELECT column_name(s)
FROM table1 JOIN table2
ON table1.column_name=table2.column_name;

LEFT JOIN: 左连接

数据库15:多表查询_第2张图片

  • LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
  • 语法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

RIGHT JOIN: 右连接

数据库15:多表查询_第3张图片

  • RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表
    (table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
  • 语法
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

FULL JOIN: 全连接

数据库15:多表查询_第4张图片

  • FULL JOIN 的连接方式是只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
  • 特别注意: MySQL 并不支持 full join
  • 语法
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

各种连接对比

数据库15:多表查询_第5张图片

NATURAL JOIN: 自然连接

  • natural join 自然内连接
  • natural left join 自然左外连接
  • natural right join 自然右外连接
  • 特点:
    – 可以自动判断连接的条件,依据的是同名字段
    – 如果没有同名字段,返回的是笛卡尔积
    – 自动返回整理好的结果
    1.连接的字段只返回一个
    2.连接的字段放在最前面
select * from stuinfo a natural join score b;
select * from stuinfo a natural left join score b;

CROSS JOIN:交叉连接

特点:返回一个笛卡尔积

select * from a cross b;

using 函数

select * from stuinfo a left join score b on a.sid=b.sid; #主要作用,是自动查找关联字段,依据的是同名字段,但是同名字段是自己制定
select * from stuinfo a join score b using(sid);

子查询

查询的语句中还有一个查询

select name from student where id in (select id from score
where math > 10);

你可能感兴趣的:(基础)