ORACLEマルチテーブルクエリ中間テーブルの作成

ORACLEマルチテーブルクエリ中間テーブルの作成

テーブルとテーブルの間の関係の分類:

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

具体的な実施方法:

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

詳細で典型的な例は次のとおりです

ユーザーテーブル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')

クエリの結果は次のとおりです。
ユーザーテーブルの詳細

ロールテーブル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')

クエリの結果は次のとおりです。
ロールテーブルの詳細

中間テーブル

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

クエリの結果は次のとおりです。
中間テーブルの詳細

クエリに関連する中間テーブル

このSQLの記述に特に注意してください

クエリの結果は、中間テーブルのIDに基づきます(理解する必要があります)

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

クエリの結果は次のとおりです。
テーブルに対する多対多クエリの結果

おすすめ

転載: blog.csdn.net/Liamcsl/article/details/114135377