1INNER JOIN (内连接)
内连接是一种一一映射关系,就是两张表都有的才能显示出来
SELECT APK AS A_PK,AValue AS A_Value,BPK AS B_PK,BValue AS B_Value
FROM table_a A
INNER JOIN table_b B
ON APK = BPK;
2LEFT JOIN (左连接)
左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,所谓的左边表其实就是指放在left join的左边的表
用韦恩图表示如下:
SELECT APK AS A_PK,AValue AS A_Value,BPK AS B_PK,BValue AS B_Value
FROM table_a A
LEFT JOIN table_b B
ON APK = BPK;
3RIGHT JOIN(右连接)
右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表
用韦恩图表示如下:
SELECT APK AS A_PK,AValue AS A_Value,BPK AS B_PK,BValue AS B_Value
FROM table_a A
RIGHT JOIN table_b B
ON APK = BPK;
4OUTER JOIN(外连接、全连接){mysql不支持外连接}
查询出左表和右表所有数据,但是去除两表的重复数据
韦恩图表示如下:
SELECT APK AS A_PK,AValue AS A_Value,BPK AS B_PK,BValue AS B_Value
FROM table_a A
FULL JOIN table_b B
ON APK = BPK;
悬浮元组:
在自然连接中,被舍弃的元组被称为悬浮元组
1、 左连接
是已左边表中的数据为基准,若左表有数据右表没有数据,则显示左表中的数据右表中的数据显示为空。左联接的结果集包括 LEFT 子句中指定的左表的所有行,而不仅仅是联接列所 匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2、 右联接
是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值
3 全连接:
是返回两个表中的所有的值,没有对应的数据则输出为空。
内连接
等值连接
非等值连接
自链接
外连接
左外连接
右外连接
全外连接
交叉连接
inner
join
语句,还应该有个on
一般是两个表进行联合查询时候用到的语句。
inner
join
你可以理解为正联,通俗的讲,这个语句只显示符合on后面条件的值。
支持地不好。我一直用SQL,最近做一个小项目,为了安装方便,想用MDB的数据库,结果在选择里看到一个SQLCE,高兴坏了,就这样用起来了。查了资料,包括英文的,支持inner
join
比如"select
productCode,Classname
FROM
product
INNER
JOIN
product_class
ON
productproductclass=product_classid",
也支持"SELECT
productCode,Classname
FROM
product
p
INNER
JOIN
product_class
c
ON
pproductclass=cid",
但不支持"SELECT
productCode,Classname
FROM
product
p
INNER
JOIN
(select
id,classname
from
product_class)
as
c
ON
pproductclass=cid"
我是希望用最后一种办法的,这样jion之前就已经过滤了,这样速度快(SQLServer里是这样样)
关于SQL数据库中cross join 和inner join用法上的区别
举个简单的例子吧,从结果来理解比较具体些。
a表
name sex
张三 男
李四 女
b表
name age
李四 30
王五 23
1\全外连接
select aname,asex,bname,bage
from a full outer join b on aname=bname
结果如下,
name sex name age
张三 男 NULL NULL
李四 女 李四 30
NULL NULL 王五 23
关联字段name,左表有而右表没有的,如张三,bname,bage都为NULL,加上左右两边都有的就是左连接的结果;而右表有而左表表没有的,如王五,aname,asex都为NULL,加上左右两边都有的就是右连接的结果;左右两边都有的如,李四,这就是内连接。
--测试代码
--建立测试数据
create
table
#ta1(id
integer
,
aa
char(1))
create
table
#ta2(id
integer
,
aa
char(1))
insert
into
#ta1
select
1,'a'
insert
into
#ta1
select
2,'b'
insert
into
#ta2
select
1,'a'
insert
into
#ta2
select
3,'b'
insert
into
#ta2
select
4,'c'
-----------------------------------
--完全测试
select
aid,aaa,bid,baa
from
#ta1
a
inner
join
#ta2
b
on
aid=bid
/结论:
左表的id必须完全跟右表的id一致,不匹配的不显示
/
--左链接测试
select
aid,aaa,bid,baa
from
#ta1
a
left
join
#ta2
b
on
aid=bid
/
结论:
以左表作为基准,右表能匹配上的就显示出来,不匹配的就显示成NULL,
记录个数满足左表
/
--右连接测试
select
aid,aaa,bid,baa
from
#ta1
a
right
join
#ta2
b
on
aid=bid
/
和左连接一样,只是以右表为基准了
/
以上就是关于数据库左连接、右连接、内连接、全连接全部的内容,包括:数据库左连接、右连接、内连接、全连接、数据库中INNER JOIN的意思。、sqlce数据库查询时支持 inner join吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)