mysql 多表查询:

本文介绍了数据库中的一对多、多对多和一对一关系的实现方式,以部门与员工、学生与课程、用户与用户详情为例进行说明。同时,展示了如何创建相关表及中间表,并通过插入数据来演示关系。此外,还讲解了多表查询的基本方法,包括隐式内连接和显式内连接,以获取所需信息。
摘要由CSDN通过智能技术生成

多表关系:

一对多(多对一);

例子:部门与员工的关系;

关系:一个部门对应多个员工,一个员工对应一个部门;

实现:在多的一方建立外键,指向一的一方的主键;

多对多;

例子:学生与所学课程的关系;

关系:一个学生可以选修多门课程,一门课程亦可以共多个学生选择;

实现:建立三张中间表,中间表至少包含两个外键分别关联两方主键

实现代码:在datagrip中右击界面选择可视化;

create table stu(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
)comment '学生表';

insert into stu values (null, 'tom','2000202020'),(null,'jluy','2000202021');

create table course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
)comment '课程表';
insert into course values  (null,'java'),(null,'PHP'),(null,'MYSQL');

create table stu_cour(
    id int auto_increment comment '主键' primary key ,
    stuid int not null comment '学生ID',
    courseid int not null comment '课程ID',
    constraint  fk_courseid foreign key (courseid) references course(id),
    constraint  fk_stuseid foreign key (stuid) references stu (id)
)comment '学生课程中间表';

insert into  stu_cour values (null,1,1),(null,1,2);

一对一;

案例:用户与用户详情的关系;

关系:一对一关系,用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率;

实现:在任意一方加入外键,关联另一方主键,并设置外键为唯一的(unique);



create table tb(
id int auto_increment primary key comment '主键ID',
name varchar(10) comment'姓名',
age int comment '年龄',
gender char(1) comment'1: 男,2:女',
phone char(20)comment'手机号'
)comment '用户基本信息表';


create table tb_user1(
id int auto_increment primary key comment '主键ID',
degree varchar(28) comment '学历',
major varchar(50) comment'专业',
primaryschool varchar(50) comment'小学',
middleschool varchar(50)comment '中学',
university varchar(50) comment'大学',
userid int unique comment'用户ID',
constraint fk_userid foreign key (userid) references tb(id)//外键与唯一主键相连接
)comment '用户教育信息表';

insert into tb(id, name, age, gender, phone) values
(null,'黄渤',45,'1','188000011'),
(null,'冰冰',35,'2','188066822'),
(null,'码云',55,'1','188088888'),
(null,'李彦宏',50,'1','1880000999');

insert into tb_user1(id ,degree, major, primaryschool, middleschool, university, userid) values
(null,'本科','舞蹈','静安区第一小学','静安区第一中学','北京舞蹈','1'),
(null,'硕士','表演','朝阳区第一小学','朝阳区第一中学','北京电影学院','2'),
(null,'本科','英语','杭州市第一小学','杭州市第一中学','杭州师范大学','3'),
(null,'本林','应用数学','阳泉第一小学','阳泉区第一中学','清华大学','4');

多表查询:

select  * from tb ,tb_user1  ;

将两个表信息的笛卡尔积形式展现出来; 

1.隐式内连接;

select  * from tb ,tb_user1 where tb.id=tb_user1.userid

使展现的信息以连接外键的信息,即主键值于外键值相等;

2.显式内连接

select 字段列表 from 表1 [innor] join 表2 on 连接条件...;
select * from tb t join tb_user1 u on t.id = u.userid;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值