文章目录
-
-
- 表连接
-
- 内连接
- 左连接
- 右连接
- 子查询
- 自关联
- 外键
-
- 外键介绍
- 创建表时设置外键约束
-
表连接
- 当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回mysql
- 这时需要表进行连接
- 内连接仅选出两张表中互相匹配的记录
select * from 表1 inner join 表2 on 表1.列 = 表2.列
-- 显示学生的所有信息,但只显示班级名称
select s.*, c.name from students s inner join classes c on s.id=c.id;
-- 将班级名称显示在第一列
select c.name, s.* from students s inner join classes c on s.id=c.id;
-- 查询 有能够对应班级的学生以及班级信息,按照班级进行排序
select c.name, s.* from students s inner join classes c on s.cls_id = c.id order by c.name asc;
-- 当同一个班级时,按照学生的id进行从小到大排序
select c.name, s.* from students s inner join classes c on s.cls_id = c.id order by c.name asc, s.id asc;
文章图片
文章图片
在这里插入图片描述
左连接
查询的结果为两个表匹配到的数据,左表持有的数据,对于右表中不存的数据使用null填充
select * from 表1 left join 表2 on 表1.列=表2.列
-- students表左连接classes表 并查看班级为null的数据
select * from students s left join classes c on s.cls_id=c.id having s.cls_id is null;
-- 左连接 并且 查询 s.cls_id=1 并且 s.name="small-j" 的数据
select * from students s left join classes c on s.cls_id=c.id having s.cls_id=1 and s.name="small-j";
文章图片
右连接
查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使用null填充。
select * from 表1 right join 表2 on 表1.列 = 表2.列;
子查询
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要使用到子查询
select * from 表 where 表(子查询语句)
-- 查询出students中身高最高的男生。显示名字和身高
select s.name, s.high from students s where high=(select max(high) from students) and gender="男";
-- 查询出高于平均身高的学生信息
select * from students where high>(select avg(high) from students);
-- 查询学生班级号cls_id能够对应的学生信息
select * from students where cls_id in (select id from students);
-- 查询最大年龄的女生的id
select * from students where id=(select max(id) from students where gender="女") andgender="女";
在这里插入图片描述
自关联
简单理解为自己与自己进行连接查询
-- 查询广东省下的所有广东市
select * from cities c inner join provinces p on c.provinceid=p.provinceid having p.province="广东省";
-- 查询广东省下的所有广东市
-- 自关联
select * from areas a inner join areas b on a.id=b.pid having a.name="广东";
文章图片
文章图片
外键
外键介绍
- MySQL的外键(foreing key)是表的一个特殊字段。对于两个具有关联关系的表而言,相关联字段的主键所在表就是主表(父表),外键所在的表是从表(子表)。
- 注意: 主键不能包含空值,但允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 当创建外键的时候,必须先删除从表才能删除主表。
- 主表需存在时创建从表。
- 从表的外键关联必须是主表的主键,并且主键与外键的类型必须保持一致。
[constraint 外键名] foreign key (字段名 [,字段名2, ...]) references <主表名> 主键列1 [, 主键列2, ...]
-- 创建班级表
create table classes(
id int(4) not null primary key,
name varchar(36)
);
-- 创建学生表
create table student(
sid int(4) not null primary key,
sname varchar(30),
cid int(4) not null
);
-- 创建直接含有外键关系的学生表
create table student(
sid int(4) not null primary key,
sname varchar(30),
cid int(4) not null,
constraint pk_id foreign key (cid) references classes(id)
);
-- 通过alter来添加外键关系
alter table student add constraint pk_id foreign key (cid) references classes(id);
-- 删除外键约束
alter table student drop foreign key pk_id;
【MySQL|MySQL5.7数据库-表连接&子查询&外键】
文章图片
文章图片
推荐阅读
- windows7 安装mysql-8.0.11-winx64
- 解决MySQL : InnoDB: Cannot allocate memory for the buffer pool
- mysql sql语句实现隐藏手机号码中间四位
- mysql 提示 1133 - Can't find any matching row in the user table
- Java(功能篇)|DruidDataSource 通过编码方式实现数据库读写分离。
- MySQL 基于存储过程 实现数据统计按日、周、月份统计模板
- MyBaties(基础篇)|mysql update语句 无法实现数据库更改操作
- mysql 数据库字段&表名 注释查询
- CTF题|BUUCTF-[极客大挑战 2019]EasySQL 1