1、内链接
inner join、inner join…on…(两个表的交集)
select * from students inner join classes;
# 查询students表里对应的班级
# inner join..on..取的是两个表的交集
select * from students inner join classes on students.cls_id=classes.id;
select students.*,classes.name from students inner join classes on students.cls_id=classes.id;
# 起别名
select s.*,c.name from students as s inner join classes as c on s.cls_id=c.id;


2、外链接
left join(左连接)、right join(右连接)
# 以students为基准(students里所有信息都显示,classes里没有的显示为null)
select * from students left join classes on students.cls_id=classes.id;
# 以classes为基准(classes里所有信息都显示,students里没有的显示为null)
select * from students right join classes on students.cls_id=classes.id;

# 查询students表里没有对应班级信息的学生
# having和where都可以
select * from students right join classes on students.cls_id=classes.id having classes.id is null;
select * from students right join classes on students.cls_id=classes.id where classes.id is null;
3、自关联查询
准备文档

执行创建完毕如下图:
其中id和pid自联

| 省级城市 | id<100,pid=0 |
| 地市级 | 100<id<10000 |
| 鲜级城市 | 100000<id<300000 |
# 查询省级市有哪些
select * from pcd where pid=0;
# 查询北京下一级城市有哪些
# 1、第一种
select * from pcd where pid=11;
# 2、第二种(自关联查询,执行时间快)
select * from pcd as a inner join pcd as b on a.pid=b.id having b.name='北京';
# 3、第三种(子查询,执行时间稍微慢一点)
select * from pcd where pid = (select id from pcd where name='北京');
4、子查询
# 查询最高男生的信息
select * from students where height = (select max(height) from students);
5、mysql 从一个表查询数据插入另一个表或当前表
insert into 表名(uid,lng,lat) SELECT uuid,lng,lat FROM 表名
6、创建新表同时插入另一个表里的数据

7、alter table可以一次修改多个表结构

8、取消外键约束

9、防止sql注入
sql注入示例:

防止sql注入:

本文深入讲解了SQL中各种连接查询的使用方法,包括内连接、外连接和自关联查询等,通过实例演示如何进行高效的数据关联操作。
&spm=1001.2101.3001.5002&articleId=103247894&d=1&t=3&u=3b32dcd5352141e9bea483e7991906d2)

被折叠的 条评论
为什么被折叠?



