什么是完整关联查询
在SQL中,完整关联查询是指同时返回左表和右表中所有行的一种查询方式。如果在左表中没有匹配到右表中的行,那么查询结果中将返回NULL值。同样的,如果在右表中没有匹配到左表中的行,那么查询结果中将返回NULL值。
完整关联查询可以分为内连接和外连接两种类型。内连接是只返回匹配的行,而外连接则返回所有的行。
使用SQL Server实现完整关联查询
创建实例
在开始之前,我们需要创建一个SQL Server的实例,用于测试完整关联查询。
首先,打开SQL Server Management Studio,并连接到本地实例。在左侧的“对象资源管理器”窗口中,右键单击“数据库”并选择“新建数据库”。在弹出的对话框中,输入数据库名称“test_db”并点击“确定”。
CREATE DATABASE test_db;
创建表
接下来,我们需要创建一些测试数据,用于进行完整关联查询的测试。
我们将创建两张表,分别为“customers”和“orders”。其中,“customers”表存储顾客信息,包含以下字段:
customer_id - 顾客ID
customer_name - 顾客姓名
“orders”表存储订单信息,包含以下字段:
order_id - 订单ID
customer_id - 顾客ID
order_date - 下单日期
order_amount - 订单金额
使用以下代码创建这两张表:
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
order_amount DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
INSERT INTO customers VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
INSERT INTO orders VALUES
(1, 1, '2021-01-01', 100.00),
(2, 1, '2021-02-01', 200.00),
(3, 3, '2021-03-01', 300.00);
使用内连接进行完整关联查询
首先,我们来看一下如何使用内连接进行完整关联查询。内连接只返回匹配的行,因此如果在左表中没有匹配到右表中的行,那么查询结果中将不包含该行。如果在右表中没有匹配到左表中的行,则同样不会被包含在结果中。
使用以下代码进行内连接查询:
SELECT customers.customer_name, orders.order_date, orders.order_amount
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;
查询结果如下:
customer_name | order_date | order_amount |
---|---|---|
Alice | 2021-01-01 | 100.00 |
Alice | 2021-02-01 | 200.00 |
Charlie | 2021-03-01 | 300.00 |
可以看到,查询结果中只包含左表和右表中都匹配的行。
使用外连接进行完整关联查询
如果想要返回左表和右表中所有的行,包括左表中没有匹配到右表中的行和右表中没有匹配到左表中的行,那么就需要使用外连接进行完整关联查询。
使用以下代码进行左外连接查询:
SELECT customers.customer_name, orders.order_date, orders.order_amount
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
查询结果如下:
customer_name | order_date | order_amount |
---|---|---|
Alice | 2021-01-01 | 100.00 |
Alice | 2021-02-01 | 200.00 |
Bob | NULL | NULL |
Charlie | 2021-03-01 | 300.00 |
可以看到,查询结果中既包含左表中所有的行,也包含右表中和左表中匹配到的行。对于左表中没有匹配到右表中的行,查询结果中都会有对应的NULL值。
使用以下代码进行右外连接查询:
SELECT customers.customer_name, orders.order_date, orders.order_amount
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;
查询结果如下:
customer_name | order_date | order_amount |
---|---|---|
Alice | 2021-01-01 | 100.00 |
Alice | 2021-02-01 | 200.00 |
Charlie | 2021-03-01 | 300.00 |
NULL | NULL | NULL |
可以看到,查询结果中既包含右表中所有的行,也包含左表中和右表中匹配到的行。对于右表中没有匹配到左表中的行,查询结果中都会有对应的NULL值。
总结
完整关联查询是一种同时返回左表和右表中所有行的查询方式,在SQL中可以使用内连接和外连接来实现。内连接只返回左表和右表中都匹配的行,而外连接则返回所有的行。
SQL Server提供了一系列完整关联查询的语法,包括INNER JOIN、LEFT JOIN和RIGHT JOIN,分别用于实现内连接、左外连接和右外连接。
在实际使用中,可以根据需要,选择适合的查询方式来处理数据。