ORACLE multi-table query intermediate table creation

ORACLE multi-table query intermediate table creation

The classification of the relationship between the table and the table:

		1. 一对一(了解):
			* 如:人和身份证
			* 分析:一个人只有一个身份证,一个身份证只能对应一个人
		2. 一对多(多对一):
			* 如:部门和员工
			* 分析:一个部门有多个员工,一个员工只能对应一个部门
		3. 多对多:
			* 如:学生和课程
			* 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择

Specific implementation method:

		1. 一对多(多对一):
			* 如:部门和员工
			* 实现方式:在多的一方建立外键,指向一的一方的主键。
		
		2. 多对多(重点):
			* 如:学生和课程
			* 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
		
		3. 一对一(了解):
			* 如:人和身份证 
			* 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。

Detailed and typical examples are as follows

User table USER

CREATE TABLE USER(
id VARCHAR(32)  PRIMARY KEY,
email VARCHAR(50) UNIQUE NOT NULL,
username VARCHAR(50),
PASSWORD VARCHAR(50)

)
INSERT INTO USER(id,email,username,PASSWORD)VALUE('1','111','小明','11111')
INSERT INTO USER(id,email,username,PASSWORD)VALUE('2','222','小红','22222')
INSERT INTO USER(id,email,username,PASSWORD)VALUE('3','333','小张','33333')

The result of the query is
User table details

Role table ROLE

CREATE TABLE role(
id VARCHAR(32)  PRIMARY KEY,
roleName VARCHAR(50) ,
roleDesc VARCHAR(50)
)

INSERT INTO role(id,roleName,roleDesc)VALUE('1','工程师','111')
INSERT INTO role(id,roleName,roleDesc)VALUE('2','医生','222')
INSERT INTO role(id,roleName,roleDesc)VALUE('3','教师','333')

The result of the query is
Role table details

Intermediate table

CREATE TABLE users_role(
userId VARCHAR(32),
roleId VARCHAR(32),
PRIMARY KEY(userId,roleId),
FOREIGN KEY (userId) REFERENCES users(id),
FOREIGN KEY (roleId) REFERENCES role(id)
)

INSERT INTO users_role(userId,roleId )VALUE('1','2')
INSERT INTO users_role(userId,roleId )VALUE('2','2')
INSERT INTO users_role(userId,roleId )VALUE('3','3')

The result of the query is
Intermediate table details

Related intermediate tables for query

Pay special attention to the writing of this SQL

The result of the query will be based on the id of the intermediate table (must understand)

--查询的结果会以中间表的id为基准
SELECT * FROM users a ,role b, users_role c WHERE a.id=c.userid AND b.id=c.roleid

The result of the query is:
The result of a many-to-many query on the table

Guess you like

Origin blog.csdn.net/Liamcsl/article/details/114135377