mysql关联表_MySQL表关联的几种常用方式

工作中我们经常会使用表与表关联来查询数据,如果对join 不熟悉,可能会得到我们不想要的节过,这里就来介绍下join的几种常用方法:

建表及插入数据,

CREATE TABLE school (

sch_id int(11) NOT NULL AUTO_INCREMENT,

sch_name varchar(50) NOT NULL,

sch_addr varchar(100) DEFAULT NULL,

PRIMARY KEY (sch_id)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

CREATE TABLE student (

st_id int(11) NOT NULL AUTO_INCREMENT,

st_name varchar(20) NOT NULL,

age smallint(6) DEFAULT NULL,

hight int(5) DEFAULT NULL,

sch_id int(11) DEFAULT NULL,

PRIMARY KEY (st_id),

KEY sch_id (sch_id)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ;

INSERT INTO school VALUES (1,'南开大学','南开'),(2,'中央财经大学','北京'),(3,'香港理工大学','香港'),(4,'西安交通大学','西安'),(5,'悉尼大学','悉尼'),(6,'曼彻斯特大学','曼彻斯特'),(8,'延安抗日军政大学','延安');

INSERT INTO student VALUES (1,'王晓阳',26,168,6),(2,'王楠',28,162,2),(3,'杨振宇',30,178,1),(4,'苗昕',28,162,3),(5,'张诗雨',27,171,5),(8,'李倩',28,162,4),(9,'蒋结石',26,178,7);

1.左关联:以左表为中心,查出左表的全部数据,关联字段值不相等则右表查出的数据显示为空;

select * from school a left join student b on a.sch_id=b.sch_id;

25e77bdb23eddbfee90facb029884de6.png

fc541e79c48566fc3c710f5289230da0.png

2.右关联:以右表为中心,查出右表的全部数据,关联字段值不相等则左表查出的数据显示为空;

select * from school a right join student b on a.sch_id=b.sch_id;

9bf93cbe4c4ed952e92e8fd49e4fed59.png

aaadba2fcab3813c5dad633a53fafcff.png

3.内关联:查出两表关联字段等值的数据

select * from school a inner join student b on a.sch_id=b.sch_id;

43fd34adfc184078e27725ed16dd1c18.png

b17dda0ac9b6ad20a959ba4d6b01007b.png

4.查出只属于左表的数据

select * from school a left join student b on a.sch_id=b.sch_id where b.st_id is null;

491f9477a6a6e3727bb5de90e335c0f5.png

97ddf869c95b1d285338b112a675af0a.png

5.查出只属于右表的数据

select * from school a right join student b on a.sch_id=b.sch_id where a.sch_id is null;

33c60d28646e0df37c70b5ffc9c1817f.png

73473a203dd296bf68ce737baecfd745.png

6.查出全部数据

select from school a left join student b on a.sch_id=b.sch_id union select from school a right join student b on a.sch_id=b.sch_id;

fd4505a1908395c8b7adb2b1f12b478d.png

1ae6a5160f8078aa4640ad8044701829.png

7.查出左表和右表关联不相等的数据

select from school a left join student b on a.sch_id=b.sch_id where b.st_id is null union select from school a right join student b on a.sch_id=b.sch_id where a.sch_id is null;

cecdd8c1c9e6efbefd77e287a50e44c7.png

7638142daacc030ae035d30333642aa5.png

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值