Oracle中内连接解析与图解(oracle中内连接图解)

Oracle中内连接解析与图解

在关系型数据库中,查询是最常用的操作之一。关系数据库的查询语句是通过SQL来实现的。关系型数据库中一个常用的操作是连接(join),此处我们将介绍Oracle数据库中的内连接(inner join)。

内连接(inner join)是SQL查询语句中最重要的操作之一。Inner join是在两个表(T1、T2)中找到列A和列B值相等的记录,然后将这些记录连接起来,形成一个新的表(T3),这个新的表T3包含了T1和T2两个表中的所有列和行信息。

Inner join语法:

SELECT column_name(s)

FROM table1

INNER JOIN table2

ON table1.column_name = table2.column_name;

这个语法中,table1和table2是需要进行连接的两个表,ON语句描述了连接它们的条件。可以使用WHERE语句来实现相同的效果,但建议使用ON语句。如果存在表中的每一行都有匹配的值,那么这个Inner join被称为Equi-join。

下面是一个Inner join的示例,首先我们需要创建两个表:

CREATE TABLE employee(

ID INT PRIMARY KEY NOT NULL,

Name VARCHAR(50) NOT NULL,

Dept_Name VARCHAR(50) NOT NULL,

Join_Date DATE NOT NULL

);

CREATE TABLE department(

Dept_Name VARCHAR(50) PRIMARY KEY NOT NULL,

Location VARCHAR(50) NOT NULL

);

然后我们插入一些数据:

INSERT INTO employee VALUES(1, ‘Tom’, ‘IT’, to_date(’01-02-2019′, ‘dd-mm-yyyy’));

INSERT INTO employee VALUES(2, ‘John’, ‘Sales’, to_date(’01-03-2019′, ‘dd-mm-yyyy’));

INSERT INTO employee VALUES(3, ‘Mike’, ‘HR’, to_date(’01-04-2019′, ‘dd-mm-yyyy’));

INSERT INTO employee VALUES(4, ‘Sam’, ‘IT’, to_date(’01-05-2019′, ‘dd-mm-yyyy’));

INSERT INTO department VALUES(‘IT’, ‘New York’);

INSERT INTO department VALUES(‘Sales’, ‘London’);

INSERT INTO department VALUES(‘HR’, ‘Paris’);

现在,我们可以使用Inner join连接两个表,以便检索每个员工的部门信息:

SELECT employee.Name, department.Dept_Name, department.Location

FROM employee

INNER JOIN department

ON employee.Dept_Name = department.Dept_Name;

此外,我们还可以使用INNER JOIN来执行三个表之间的join。我们需要定义三个表之间的两个表之间的join,并在ON语句中将第三个表连接起来。下面是一个三个表的Inner join示例:

SELECT Orders.OrderID, Customers.CustomerName, Employees.LastName

FROM ((Orders

INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)

INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID);

这个Inner join的示例中,我们使用了三个表。如果您不小心忘记了使用括号来组合表,可以造成错误。

总结:

Inner join是SQL语句中最重要的操作之一,使用Inner join我们可以连接两个表或三个表,实现不同的查询需求。建议使用ON语句来描述连接条件。在使用Inner join时,必须确保列中的值是相同的,否则将返回空结果。

示例代码:

–创建employee表

CREATE TABLE employee(

ID INT PRIMARY KEY NOT NULL,

Name VARCHAR(50) NOT NULL,

Dept_Name VARCHAR(50) NOT NULL,

Join_Date DATE NOT NULL

);

–创建department表

CREATE TABLE department(

Dept_Name VARCHAR(50) PRIMARY KEY NOT NULL,

Location VARCHAR(50) NOT NULL

);

–向employee表中插入数据

INSERT INTO employee VALUES(1, ‘Tom’, ‘IT’, to_date(’01-02-2019′, ‘dd-mm-yyyy’));

INSERT INTO employee VALUES(2, ‘John’, ‘Sales’, to_date(’01-03-2019′, ‘dd-mm-yyyy’));

INSERT INTO employee VALUES(3, ‘Mike’, ‘HR’, to_date(’01-04-2019′, ‘dd-mm-yyyy’));

INSERT INTO employee VALUES(4, ‘Sam’, ‘IT’, to_date(’01-05-2019′, ‘dd-mm-yyyy’));

–向department表中插入数据

INSERT INTO department VALUES(‘IT’, ‘New York’);

INSERT INTO department VALUES(‘Sales’, ‘London’);

INSERT INTO department VALUES(‘HR’, ‘Paris’);

–查询employee表和department表的Inner join

SELECT employee.Name, department.Dept_Name, department.Location

FROM employee

INNER JOIN department

ON employee.Dept_Name = department.Dept_Name;

–三个表的Inner join示例

SELECT Orders.OrderID, Customers.CustomerName, Employees.LastName

FROM ((Orders

INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)

INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID);


数据运维技术 » Oracle中内连接解析与图解(oracle中内连接图解)