SQL 内连接

SQL 内连接

SQL – 内连接 是指在数据库中基于共同字段/列,将多个相关表进行组合的一种连接方式。

有两种主要类型的连接: 内连接外连接 。其他连接类型,如左连接、右连接、全连接等,只是这两种连接的子类型。在本教程中,我们只学习内连接。

SQL 内连接

SQL 内连接是一种通过检索在两个表中具有匹配值的记录来组合多个表的连接类型(在共同列中)。

它将第一个表的每一行与第二个表的每一行进行比较,找到满足连接谓词的所有行对。当连接谓词得到满足时,两个表的列值将被合并为一个新表。
SQL 内连接

内连接也被称为 等值连接 。它是默认的连接方式;即使使用“ 连接 ”关键字代替“ 内连接 ”,表也是使用共同列的匹配记录进行连接。

解释

让我们通过一个例子场景来更好地理解。

假设我们有一个公司的雇员信息分为两个表,分别是EmpDetails和Marital status。其中,

  • EmpDetails表包含雇员ID、姓名和工资等详情。

  • MaritalStatus表包含雇员ID、年龄和婚姻状况等详情。

SQL 内连接

语法

以下是SQL内连接的基本语法:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

示例

假设我们已经创建了一个名为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, 'MP', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

表格将被创建为 –

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 MP 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);
该表格的显示如下所示− 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

让我们现在使用 内连接查询 将这两张表组合起来,如下所示:

SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

输出

这个查询的结果如下所得:

ID NAME AMOUNT DATE
3 Kaushik 3000.00 2009-10-08 00:00:00
3 Kaushik 1500.00 2009-10-08 00:00:00
2 Khilan 1560.00 2009-11-20 00:00:00
4 Chaitali 2060.00 2008-05-20 00:00:00

使用内连接连接多个表

到目前为止,我们只学会了如何使用内连接连接两个表。但是,我们也可以使用内连接连接尽可能多的表,只需指定用于连接这些表的条件。

语法

以下是使用内连接连接多个表的语法−

SELECT column1, column2, column3... 
FROM table1
INNER JOIN table2
ON condition_1
INNER JOIN table3
ON condition_2
....
....
INNER JOIN tableN
ON condition_N;

请注意,即使在这种情况下,也只能根据一个条件将两个表连接在一起。这个过程按顺序进行,直到所有的表都被组合在一起。

示例

让我们利用之前的CUSTOMERS和ORDERS表以及一个新的表EMPLOYEE。我们将使用以下查询语句创建EMPLOYEE表-

CREATE TABLE EMPLOYEE (
   EID INT NOT NULL,
   EMPLOYEE_NAME VARCHAR (30) NOT NULL,
   SALES_MADE DECIMAL (20)
);

现在,我们可以使用INSERT语句将值插入到这些空表中,如下所示−

INSERT INTO EMPLOYEE VALUES
(102, 'SARIKA', 4500),
(100, 'ALEKHYA', 3623),
(101, 'REVATHI', 1291),
(103, 'VIVEK', 3426);

下面可以看到EMPLOYEE表的详细信息。

EID EMPLOYEE_NAME SALES_MADE
102 SARIKA 4500
100 ALEKHYA 3623
101 REVATHI 1291
103 VIVEK 3426

使用以下查询,我们可以将三个表CUSTOMERS,ORDERS和EMPLOYEE合并。

SELECT OID, DATE, AMOUNT, EMPLOYEE_NAME FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
INNER JOIN EMPLOYEE
ON ORDERS.OID = EMPLOYEE.EID;

输出

上述内连接查询的结果如下所示 −

OID DATE AMOUNT EMPLOYEE_NAME
102 2009-10-08 00:00:00 3000.00 SARIKA
100 2009-10-08 00:00:00 1500.00 ALEKHYA
101 2009-11-20 00:00:00 1560.00 REVATHI
103 2008-05-20 00:00:00 2060.00 VIVEK

内连接与WHERE子句

SQL中的子句用于在使用SQL查询检索数据时应用约束。SQL使用各种子句来约束数据,例如WHERE子句、GROUP BY子句、ORDER BY子句、UNION子句等。

WHERE子句用于过滤表中的数据。该子句指定了一个条件,只检索满足该条件的记录。

内连接使用WHERE子句对要检索的数据应用更多约束。例如,当检索一个组织的员工记录时,如果我们只想检查那些每月收入超过25000的员工数据,我们需要指定一个WHERE条件(salary > 25000)来仅检索这些员工记录。

语法

在使用WHERE子句时,内连接的语法如下所示−

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;

示例

在此示例中,我们正在使用内连接查询连接CUSTOMERS和ORDERS两个表,并使用WHERE子句对结果应用一些约束。

在这里,我们从CUSTOMERS表中检索ID和NAME,并从ORDERS表中检索DATE和AMOUNT,其中支付金额大于2000。

SELECT ID, NAME, DATE, AMOUNT FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
WHERE ORDERS.AMOUNT > 2000.00;

输出

应用内连接后的where子句后,结果表包含AMOUNT值大于2000.00的行−

ID NAME DATE AMOUNT
3 Kaushik 2009-10-08 00:00:00 3000.00
4 Chaitali 2008-05-20 00:00:00 2060.00

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程