SQL 连接
SQL连接子句
SQL 连接 子句用于在数据库中将两个或多个表的数据组合起来。当相关数据存储在多个表中时,连接帮助您使用它们的外键检索记录,将这些表的字段组合起来。
连接子句的一部分指定了来自两个或多个表的记录要连接的列,这部分通常与ON子句一起使用,并使用各种比较运算符,如<,>,<>,<=,>=,!=,BETWEEN,LIKE和NOT
等。我们还可以使用逻辑运算符AND,OR和NOT连接多个连接断言。
我们可以将连接与update和delete,SQL查询一起使用,从多个表中更新和删除记录。当您使用连接获取一个表时,所显示的结果表不会存储在数据库中。
语法
下面是SQL连接子句的基本语法:
SELECT column_name(s)
FROM table1
JOIN table2;
示例
假设我们使用以下查询创建了一个包含组织客户详细信息的CUSTOMERS表:
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在使用以下的INSERT语句将值插入到这个表中:
INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
CUSTOMERS表将如下创建−
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
下面是另一个表格ORDERS,其中包含了由客户创建的订单详情。
CREATE TABLE ORDERS (
OID INT NOT NULL,
DATE VARCHAR (20) NOT NULL,
CUSTOMER_ID INT NOT NULL,
AMOUNT DECIMAL (18, 2)
);
使用INSERT语句,将值按如下方式插入到该表中:
INSERT INTO ORDERS VALUES
(102, '2009-10-08 00:00:00', 3, 3000.00),
(100, '2009-10-08 00:00:00', 3, 1500.00),
(101, '2009-11-20 00:00:00', 2, 1560.00),
(103, '2008-05-20 00:00:00', 4, 2060.00);
ORDERS表将按如下格式创建:
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3 | 3000.00 |
100 | 2009-10-08 00:00:00 | 3 | 1500.00 |
101 | 2009-11-20 00:00:00 | 2 | 1560.00 |
103 | 2008-05-20 00:00:00 | 4 | 2060.00 |
以下查询在表CUSTMERS和ORDERS上执行连接操作 –
SELECT ID, NAME, AGE, AMOUNT
FROM CUSTOMERS
JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
输出
通过执行上面的查询,显示的结果表包含了CUSTOMERS表的ID,NAME,AGE字段和ORDERS表的AMOUNT字段中的值。
ID | NAME | AGE | AMOUNT |
---|---|---|---|
3 | Kaushik | 23 | 3000 |
3 | Kaushik | 23 | 1500 |
2 | Khilan | 25 | 1560 |
4 | Chaitali | 25 | 2060 |
SQL中的连接类型
SQL提供了各种类型的连接,这些连接是根据多个表之间数据的连接方式进行分类的。它们列举如下:
内连接
内连接是默认连接,它检索两个表的交集。它将第一个表的每一行与第二个表的每一行进行比较。如果这些行的组合满足连接谓词,则它们被连接在一起。
外连接
外连接检索两个表中的所有记录,即使在另一个表中没有对应的行,与内连接不同。外连接进一步分为三个子类型:左连接、右连接和全连接。
以下是不同类型的外连接:
- 左连接 – 返回左表中的所有行,即使在右表中没有匹配。
-
右连接 – 返回右表中的所有行,即使在左表中没有匹配。
-
全连接 – 当一张表中存在匹配时返回行。
其他连接
除此之外还有两个连接:
-
自连接 – 将一张表与自身连接,就好像这张表是两张表,SQL语句中至少对一张表进行了临时重命名。
-
交叉连接 – 返回两个或多个连接表中记录的笛卡尔乘积。