ORACLE 多表查询中间表的创建
表与表之间关系的分类:
1. 一对一(了解):
* 如:人和身份证
* 分析:一个人只有一个身份证,一个身份证只能对应一个人
2. 一对多(多对一):
* 如:部门和员工
* 分析:一个部门有多个员工,一个员工只能对应一个部门
3. 多对多:
* 如:学生和课程
* 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
具体的实现方式:
1. 一对多(多对一):
* 如:部门和员工
* 实现方式:在多的一方建立外键,指向一的一方的主键。
2. 多对多(重点):
* 如:学生和课程
* 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
3. 一对一(了解):
* 如:人和身份证
* 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
详细并且典型的实例如下
用户表 USER
1
2
3
4
5
6
7
8
9
10
|
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
1
2
3
4
5
6
7
8
9
|
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' )
|
查询到的结果为
中间表
1
2
3
4
5
6
7
8
9
10
11
|
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为基准(一定要理解)
1
2
|
--查询的结果会以中间表的id为基准
SELECT * FROM users a ,role b, users_role c WHERE a.id=c.userid AND b.id=c.roleid
|
查询到的结果为:
总结
到此这篇关于Oracle多表查询中间表的创建的文章就介绍到这了,更多相关Oracle多表查询中间表创建内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/Liamcsl/article/details/114135377