sql多表联查实例

sql多表联查实例,第1张

sql多表联查实例

下面提供四款sql多表关联查询的实例,个个效率不一样。

select

*

from

order_info

as

a

,ivrlog4ivrdlvinst

as

b

where

(a.saleorder=b.ext1_skill

and

b.start_date=@date1

and

se_id='55'

and

b.ext1_skill!='')

and

convert(varchar(10),a.instime,112)=@date2

and

max(a.instime)

方法二

select

*

from

order_info

as

a

where

a.saleorder=(

select

b.ext1_skill

from

ivrlog4ivrdlvinst

as

b

where

b.start_date=@date1

and

se_id='55'

and

b.ext1_skill!='')

and

convert(varchar(10),max(a.instime),112)=@date2

方法三

declare

@date1

varchar(20),

@date2

varchar(20)

set

@date1='20100812'

set

@date2='2010-08-12'

select

*

from

order_info

as

a

where

a.saleorder=

(select

b.ext1_skill

from

ivrlog4ivrdlvinst

as

b

where

b.start_date=@date1

and

se_id='55'

and

b.ext1_skill!='')

and

convert(varchar(10),a.instime,112)=@date2

and

max(a.instime)

方法四

select

b.caller,

b.start_date,

b.start_time,

b.ext1_skill,

c.deliveryno,

c.destroyresult,

c.deliverydate,

c.deliverytime,

c.arrangetime,

c.driverphone,

c.drivermobile,

a.servicedate,

a.servicetime,

a.workertel

from

order_info

as

a

,ivrlog4ivrdlvinst

as

b

,delivery_info

as

c

where

a.saleorder

in

(select

b.ext1_skill

from

ivrlog4ivrdlvinst

where

b.start_date=@date1

and

b.se_id='55'

and

b.ext1_skill!='')

and

convert(varchar(10),a.instime,112)=@date2

order

by

b.start_date

desc,

b.start_time

desc

一、一对一关系举例:

1、每个中国本土居民和他们唯一的身份z编号。

2、每个班级中唯一的班长,每个班长也只服务于唯一的班级。

二、一对多关系举例:

1、一个年级段有多个平行班级,多个平行班都隶属于一个年级段。

2、一个班级有若干个学生,若干个学生隶属于一个班级。

三、多对多关系举例:

1、一个班级有若干个老师,一个老师也可以带若干个班级。

2、一门课程同时有若干个学生选修,一个学生可以同时选修多门课程。

详细解读

以上一对一、一对多、多对多关系隶属于映射。在数学里,映射是个术语,指两个元素的集之间元素相互"对应"的关系,为名词。"映射"或者"投影",需要预先定义投影法则部分的函数后进行运算。因此"映射"计算可以实现跨维度对应。

相应的微积分属于纯数字计算无法实现跨维度对应,运用微分模拟可以实现本维度内的复杂模拟。 映射可以对非相关的多个集合进行对应的近似运算,而微积分只能在一个连续相关的大集合内进行精确运算。

关联查询是日常工作中常用的查询方式,关联查询sql编写的思路一般如下:1、先确定所连接的表,2、再确定所要查询的字段,3、确定连接条件以及连接方式(表连接分类: 内连接、外连接、交叉连接、自连接)

1、内连接:[inner] join on

分类:等值连接、非等值连接

(1)等值连接: 指使用等号"=“比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录(自然连接是一种特殊的等值连接)(2)非等值连接:指使用”>“或”<"比较两个表的连接列的值,相当于两表执行笛卡尔后,取一个表大于或小于另一个表的连结列值的记录

2、外连接

分类:左外连接、右外连接、全外连接

(1)左外连接:left outer join

连接效果:查询结果包含左、右两个表需要查询的全部行,左侧的表中的全部数据都会被显示出来,但是右侧表的数据,只有和左侧匹配上的数据才会被查询出来!否则显示为null(2)右外连接:right outer join

连接效果:查询结果包含左、右两个表需要查询的全部行,右侧的表中的全部数据都会被显示出来,但是左侧表的数据,只有和右侧匹配上的数据才会被查询出来!否则显示为null(3)全外连接:full/all outer join,查询结果包含左、右两个表需要查询的全部行,对应字段没有值显示null

3、交叉连接

左表中的每一行与右表中的所有行组合,也叫表与表之间做笛卡尔积查询

4、自连接

当前表与自身的连接查询,关键点在于虚拟化出一张表,即给自身的表定义一个别名


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6691665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存