????导读????
✍本文由在下【红目香薰】原创
????2022年最大愿望:【服务百万技术人】????
????正文????
MySQL复习资料(六)——MySQL-多表联合查询
目录
创建从表
两表联合查询
笛卡尔积查询
去笛卡尔积查询
查询结果筛选
创建从表
CREATE TABLE user_address (
id int(8) NOT NULL AUTO_INCREMENT,
uid int(8) NOT NULL,
inName varchar(32) NOT NULL,
inPhone varchar(11) NOT NULL,
address varchar(200) NOT NULL,
PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;
insert into user_address values
(0,1,'superadmin','18112345671','hebei shijiazhuang'),
(0,1,'admin','18112345672','guangxi nanning'),
(0,2,'zhangsan','18112345673','heilongjiang haerbin'),
(0,2,'zhangsan','18112345674','hubei wuhan'),
(0,3,'lisi','18112345675','hebei zhangjiakou'),
(0,4,'wangwu','18112345676','hebeisheng xingtai'),
(0,5,'zhaoliu','18112345677','jiangwusheng hangzhoushi'),
(0,9,'shigandang','18112345678','shanghaishi');
不必要加外键,如果需要添加,需要将MySQL的引擎改为【InnoDB】。
show create table users;
只有在【InnoDB】下才可以添加外键。
原因:禁止使用外键,如果要保证完整性,应由应用程式实现——参考《阿里内部mysql规范》
两表联合查询
笛卡尔积查询
select * from users,user_address;
共计查询64条,计算方式:A表users 8条数据,B表user_address 8条数据,8*8=64条。
交叉相乘,相当于计算了两个表的笛卡尔积。
去笛卡尔积查询
select * from users,user_address where users.id=user_address.uid;
查询结果筛选
由于有两个id,需要说明都是谁的ID,故而需要进行单独修改名称,如果只有一个列名可以直接使用。
select u.id '用户id',createDate,userName,passWord,age,phone '手机',introduce,a.id '地址id',inName '收获人',inPhone '收货人手机号',address '收货人地址' from users u,user_address a where u.id=a.uid;
在常规的数据基础上做筛查即可。