sql连接查询

sql 连接查询

连接查询是在关系型数据库中使用的一种操作,它允许将两个或多个表中的数据根据特定的条件关联起来,从而生成一个新的结果集。这个操作在SQL中通过使用不同类型的连接操作符来实现。以下是几种常见的连接查询类型:

  1. 内连接(INNER JOIN):

image.png

内连接返回两个表中满足连接条件的匹配行。如果两个表中的某行与另一个表中的行没有匹配,那么这些行将不会出现在结果集中。

SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
  1. 左外连接(LEFT JOIN):

image.png

左外连接返回左表中的所有行,以及与右表满足连接条件的匹配行。如果某行在右表中没有匹配,那么在结果集中将会有NULL值。

SELECT *
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
  1. 右外连接(RIGHT JOIN):

image.png

右外连接返回右表中的所有行,以及与左表满足连接条件的匹配行。如果某行在左表中没有匹配,那么在结果集中将会有NULL值。

SELECT *
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
  1. 全外连接(FULL JOIN):

image.png

全外连接返回左表和右表中的所有行,以及满足连接条件的匹配行。如果某行在左表或右表中没有匹配,那么在结果集中将会有NULL值。

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

这些连接查询操作允许您根据需要将表中的数据联合起来,以便进行更复杂的查询和分析。根据连接条件和查询需求,您可以选择适当的连接类型来获取所需的数据。

sql连接查询在数学里叫什么名字

在数学中,SQL连接查询类似于集合论中的“笛卡尔积”操作。在集合论中,给定两个集合A和B,它们的笛卡尔积是一个集合,其中的每个元素是由一个来自A的元素和一个来自B的元素组成的有序对。在SQL连接查询中,将两个表根据特定的条件(例如列值相等)进行连接,产生的结果类似于笛卡尔积中的元素对,但会根据连接条件进行筛选。

两个集合都包含,只有左边集合包含,只有右边集合包含:在数学里分表叫什么名字

在数学中,描述两个集合之间的关系时,常常使用以下术语:

  1. 交集:指的是两个集合中共同存在的元素的集合。在SQL中,这类似于内连接(INNER JOIN)操作,只返回满足连接条件的行。

  2. 左差集:指的是只在左边集合中存在而在右边集合中不存在的元素的集合。在SQL中,这类似于左外连接(LEFT JOIN)操作,返回左表中所有的行以及与右表满足连接条件的行。

  3. 右差集:指的是只在右边集合中存在而在左边集合中不存在的元素的集合。在SQL中,这类似于右外连接(RIGHT JOIN)操作,返回右表中所有的行以及与左表满足连接条件的行。

综合来说,这些数学术语与SQL连接查询的不同类型之间有一定的对应关系,但并非完全一致。

笛卡尔积 详细介绍

当涉及两个集合的组合时,笛卡尔积是一个基本的数学概念。它表示了从两个集合中选择一个元素对的所有可能组合,从而形成一个新的集合。这个概念在数学、计算机科学和数据库中都有重要的应用。

假设有两个集合A和B,它们分别包含元素:

A = {a, b, c} B = {x, y}

它们的笛卡尔积将包含所有可能的元素对:

A × B = {(a, x), (a, y), (b, x), (b, y), (c, x), (c, y)}

每个元素对由一个来自集合A的元素和一个来自集合B的元素组成。

在数据库和SQL查询中,笛卡尔积用于连接两个表的所有行,产生一个临时的结果集,其中包含两个表的每一行组合。然后,可以通过添加条件来筛选和限制这个结果集,以获取想要的数据。

然而,实际上很少在数据库查询中直接使用笛卡尔积,因为它可能会导致结果集非常大。通常会使用连接操作(例如INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)来限制结果集,只返回满足特定条件的数据行。

总结:笛卡尔积是一个基本的数学概念,表示从两个集合中选择所有可能的元素对。在数据库和SQL中,笛卡尔积用于连接两个表的所有行,但实际应用中会使用连接操作来筛选结果。

举例

1、初始数据

CREATE TABLE student (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255),
  subject VARCHAR(255),
  score INT
);

INSERT INTO student (name, subject, score) VALUES
  ('John', 'Math', 90),
  ('John', 'Math', 80),
  ('Jane', 'English', 85),
  ('David', 'Science', 92),
  ('Emily', 'History', 88),
  ('Michael', 'Math', 95),
  ('Sophia', 'English', 78),
  ('Daniel', 'Science', 89),
  ('Olivia', 'History', 92),
  ('William', 'Math', 87),
  ('Ava', 'English', 93);

2、需求
查询Math大于80并且English大于80

3、解决方法

SELECT s1.name
FROM student s1
INNER JOIN student s2 ON s1.name = s2.name
WHERE s1.subject = 'Math' AND s1.score > 80
AND s2.subject = 'English' AND s2.score > 80;

4、查询结果

+---------+
|  name   |
+---------+
|   John  |
+---------+

参考

www.liaoxuefeng.com/wiki/117776…

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务