前言
Hey,大家好,我是码农星期八!
上次怎么大概说了一下or,!=,in/not in between,like,limit,order by,group by。
但是还没完,咱们接着往下说!
查询
我们的数据是这样的。
![Mysql查询语句之连表查询和增删改查语句补充](https://p3-tt.byteimg.com/origin/pgc-image/9ba2155c4d7c4c978f9b447bfdf95919?from=pc)
发现class_id是一个数字,这是因为我们在设计时,将学生表和班级表分开设计的。
![Mysql查询语句之连表查询和增删改查语句补充](https://p1-tt.byteimg.com/origin/pgc-image/517474369c184389ab3fd277520f00cb?from=pc)
但是如果我们偏偏想要查询这个人是几班的,怎么办?
连表查询
方式一,where连表
语法
SELECT * from 表1,表2 WHERE 表1.外键列=表2.被外键列;
SELECT 表1.列1,表1.列2,表2.列1,... from 表1,表2 WHERE 表1.外键列=表2.被外键列;
连表显示所有列
SELECT * from student,class WHERE student.class_id=class.id;
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p6-tt.byteimg.com/origin/pgc-image/8ee9a9b129e343a7aa29e5f73f1a0fce.png?from=pc)
喏,这样就知道哪个学生是哪个班的了!
连表显示指定列
SELECT student.id,student.`name`,class.title from student,class WHERE student.class_id=class.id;
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p6-tt.byteimg.com/origin/pgc-image/4d0f96ed6d5146669eb070742f4a6282.png?from=pc)
方式二,left连表
通过where连表固然简单,但是缺点明显。
因为我们的where后面是要跟判断条件的,使用where进行连表会造成逻辑有些混乱。
在一般连表操作中,使用的也是left进行连表。
语法
SELECT * from 表1 LEFT JOIN 表2 on 表1.外键字段=表2.被外键字段;
SELECT 表1.列1,表1.列2,表2.列1,... from 表1 LEFT JOIN 表2 on 表1.外键字段=表2.被外键字段;
连表显示所有列
SELECT * from student LEFT JOIN class on student.class_id=class.id;
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p6-tt.byteimg.com/origin/pgc-image/06952956252d46148edd21294f82e06a?from=pc)
选择指定列查询
SELECT student.id,student.`name`,class.title from student LEFT JOIN class on student.class_id=class.id;
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p3-tt.byteimg.com/origin/pgc-image/a0e6969053c04ca3bdb38813bc622e57?from=pc)
其实这和where连表是一样的。
方式三,inner连表
inner和left是差不多的,只不过left是正向连表,inner是反向连表。
就像学生表和课程表。
如果是通过学生表连课程表,属于正向,用left。
如果是通过课程表连学生表,就属于反向,用inner。
如果反向连表硬生生用left,会出现一些空值现象。
inner语法同left,只不过是表的前后顺序不一样。
其他操作
上述所有的操作,都属于查询操作,基本上入门是可以的,下面咱们来看一下剩下的增,删,改操作。
增(insert)
单条插入
语法
INSERT INTO 表(列名1,列名2,...) values(值1,值2,...);
添加一条学生信息
INSERT into student(name,age,gender,class_id) VALUES("吴彦祖",22,"男",1);
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p6-tt.byteimg.com/origin/pgc-image/383fcfdbfb3543c4a4223b104637edae?from=pc)
表内容
![Mysql查询语句之连表查询和增删改查语句补充](https://p6-tt.byteimg.com/origin/pgc-image/045e1728bfaa4bff889e478bac251088?from=pc)
多条插入
语法
INSERT INTO 表(列名1,列名2,...) values(值1,值2,...),(值1,值2,...);
批量添加学生信息
INSERT INTO student (NAME, age, gender, class_id)
VALUES
("范冰冰", 18, "女", 2),
("成龙", 24, "男", 3);
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p1-tt.byteimg.com/origin/pgc-image/9086571c9437403e9a522a3fa370d4aa?from=pc)
表内容
![Mysql查询语句之连表查询和增删改查语句补充](https://p3-tt.byteimg.com/origin/pgc-image/8e469dfc07eb42ea817d8899f279d4dd?from=pc)
改(update)
语法
UPDATE <表> set 列 = 值 where <条件>;
将李四的年龄修改成88岁
UPDATE student set age = 88 where name = "张三"
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p6-tt.byteimg.com/origin/pgc-image/1c1991ff0c10401cbc8110a3da889e99?from=pc)
删除(delete)
语法
delete from <表名>
delete from <表名> where <条件>
删除张三
DELETE from student where name="张三"
执行结果
![Mysql查询语句之连表查询和增删改查语句补充](https://p3-tt.byteimg.com/origin/pgc-image/6e6f5483b91846a5a41e928240697619?from=pc)
总结
这章有点像收尾部分,补充了连表查询,后续又补充了Mysql的增删改查。
连表查询要区分一下left和inner的区别,一个是正向连,一个是反向连。
插入数据可以插入单条数据和多条数据,多跟参数即可。
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
越努力,越幸运。
我是码农星期八,如果觉得还不错,记得动手点赞一下哈。
感谢你的观看。