Mysql多表查询 & 子查询 语法分析| 示例

目录

关联查询——cross join

概述:

 关联查询 inner join

概述:

关联查询 outher join

概述:

inner join 和outher join 的区别

子查询 IN

概述

IN 分析

子查询 exists

exists 分析


SQL之母 - SQL自学网站SQL自学网站icon-default.png?t=N7T8http://sqlmother.yupi.icu/#/learn/level20

关联查询——cross join

参考:  http://sqlmother.yupi.icu/#/learn/level20

概述:

CROSS JOIN 是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔积。

SELECT
  s.student_id,
  s.student_name,
  s.gender,
  s.age,
  c.class_id,
  c.class_name,
  s.score
FROM
  students s
  CROSS JOIN classes c;

结果:

 关联查询 inner join

参考:http://sqlmother.yupi.icu/#/learn/level21

概述:

在 SQL 中,INNER JOIN 是一种常见的关联查询方式,它根据两个表之间的关联条件,将满足条件的行组合在一起。

注意,INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行。

SELECT e.emp_name, e.salary, e.department, d.manager
FROM employees e
JOIN departments d ON e.department = d.department;

SELECT *
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

关联查询 outher join

参考:http://sqlmother.yupi.icu/#/learn/level22

概述:

在 SQL 中,OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行 。

在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分。

SELECT e.emp_name, e.salary, e.department, d.manager
FROM employees e
LEFT JOIN departments d ON e.department = d.department;


-- LEFT OUTER JOIN(左外连接)
SELECT *
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

-- RIGHT OUTER JOIN(右外连接)
SELECT *
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

-- FULL OUTER JOIN(全外连接)
SELECT *
FROM table1
FULL JOIN table2 ON table1.column = table2.column;

inner join 和outher join 的区别

INNER JOINOUTER JOIN 是 SQL 中用于联接表的两种不同类型的操作。它们之间的主要区别在于如何处理匹配和不匹配的行。

INNER JOIN(内连接):

  • 只返回两个表中匹配的行。
  • 如果两个表中的连接列(通常是主键和外键)具有相同的值,那么这些行将被包括在结果中。
  • 不匹配的行将被排除在结果之外。

OUTER JOIN(外连接):

  • 返回两个表中所有的行,以及匹配的行。
  • 如果两个表中的连接列具有相同的值,那么这些行将被包括在结果中。
  • 如果某一行在一个表中有匹配,而在另一个表中没有匹配,那么仍然会包括这一行,未匹配的列将会用 NULL 值填充。

总的来说,INNER JOIN 用于获取两个表之间匹配的行,而 OUTER JOIN 用于获取所有行,同时在没有匹配时用 NULL 填充未匹配的列。OUTER JOIN 还可以分为 LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN,取决于你想要的联接结果。

子查询 IN

参考:http://sqlmother.yupi.icu/#/learn/level23

概述

子查询是指在一个查询语句内部 嵌套 另一个完整的查询语句,内层查询被称为子查询。子查询可以用于获取更复杂的查询结果或者用于过滤数据。

当执行包含子查询的查询语句时,数据库引擎会首先执行子查询,然后将其结果作为条件或数据源来执行外层查询。

IN 分析

在这个查询中,IN 是一个用于比较的关键字,它用于判断某个值是否在子查询的结果集中。

-- 主查询
SELECT name, total_amount
FROM customers
WHERE customer_id IN (
    -- 子查询
    SELECT DISTINCT customer_id
    FROM orders
    WHERE total_amount > 200
);

子查询 exists

参考:http://sqlmother.yupi.icu/#/learn/level24

exists 分析

其中,子查询中的一种特殊类型是 "exists" 子查询,用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据。

-- 主查询
SELECT name, total_amount
FROM customers
WHERE EXISTS (
    -- 子查询
    SELECT 1
    FROM orders
    WHERE orders.customer_id = customers.customer_id
);

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值