在之前,主要写了一些简单的单表查询,这一个,主要复习一下多表查询的基本语句
回顾
- 在之前主要写了单表的增删改查语句
- 写了一些聚合方法 sum ,min,max等简单的方法
多表查询
假设现在有两个表,一个是stu学生表,里面包含学生的基本信息,和学校编号sid;另一个表中存放的是学校编号sid和学校的名称sname
1:
假如让你查询学生的基本信息还有他的学校名称
要解决这个问题咱们要先学一个小知识点,链接!!!
①
在中国这个国家,存在这很多省份,每个省份都有自己的独特方言,在数据中也不例外,也存在方言这个词,在MySQL数据库中,要连接两个数据库可以通过 “,” 这个东西,活不多说上代码
select e.*,s.* from stu e,scl s where e.sid=d.sid;
--stu e ,scl s 就相当于取别名
--回顾一下 *代表的是所有的意思,所有这个就是查询的学生的所有信息
--假如只查询学生的姓名和和学校名称就可以改成
select e.name,s.sname from stu e,scl s where e.sid=d.sid;
这就是多表查询的基本句型
咱们上边说过了这个是mysql中的方言,拿到别的数据库中是不行的
那咱们就同意使用官方版的!!
inner join
②
这个无非就是将","换成inner join呗,不同的是在连接条件上,好好看一下下面
上代码
select e.*,s.* from stu e inner join scl s on e.sin=s.sid;
--不难发现,这个用的是on进行连接而不是常用的where!
--这个就是官方版的多表查询的基本语句
除了 inner join连接方法,SQL中还提供了别的连接方法
自然连接,左连接,右连接!同事通过我的学习发现 left join是最常用的;连接方法
接下来咱们就一次说一下这几种连接方法
③
自然连接 :我感觉自然连接像是inner 的加强版,它不需要你写连接条件,它会自己给你进行连接
natural join
还是那刚才的代码
select e.*,s.* from stu e natural join scl s ;
--这个不需要你进行进行给连接条件,但这个基本用不到
--我感觉这个只有相同属性为一个的时候使用,多的时候就会出错,所以说基本用不到
④
左连接:
left join
上代码讲解
select e.*,s.* from stu e inner join scl s on e.sin=s.sid;
--像这个,stu无论满不满足条件都会查询出来,而scl只有满足条件的才会查询出来
--不满足的不会查询出来
⑤右连接和左连接思路基本是类似的,大家可以自己理一下
对了,还有一个查询方法也比较重要,叫做交叉连接 通过这个名字大家可以就知道是
怎么连接的了
交叉查询就是那第一个的全部数据与第二个表的全部数据进行连接查询!!
就是第一个表的第一条数据与第二个表所有数据进行连接查询,然后第二个 ,第三个,直至所有!
上代码
select e.*,s.* from stu e cross join scl s on e.sin=s.sid;
基本的多表查询也就这些,下次在复习下面的知识!!!