**
因为本人之前一直写的是电子笔记,对自己学会的东西作一个总结,所以基本都是文字,本来想全发成博客的形式,发现全发成博客比较花费时间,而且一直发博客质量不是很好,而且通过发博客学到的东西也会变少,所以准备先把笔记发出来,后续再将它们改成博客的形式,争取2天至少改一篇博客,觉得我总结的还行的可以先关注我,后续会发成博客形式,内容也会更加完善
**
内连接:
内连接其实就是一种多表查询的方式,在进行多表查询时,有二种方法,一种是内连接,一种是外连接,一般我们在进行多表查询我们经常使用的是不完整的内连接,意思就是内连接中的一些字段被我们省略了,它真正的形式是“select 字段 from 表1 inner join 表2 on 连接条件 inner join 表3 on 连接条件 and 其他条件 ……”一般我们在查表时都会省略inner join命令,内连接的功能就是将多张表,合成为一张表进行显示,只不过有连接条件的话,如果某张表的一个或多个数据不满足连接条件,那么就不会显示那几条数据,例如我有如下两张表:
现在我要将这两张表连接为1张表,然后连接条件是exam表的id字段的数据,和stu表的id字段的数据要相等,所以我可以这样写“select * from exam inner join stu on exam.id = stu.id;”,只显示了两行数据,因为两张表的其它行,都不满足条件
外连接:
因为内连接不会显示不满足连接条件的行,所以出现了外连接,它可以显示不满足条件的行,不过肯定不是全都显示(因为全都显示了,不就相当于没有条件嘛),因为它要显示不满足条件的行,所以进行了分类,外连接有两种形式,一种是左外连接,一种是右外连接,左外连接的功能就是不论左边的表是否满足条件,全部都要显示出来,而右边的表,不会显示不满足条件的行(左边表和右边表是根据原始使用的表进行区别分的,原始使用的表就是没有连接的表,也就是直接跟在from后的表,前面没有left join,每多连接一张表,就要设置一次左、右连接,都是根据原始表,这张基础表来进行左边表和右边表的区分),如果因为左边表显示了不满足条件的行,造成右边必须补表(也就是可能左边要显示三行数据,而右边的表只有二行数据满足条件),所以右边会将多出来的表格置NULL,左外连接的形式是”select 字段名 from 表名1 left join 表名2 on 连接条件 left join 表名3 on 连接条件 ……“,例如我要将exam和stu这两张表进行左外连接,然后连接条件是exam表的id字段的数据,和stu表的id字段的数据要相等,所以我可以这样写“select * from exam left join stu on exam.id = stu.id;”,它会将exam中的数据全部显示出来,并且stu中多出来的行的数据置NULL;
右外连接是相同的道理,它会把右边的表格全部显示出来,把左边表格多出来的地方置NULL,右外连接的形式是“select 字段名 from 表名1 right join 表名2 on 连接条件 right join 表名3 on 连接条件 ……“,例如我要将exam和stu这两张表进行右外连接,然后连接条件是exam表的id字段的数据,和stu表的id字段的数据要相等,所以我可以这样写“select * from exam right join stu on exam.id = stu.id;”
在使用外连接时要注意,必须加连接条件,不然就显示不出来数据表了,因为没有条件的话,那就不用分左、右外连接了,直接把数据全部显示出来了
自连接:
自连接其实就是自己连接的一种连接方式,是多表查询的一种,也就是把一张数据表看成多张数据表,只不过这些数据表记录的内容都是一样的,然后将这些相同的数据表都重新启一个不同的名字,然后连接在一起,可以对这些数据表分别指定一些条件对数据进行筛选,一般情况下自连接的形式是”select 字段名1 …… from 数据表名1 as 别名,数据表名2 as 别名 …… where 条件“,例如有如下一张数据表:
现在我们对stud这张数据表,进行自查询,对这张数据表的条件是age字段的数据要小于30,然后再和stud这张数据表进行匹配,可以这样写”select * from stud as name1, stud as name2 where name2.age < 30;“因为age字段小于30的数据只有二条,所以和stud这张数据表再进行匹配,会有2 * 3 = 6条数据