多表查询

第四节叫多表查询,还是落到查询这儿了,所以前6节讲的都是查询,多表查询涉及到了多个表,大家记不记得我们在

讲完安装ORACLE以后,给大家发了几个数据文件,让大家依次加到数据库当中,这三个文件当中,有好多个表,最后常用的

有几个表,生成了一个excel

大家能够清晰的看出来,几个表之间的关系,我们较常用的有employees这个表,departments这个表,部门表,

叫员工表,那么除此之外,常用的叫job_grade这个表,就是工作的一个分级,还有job这个表,还有locations这个表,

位置,那么这几张表,跟我们JAVA里面对应的一一个一个类,是非常相似的,大家回忆一下我们JAVA的,如果说,

一个东西,比如人,跟人相关的,比如姓名,身高,体重,甚至这个人的专业啊,等等,他的技能,都把他封装到Person

这个类中,我们这里也是一样的,只要是跟员工相关的,像员工的id,姓名,email,phone_number,等等这样的一些信息,

我都封装在employees这张表中,类似于我们JAVA里面的employees类,那么凡是和你这个部门相关的,像部门的id,部门的

name,还有你这个部门在哪个位置,我们都给他封装到departments这个张表里,同样的道理还有location这张表,那这几个表

里边,他们相互之间是有关系的,刚才说了,employees表里的department_id,departments表里的department_id,他两

说白了,都是名字一样,类型一样,很多信息存储的时候也是一样的,因为每一个员工的department_id,他的部门的id号,

一定是在departments表里面找这个id,一定也有,我们不会说把所有这些人的信息,全部生成一张大表,太麻烦了,太繁琐了,

就像采用分类的思想一样,JAVA也是一个一个类,我们从来没有说,JAVA实现一个项目,JAVA所有的东西都写到一个类里,

那个太繁琐了,改起来不太好改,所以才讲面向对象,对象都有对应的类,有很多类,这是一种思想,然后大家你能体会一下,

那这一节我们就来实现多表的一个查询,多表的查询,什么意思呢,现在想查询某一个员工的他的id号,他的名字,他的部门id,

我不只是要部门id,我还想知道你的部门的名字叫什么,那不就涉及到了两个表吗,这就是这一节要带领大家学习的,本节的

目标,使用等值和不等值的连接在select子句中查询多个表的数据,使用自连接,使用外连接,加了四个红线,四个红线就是我们

这一章要给大家说清楚的四个概念,你也要会,通过这一章的学习,会这四种连接,要么我们一个个来说

现在我想查询employee_id,以及department_name,在同一个查询结果中,这个怎么来写,我们实现一下,

这个大家打开PL/SQL Dev,开一个命令窗口,我们这里边想实现这样一个连接

select employee_id,还有department_id,department_name,我们是不是就想输出这么几列,那么这样的几列都对应在哪个表中,

一个是在employees表,另一个是在departments表

select employee_id,department_name from employees,departments

那我们看看这样的话,能不能把我们员工的信息输出出来

这里说未指明确定列,我们一会还会来说这个事,大家想,这个描述的是什么意思,像employee_id是不是这个表中的,

department_name就是departments这个表中的,而department_id既在employees表中有,也在departments表中有,

虽然他两都有,用哪个都行,写完整点应该是这样的

select employees.employee_id,employees.department_id,departments.department_name 

from employees,departments

我们看一下能不能把这107条记录全部输出出来,我们看说明个什么事

2889,两千多条记录,不应该啊,我们只有107个人,之前不是老是做这个事吗

select employee_id,department_id from employees

这不就是107条记录,我只想在这里加一个department_name完事,你怎么干出2千多条,我们看看这个事,

select department_id,department_name,这是不是我们departments里面的

select department_id,department_name from departments

27条,那大家算一下,107乘以27,是不是正好2889

我们看一下,这是不同的employee_id,他竟然都在同一个部门里,这个错误能看明白了吧,相当于每一个人的

信息,分别给他的name去匹配了,,每一条都有27条记录,107*27,2889,这个结果是错的,显然是错的,这个错误的

方式,我们起个名,叫笛卡尔积的错误,本来是一行对这里的一行,但是却将左表当中的一行,跟右表当中的每一行

都给对应起来了,原因就是因为,我们没有加过滤条件,没有加where

当我们加连接条件的时候,或者连接条件无效的时候,或者效果是将所有的行进行连接了,

那么他就会导致笛卡尔积的错误,为了避免这个错误呢,就加where,where我们已经讲过了,

where我们怎么理解,我们先来操作一下

在我们刚才写的这样,2889条记录,这两个表本身没有明确的关系,或者你从代码上根本看不出来

两个表有什么关系,那怎么就让他产生关系呢,不就是这个表的department_id,是不是和departments这个表的

的department_id,他两得等啊,左边有一个张三在100号部门,是不是要找100号部门的department_name,

需要加上这么一个连接条件,来避免出现笛卡尔积的错误

select employees.employee_id,employees.department_id,departments.department_name from 

employees,departments

这个笛卡尔额外说一句,你看这个106条记录

正常应该是107条,那一条是什么原因造成的,一会我们就给大家讲,这个我们叫内连接,记得我们讲了有个人

没有部门,正因为他没有部门,所以我就找不到对应部门的name,既然找不到name,那就相当于部门那个人就

不满足条件,因为它不满足这个条件,所以一把他剔除,就是106条,我们再结合外连接,刚刚说的笛卡尔,笛卡尔

是一个数学家,想我们初中开始学坐标系,一个横坐标,一个竖坐标,坐标系就叫笛卡尔坐标系,笛卡尔数学家发明的,

非常厉害的一个人,正是因为有了坐标系,我们才能够将几何,能够将几何代数化,或者反过来讲,能够将几何代数化,

就是借助坐标系这个东西,让代数和几何产生关系,笛卡尔积这个是需要我们避免的,这个就是等值连接,完全等的,

就是相等的

加上这个连接条件,主键外键这个概念在后一点,约束给大家来说,什么叫主键,什么就外键,

这就是我们讲的等值连接,那我们再过来看一下我们这个语句,它是没有错的,但是我觉得这个写的有点罗嗦,

你看departments这个表挺长,employees表也不短,而且每一列都这样指明,太麻烦,能不能节省一点,我给你这个表

起个别名,employees表叫e,departments表叫d,我这里就可以成e点,e点,这是d点

select e.employee_id,e.department_id,d.department_id from employees e,departments d

where e.department_id=d.department_id

是不是感觉瞬间眼前就明亮了,立马这个代码就短了很多

还是106条,没有问题

我说我现在还可以省,还可以省,在哪里省啊,这个employee_id这个列,他就在这个表中,它是可以省略的,

同样的道理,department_name也是,也是可以省的,因为它是仅存于departments表里,而前面这个department_id,

是不能省,因为它这两个表里都有,所以你必须得指明一个,这里只是说你写谁都行,写d也行,写e也可以

最后这个结果,也是106条

这个就是最简单的形式了

select employee_id,d.department_id,department_name from employees e,departments d

where e.department_id=d.department_id

大家如果是刚开始学SQL的话,建议大家都给他指明是哪个列的,以免出错,也养成一个良好的习惯,

如果你熟了以后,知道这个表里有,我就省掉了,这是我们讲的等值连接,等值连接里的两个表的连接,

两个表的连接,那你看,我们这里还有一个表叫做,location表,departments表中的部门有一个地址,

那么这个地址就是在这儿,那么这个地址是不是也有一个城市,我还想把这个城市输出来,意味着什么,

我想看看每一个员工,你在哪个城市工作,是这个意思吧,中间必须借助departments这个表,现在相当于

是三个表之间,多连接了,那怎么办,那就再加一个呗,我还想再输出一项,那个表的CITY,那个表的CITY我

先这样写上,locations写个别名l,l.city,当然你也可以省略,where这个写完运行

select e.employee_id,d.department_id,d.department_name,l.city from employees e,departments d,

locations l where e.department_id=d.department_id

有没有问题啊,是不是有问题,有啥问题,我现在把employees和departments这两个表加了一个过滤条件,

这两个表还没有加,没有加就出现笛卡尔积错误了,所以还是需要加一个过滤条件,他两之间的连接通过那个列,

叫location_id,这个列给他连接起来,d.location_id等于l.location_id

select employee_id,d.department_id,department_name,l.city from employees e,departments d,

location l where e.department_id=d.department_id and d.location_id=l.location_id

这个时候我们再来看,这就对了

某一个人,它是在这个部门工作,部门的名字叫这个,这个部门在这个城市里,很清晰,是吧,这里我们是

通过三个表连接,我们这个讲课,这个三个表是比较长了,如果说又有一个表,那你是不是又得加上一个where

条件,这里我们总结一下,你看我这里有三个表,三个表做连接的话,我把employees和departments两个做一个条件

连接在一起,我把departments和locations连成一起,三个表只需要两个连接条件,最少需要两个条件,如果再需要

一个表,再让一个条件进行连一下,四个表至少需要三个,当然你多一个也行,至少得有三个,这就是我们总结出来的

这样一个意思,别名我们刚才都讲了,说连接N个表的话,至少需要N-1个连接条件,这两个表他们两连接在一块,再多

就再连一块,你有n个表,你就得有n-1个连接,就像是n个小朋友,小朋友如果你想让他们产生关系的话,加入他们一握手,

就代表他们之间认识,要想让n个之间彼此认识,至少要有N-1个手是握着的,这个练习,查询公司员工的last_name,

department_name,跟city,我们刚才这个例子已经演示了,就不说了,刚才我们说的叫等值连接

因为他的过滤条件是等的,这儿有一个叫非等值连接,非等值连接什么意思呢,我们还是回来看这个表,

大家你看,每一个员工,是不是有一项salary,那么salary你在这里看,我们说每一个工作,每一个工作工种不一样,

那么不同的工种,他的薪资待遇也是不同的,你做一个CEO年薪一百万,你做一个公司里面保洁的,年薪超不过10万,

每一个工种,还是有一个薪资待遇不同的,这里有一个job_grades,给每一个不同的工作,或者我们给不同工资级别的,

job_grades,我们可以看一下这个表,长什么样

select * from job_grades


如果这个人的工资是1000到2999的,叫A档,那最后就是叫F档,我现在想做这个事,我想看一下这个公司当中

每个员工,他在公司处于第几档的工资,你要想看他是属于第几档工资的话,你是不是一定得用到这个表,

张三2000,两千,你看,就是A档,李四两万,两万的话就是E档,你得结合这两个表,那这两个表就是非等值关系,

我们写一下这个事,select employee_id,last_name,salary,然后看一下他的档,工资的档,就叫grade_level,

你要一开始没有给他取别名,你可以先空着,再补,from employees e,还有一个叫job_grades,叫j吧,那你相应的,

employee_id加上e点,不加的可以省略,因为这里是非等值连接,他没有一个相同,相等的列,我就把这个列我不写了,

那个也没有,没啥写,那么where这个条件是什么,e.salary,他在j的范围里面,你看范围里面这个东西,我使用的叫between,

我们前面讲过,j.lowest_sal,between and,j.highest_sal,就是e.salary,正好在我这个区间里的,你在我哪个区间里的,

我就把那里面的grade_level给你输出出来

select employee_id,last_name,salary,grade_level from employees e,job_grades j where e.salary between 

j.lowest_sal and j.highest_sal

一定是唯一的,他没有笛卡尔积的错误

 

这不就出来了吗

这个KING是2万4,这是E档,这个就是我们说的非等值连接,大家体会一下,非等值连接和等值连接的区别就是,

多了一个条件,没有过滤条件就是笛卡尔积的错误,这是我们要避免的,一定要有过滤条件,有过滤条件,你要看

是等的还是不等的,等的还是非等值的,好了,接着往后,下面我们要提的是外连接,外连接,大家还记不记得我们在

实现employees表和departments表的时候,发现少了一个人是吧,我们把刚才的例子再写一下,这里我换一个,叫

e.last_name,其他的都是可以省的,因为这是共同的一个列,加连接条件,e.department_id=d.department_id

select e.last_name,d.department_id,d.department_name from employees e,department_id d  where 

e.department_id=d.department_id

这是我们刚才写的这个例子,刚才也看到结果了

106条记录,那我就想把那个人加进来,没有部门id,也没有部门name,那就空着,那你怎么办,

那就使用外连接,我们看一下这个概念,相比较我们刚才讲那个之前,内连接,同一列的两个以上

的表的行,结果集中不包含一个表和另一个表不匹配的行,一个表和另一个表不匹配的行,不匹配的

我们都给滤掉了,106条记录使用的是内连接,什么叫外连接,在连接过程当中,除了返回满足连接条件

的列以外,还同时返回左表当中不满足条件的行,就称为左外连接,同样的,右表当中不满足条件的行,

就叫右外连接,没有匹配的行时,结果表中相应的列为空,怎么来实现,怎么来写


现在是不是相当于左表里面多了一个数据,他里边有一个人,在右边没有对应的对应,少的那边多一个加号,

相当于左表当中不满足条件的行,左表员工是不是多一个,多一个没有部门的,返回左表当中不满足条件的行,

需要在右表条件这加上一个加号,这个对应的叫左外连接,这样写左外连接也行,两个连字都可以

select e.last_name,e.department_id,d.department_name from employees e,departments d

where e.department_id=d.department_id(+)

那么这个时候我们输出的结果

就是含有没部门的Grant

相当于返回了不满足左表的的行,左外连接,那同样的,我们说左表当中,有可能右表当中没有,

反过来,右表中也有可能有些信息,左表没有,那实际上怎么来理解,有可能说怎么样,有些部门里面

没有员工,现在你把员工都给他对应起来了,反过来,有的部门没有员工,那你就相当于返回右表中

的行,应该在左表中整个加号,就改成右外连接,你倒过来不就是右外连接

select e.last_name,e.department_id,d.department_name from employees e,departments d

where e.department_id=d.department_id

那么这个时候效果是什么样的呢,我们看一眼,这个122条记录,你看

从这儿开始,后边的就是我们刚才说的,有部门,但是部门里面没有人,没错,就是这样的意思,

那你这个表里面还有Grant吗,显然没有了,我现在仅仅返回右边的不满足条件的行,有人说我既想把

左边不满足条件的行,然后右边的也想弄出来,在这能不能两遍都写一个加号

select e.last_name,e.department_id,d.department_name from employees e,departments d

where e.department_id=d.department_id

这样写的话就废了,看一下,不行,是吧

所以是不允许这样来实现的,那么怎么办,咱们后边要讲SQL99的语法,来,我们看一眼,这是我们讲的

SQL 99的语法,这里面相当于是又一套了,把左表不满足的和右表不满足的都给拿出来,我们讲SQL语法之前,

大家稍微捋一下这个思路,刚才都讲了哪些东西,我这里稍微给大家写一写,先应该叫内连接,就是我们今天讲的

都是多个表之间的,什么叫内连接,返回者两个表中的一些行,就是设置了一些行,连接的一些条件,而且都满足的

条件,都输出出来,如果不满足的某些,某些表里不满足的输出来,叫外连接了,内连接是两个表都有的输出出来,

我们又细分成等值的,以及不等值的,我们也给大家举例子了,这是我们说的一个角度,然后相比较来讲,有一个外连接,

外连接就是既可以把左表当中符合条件的输出出来,叫左外连接,又可以把右表当中的,叫右外连接,分成这样一个左外

连接,和右外连接,实际上除了左外和右外之外,还能不能把两个都输出出来,这个就是SQL99的语法,SQL99是又一套了,

他也能够实现多表的一个连接,它是一个什么形式,从刚才那一会的例子,是这样来写,等值里边,大家看这个例子,

这个是我们一上来讲如何多表连接,我们这样来写,现在我们再来讲一种方式,就是使用SQL99的语法,这里面你不加

条件就是笛卡尔积的错误,然后SQL99里面也会有笛卡尔积的错误,叫CROSS JOIN

select employee_id,d.department_id,department_name from employees e cross join departments d

这也是一个笛卡尔积的错误,跟我们之前讲的是对应的,后边又有一些连接的方式,我们看一下都有哪些,实际上有一些,

是需要我们自己了解的,这样写是错的,那我们就不能那样写,我们把cross写成natural

natural join,就是自然的连接这两个表

他说这个意思,你就不用指定是哪个列的

select employee_id,department_id,department_name from employees,departments

就是自动能够识别了,是这个意思

这就是满足条件的结果,大家看到,我们结果里面仅仅有32条记录,正常我们应该有106条记录,

这里就有32条,这个原因在哪,肯定是有问题的,那么原因在哪,叫natural join,我们还是怎么着,

看一下这个表,这个表结构,desc employees;

然后desc departments;

我们看一下,我现在是想这两个表左连接,我没有写这个where过滤条件,他就能够自动的实现连接,

而且避免笛卡尔积错误,那么他如何自动连接,大家注意到,employees表有一个department_id,

departments这个表也有,这儿肯定是一个条件,大家看看有没有长一样的列,你看MANAGER_ID是不是

也是啊,是不是有一个MANAGER_ID,employees表里也有一个MANAGER_ID,现在这个原因我们就找到了,

natural join是实现两个表的连接,并且将所有的列名一样,都给你连接起来了,意味着是有两个

连接条件了,有两个连接条件了,加上两个连接条件,这个结果只有32条记录,是这个原因,所以说

这种方式比价好吧,确实是比较简单,但是他呢也不好,原因呢假设我就想让两个表中的连接,

一个列作为连接条件,你这样写它会自动去识别多个,不方便,所以这种方式大家了解一下就可以了,

那么不用这种方式再改进一下,我们把这个natural给去掉,from employees,join departments,

指明一个用谁连接,叫using,using谁啊,department_id,只使用department_id作为连接

select employee_id,department_id,department_name from employees join departments

using(department_id)

标识的106条记录,跟我们刚才那会实现的,连接方式不一样了,那这种方式好不好,其实还不错,

但是我说啊,他也不是特别好,什么叫不是特别好,大家想想,这个时候我们这个表,跟这个departments

这个表两个都有一个列,这个列作为连接条件,而且这两个列的列名恰好都一样,都叫department_id,

那万一employees表里面叫department_id,departments表里面就直接叫id了,那using就出不来了,

那写谁好啊,就没法搞了,这种方式写的时候,言外之意就是说,两个表里面的列的列名,得一样,其实不关

列名得一样,你数据类型也得一样,你这里面用的number类型,那里面用的是varchar型的,结果不匹配了,

就报错了,这种方式也是有局限性的,那他也有局限性,我们应该用谁,大家做一个了解,也不用using(department_id)

了,用on,用on来指明连接条件,on什么啊,我这儿加上一个e,再来一个d,就是e.department_id=d.department_id,

是不是和我们写where有点像,没错,是和where有点像,而且这里还用了一个join

select employee_id,department_id,department_name from employees e join departments d on

e.department_id=d.department_id

这里我们还是得d一下

select employee_id,d.department_id,department_name from employees e join departments d

on e.department_id=d.department_id

这个时候需要加上,106条记录

这个时候就能避免我们刚才说的那个错误,因为这个表里叫department_id,那你直接把这里改成id就行了,

他呢和我们讲的from这个表,where那种方式是完全一样的,我们实现多表连接,两种方式,一种是我们刚才开头讲的那个,

使用where的,另一种就是这个,from一个表,join另一个表,on连接条件,就可以了,如果这儿我想实现三个表的连接,怎么办,

再加上一个呗,比如说city,直接再在后面写,join locations l,on d.location_id=l.location_id,是不是这样,join一个表,

on一个条件,join另一个表,on一个条件,然后在join,再on

select employee_id,d.department_id,department_name,city from employees e join departments d 

on e.department_id=d.department_id join locations l on d.location_id=l.location_id

我现在就可以实现三个表的连接,没有问题

这个就是SQL99的语法,这个join on需要大家掌握,刚刚说SQL99能够解决左外连接和右外连接两个表都不满足的

连接,那你先看看左外表达式的,那我们还是退回去,我把这个给删掉,先回到这,我join前面加上一个left outer,

left outer join他

select employee_id,d.department_id,department_name from employees e left join outer departments d

on e.department_id=d.department_id

我们来看一下结果,107,前面有一个哥们没有,这是不是就是左外,左外left outer join,那右外呢,

right outer join

select employee_id,department_id,department_name from employees e right outer join

departments d on e.department_id=d.department_id

那么左边右边都想出来怎么办,full

select employee_id,d.department_id,department_name from employees e full join departments d

on e.department_id=d.department_id

比122多了一个没有部门的,就是这样子的,这个叫满外连接,既可以实现左外,右外,可以实现满外连接,

SQL99比我们一般好的,它能够实现这个,这个讲完了,那最后还有一个知识点,什么知识点,叫做自连接,

叫做自连接,什么叫自连接,我们看这个表吧,每一个员工都有一个MANAGER_ID,每个人都有一个老板,老板

说白了是不是也是一个员工,那现在我想输出这个事,我想看每一个员工,他的老板是谁,他老板的名字,

那怎么办,还是这个表自己玩,自己在这边玩,那这个怎么来实现,比如说我们这个事,查询一下,公司中员工,

我记得有一个员工姓'Chen',姓'Chen'的老板的,Manager的信息,这个怎么来做,现在这个事我没有讲呢,

你可以做,怎么可以做,你想查他,我先看这个人的信息,select last_name,他的manager_id,我先看看你老板

的id是多少,from employees,where last_name等于'Chen',你不知道到底里面是什么,你也可以lower一下,

lower(last_name)='Chen'

select last_name,manager_id from employees where lower(last_name)='Chen'


他的MANAGER_ID是108,那108号也是一个员工,那我看108号你的last_name,salary,email,from employees,

where employee_id等于108

select last_name,salary,email from employees where employee_id = 108

这个就是姓Chen的Manager的信息,一个月1万2,我能不能一次查询,来查询出来,就是可以使用我们讲的,

自连接,什么叫自连接,你看,你现在想查询一下老板的信息,一个last_name,一个salary,加上一个email,

或者加上一个员工,这个员工也就是叫last_name,你得搞清楚是谁了,我加一个from,一个是employees,

这是一个表,多表连接,是不是还得有一个表,只不过是同一个表罢了,那我就把其中的一个表来当员工吧,

也就是emp吧,然后再来一个表,employees叫manager,这两个表,一个是员工,一个是老板,那你现在是想查询

员工的last_name,老板的last_name,工资和email,这个时候你一定要补上,因为前一个表也有这个属性,

好了加条件,两个表一定要有连接条件,否则会有笛卡尔积的错误,应该是员工的manager_id,等于manager表的

employee_id

select emp.last_name,manager.last_name manager.salary,manager.email from employees emp,

employees managerwhere emp.manager_id=manager.employee_id


先查出manager_id就是108,看看谁的employee是108,这就是这个条件,同时and,emp的last_name,

等于chen

select emp.last_name,manager.last_name,manager.salary,manager.email from employees emp,

employees manager where emp.manager_id=manager.employee_id and lower(emp.last_name) = 'chen'

这个姓Chen的员工,这是他的老板,这是他老板的信息,跟我们刚才实现的方式是一样的,也就是结果集

一样,这个就叫做自连接,说白了就是这个表自己连自己,但是本质上来讲还是多个表,只不过相当于把它

复制了一份而已,就可以,大家自己来理解一下,讲到这,这一节就讲完了,大家可以看一下我们这里整理的

东西,这一节东西多倒不多,需要自己去捋一下,我们如何实现多表的连接,比如说员工表和部门表,通用的类型,

就是select...from...where..,再加上一个过滤条件,这是比较通用的一种方式,需要大家掌握,第二种natural

join,局限性,将里面一样的列都给连起来,有局限性,用using,表的列名不一样也有局限性,大家了解一下,

我们还有一种,join...on....,SQL99里面语法的一种方式,那这里面的方式4,方式1都需要大家来掌握,这里对应的

都叫自连接,那外连接就是满足各自不满足条件的,左表或右表,两个表都不满足条件的,给大家输出出来,你需要知道

使用SQL99语法,左外,右外,和满外,left outer,right outer,full outer,join就在相应的位置加加号就行,

他不能够实现满外,小的局限性,这是我们整个这一节讲的内容

SQL语句的多表查询方式:

例如:按照department_id查询employees(员工表)和departments(部门表)
的信息。
方式一(通用型):SELECT ... FROM ... WHERE
SELECT e.last_name,e.department_id,d.department_name
FROM employees e,departments d
where e.department_id = d.department_id

方式二:SELECT ... FROM ... NATURAL JOIN ...
有局限性:会自动连接两个表中相同的列(可能有多个:department_id和manager_id)
SELECT last_name,department_id,department_name
FROM employees
NATURAL JOIN departments

方式三:SELECT ... JOIN ... USING ...
有局限性:好于方式二,但若多表的连接列列名不同,此法不合适
SELECT last_name,department_id,department_name
FROM employees
JOIN departments
USING(department_id)

方式四:SELECT ... FROM ... JOIN ... ON ...
常用方式,较方式一,更易实现外联接(左、右、满)
SELECT last_name,e.department_id,department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id


--内连接
    1)
    --等值连接
    --不等值连接
    2)
    --非自连接
    --自连接

--外连接
    --左外连接、右外连接、满外连接

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值