深入解析:sql题目练习——多表查询

题目:
现有 orders 表,字段有 order_id(订单编号,主键),customer_id(客户编号),order_date(订单日期);以及 customers 表,字段有 customer_id(客户编号,主键),customer_name(客户姓名),city(客户所在城市)。编写 SQL 查询所有来自 “Beijing” 城市的客户的订单编号、订单日期和客户姓名。

select o.order_id,o.order_date,c.customer_name
from orders o,customers c
where c.customer_id=o.customer_id AND c.city='Beijing'

追问:
1.orders 表还有 total_amount(订单总金额)字段,现在要查询来自 “Shanghai” 城市且订单总金额大于 1000的订单编号、订单日期、客户姓名和订单总金额,SQL 如何实现?
2. 怎么修改这条 SQL(用 JOIN 写法)
追答:
select o.order_id,o.order_date,c.customer_name,o.total_amount
from orders o,customers c
where c.customer_id=o.customer_id AND c.city=‘Shanghai’ AND o.total_amount>1000
改为 join写法为:
select o.order_id,o.order_date,c.customer_name,o.total_amount
from orders o
join customers c ON c.customer_id=o.customer_id
where c.city=‘Shanghai’ AND o.total_amount>1000
相关知识点
JOIN 关键字用于在SQL查询中结合两个或多个表的数据,基于这些表之间的相关列。常见的 JOIN 类型包括 INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOIN。以下是对它们的详细解释:

1. INNER JOIN
  • 含义INNER JOIN 返回两个表中连接条件相匹配的行。只有当连接条件满足时,才会在结果集中包含相应的行。这是最常用的 JOIN 类型,如果不指定 JOIN 类型,默认就是 INNER JOIN
  • 语法示例
SELECT column1, column2
FROM table1
INNER JOIN table2 ON table1.common_column = table2.common_column;
  • 示例说明:假设 table1orders 表,table2customers 表,common_columncustomer_id。只有当 orders 表中的 customer_idcustomers 表中的 customer_id 匹配时,相应的订单和客户信息才会出现在结果集中。
2. LEFT JOIN(也称为 LEFT OUTER JOIN
  • 含义LEFT JOIN 返回左表(JOIN 关键字左边的表)中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则结果集中对应右表的列值为 NULL
  • 语法示例
SELECT column1, column2
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column;
  • 示例说明:继续以 orderscustomers 表为例,使用 LEFT JOIN 时,orders 表中的所有订单记录都会出现在结果集中。对于每个订单,如果在 customers 表中有匹配的客户记录,则显示客户信息;否则,客户相关列显示为 NULL。这在需要查看所有订单,包括那些可能还没有关联客户的订单时很有用。
3. RIGHT JOIN(也称为 RIGHT OUTER JOIN
  • 含义RIGHT JOINLEFT JOIN 相反,它返回右表(JOIN 关键字右边的表)中的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则结果集中对应左表的列值为 NULL
  • 语法示例
SELECT column1, column2
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;
  • 示例说明:以相同的 orderscustomers 表为例,使用 RIGHT JOIN 会确保 customers 表中的所有客户记录都出现在结果集中。对于每个客户,如果有相关订单,则显示订单信息;否则,订单相关列显示为 NULL
4. FULL OUTER JOIN
  • 含义FULL OUTER JOIN 返回左表和右表中的所有行。当某行在另一表中没有匹配项时,结果集中对应另一表的列值为 NULL。它实际上是 LEFT JOINRIGHT JOIN 的并集。
  • 语法示例
SELECT column1, column2
FROM table1
FULL OUTER JOIN table2 ON table1.common_column = table2.common_column;
  • 示例说明:对于 orderscustomers 表,FULL OUTER JOIN 会包含所有订单和所有客户的信息。如果某个订单没有关联客户,客户相关列是 NULL;如果某个客户没有订单,订单相关列是 NULL。不过,并非所有数据库都直接支持 FULL OUTER JOIN 关键字,在不支持的数据库中,可能需要通过 LEFT JOINRIGHT JOIN 的组合来实现类似效果。
posted @ 2025-11-08 18:55  gccbuaa  阅读(6)  评论(0)    收藏  举报