SQL多表联合查询用法介绍
一、联合查询基本概念
联合查询,又称为多表查询,是指针对两个或多个表进行查询,并将结果集合并起来展示的过程。在实际应用中,联合查询是很常见的查询方式,因为单张表无法满足复杂的查询需求。
二、联合查询的语法
联合查询的语法格式如下:
SELECT column1, column2, ...
FROM table1
JOIN table2
ON table1.column_name = table2.column_name
UNION
SELECT column1, column2, ...
FROM table1
JOIN table3
ON table1.column_name = table3.column_name;
在该语法中,UNION表示将多个SELECT查询的结果集合并在一起,其中,每个SELECT查询都可以指定不同的条件、不同的表、不同的列。
三、联合查询中的JOIN操作
在联合查询中,JOIN操作用于连接两个或多个表。JOIN操作需要指定两个表之间的关联条件,关联条件一般是两个表中的某一列。
在JOIN操作中,常用的JOIN类型有以下几种:
1. INNER JOIN
INNER JOIN,也称为等值连接或内连接,是指将两个表中满足关联条件的行返回,其语法格式如下:
SELECT
column1,
column2,
...
FROM
table1
INNER JOIN
table2
ON
table1.column_name = table2.column_name;
2. LEFT JOIN
LEFT JOIN,也称为左连接,是指将左表中所有的行和右表中满足关联条件的行返回,其语法格式如下:
SELECT
column1,
column2,
...
FROM
table1
LEFT JOIN
table2
ON
table1.column_name = table2.column_name;
3. RIGHT JOIN
RIGHT JOIN,也称为右连接,是指将右表中所有的行和左表中满足关联条件的行返回,其语法格式如下:
SELECT
column1,
column2,
...
FROM
table1
RIGHT JOIN
table2
ON
table1.column_name = table2.column_name;
四、联合查询中的UNION操作
在联合查询中,UNION操作用于将多个SELECT查询的结果集合并在一起。需要注意的是,UNION操作要求每个SELECT查询中返回的列的数量和数据类型必须相同。
在UNION操作中,有一种特殊的写法,即使用UNION ALL操作,其特点是将所有查询的结果集合并在一起,不去重。其语法格式如下:
SELECT
column1,
column2,
...
FROM
table1
UNION ALL
SELECT
column1,
column2,
...
FROM
table2;
五、联合查询实例
1. INNER JOIN联合查询实例
假设我们有两张表,一张是用户表user,另一张是订单表order,它们之间有一个共同的列user_id,我们想要查询用户的订单信息,可以使用INNER JOIN联合查询,查询语句如下:
SELECT
user.user_id,
user.name,
order.order_id,
order.amount
FROM
user
INNER JOIN
order
ON
user.user_id = order.user_id;
2. LEFT JOIN联合查询实例
继续以上述的用户表user和订单表order为例,我们想要查询所有用户的订单信息,包括没有订单的用户,可以使用LEFT JOIN联合查询,查询语句如下:
SELECT
user.user_id,
user.name,
order.order_id,
order.amount
FROM
user
LEFT JOIN
order
ON
user.user_id = order.user_id;
3. UNION ALL操作实例
假设我们有三张表,一张是北京地区的销售表sales_bj,另一张是上海地区的销售表sales_sh,还有一张是全国总销售表sales_all,我们想要查询北京和上海地区销售额大于5000的记录,以及全国总销售额大于10000的记录,可以使用UNION ALL操作,查询语句如下:
SELECT
'beijing' AS area,
sales_bj.sale_id,
sales_bj.amount
FROM
sales_bj
WHERE
sales_bj.amount > 5000
UNION ALL
SELECT
'shanghai' AS area,
sales_sh.sale_id,
sales_sh.amount
FROM
sales_sh
WHERE
sales_sh.amount > 5000
UNION ALL
SELECT
'global' AS area,
sales_all.sale_id,
sales_all.amount
FROM
sales_all
WHERE
sales_all.amount > 10000;