sql查询 表连接

2025-11-03 04:30:32

1、首先建两张表,分别插入数据

create table Nation

(

nId int primary key,

Name varchar(20)

)

insert Nation(nid,name)  values(1 , '汉族')

insert Nation (nid,name) values(2 , '苗族')

insert Nation (nid,name) values(3 , '回族')

insert Nation (nid,name) values(4 , '壮族')

create table Emp

(

eId varchar(10) primary key,

eName varchar(8),

eSex char(2),

nId int 

)

insert Emp(eid,ename,esex,nid)  values('e01' , '大白菜' , '男' , 2)

insert Emp(eid,ename,esex,nid)  values('e02' , '大萝卜' , '女' , 4)

insert Emp (eid,ename,esex,nid) values('e03' , '小猪肉' , '男' , 1)

insert Emp (eid,ename,esex,nid) values('e04' , '公猪肉' , '女' , 5)

sql查询 表连接

2、a.INNER JOIN:内连接,如果表中有至少一个匹配,则返回行

b.LEFT JOIN:左连接,即使右表中没有匹配,也从左表返回所有的行

c.RIGHT JOIN:右连接,即使左表中没有匹配,也从右表返回所有的行

d.FULL JOIN:完整外连接,只要其中一个表中存在匹配,则返回行

e.cross join: 交叉连接,两表的倍数

3、inner join 内连接,如果表中有至少一个匹配,则返回行(下面三种写法 返回的结果是一样的)

--内联接:写法1:(inner join):返回2表中满足条件的数据(条件:on后面的)

select eId,eName , emp.nId , Name 

from nation inner join  Emp

on emp.nid = nation.nid 

--内联接:写法2:省略inner:

select eId,eName , emp.nId , Name 

from nation  join  Emp

on emp.nid = nation.nid 

--内联接:写法3 用","把inner join替换 后面直接加表2名:

select eId,eName , emp.nId , Name 

from nation , Emp

where emp.nid = nation.nid 

sql查询 表连接

4、LEFT JOIN:左连接,即使右表中没有匹配,也从左表返回所有的行, 右表不匹配的用null 填充

--左外联接 

select * from Emp left join nation

on emp.nid = nation.nid 

sql查询 表连接

5、RIGHT JOIN:右连接,即使左表中没有匹配,也从右表返回所有的行

--右外联接

select * from Emp

select * from Nation 

select * from Emp right join nation

on emp.nid = nation.nid 

sql查询 表连接

6、FULL JOIN:完整外连接,只要其中一个表中存在匹配,则返回行

--完整外联接

select * from Emp

select * from Nation 

select * from Emp full join nation

on emp.nid = nation.nid 

sql查询 表连接

7、cross join: 交叉连接,两表的倍数

--交叉表联接

select * from Emp cross join Nation

sql查询 表连接

8、联合查询union(union all)

--联合查询

select ename from emp

union select name from nation

select ename from emp

union all select 

name from nation

union是一个特殊的运算符,用于将两个或两个以上的查询产生一个结果集。

join将信息水平连接(添加更多列),而union将信息垂直连接(添加更多行)。

当使用union处理查询时,要注意以下几个关键点。

(1)、所有union的查询必须在select列表中有相同的列数。即如果第一个查询有3个列数,第二个查询也要只有3个列数。

(2)、union返回结果的标题集仅从第一个查询中获得,无论第二个查询如何命名或取别名都不会更改。

(3)、查询中对应的列的数据类型必须隐式一致。注意不要求完全一致,只需要隐式一致。

sql查询 表连接

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢