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);