A. sql多表联查实例
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
B. SQL多个表查询的语句怎么写
从结果来看,你只是在表1和表2做关联查询,如果有多种查询,建议你在前台程序里就分开,
比如要查卡号、姓名、币种、金额、产品号,就使用一个sql,
需要身份证号、币种的,就再写一个sql,
需要汇总客户总共的消费金额,就再另外用一个申sql,
if ..... then sql="...."
elseif ..... then sql="..."
C. SQL多表连接查询实例分析(详细图文)
新建两张表:
表1:student
截图如下:
表2:course
截图如下:
(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)
一、外连接
外连接可分为:左连接、右连接、完全外连接。
1、左连接
left
join
或
left
outer
join
SQL语句:select
*
from
student
left
join
course
on
student.ID=course.ID
执行结果:
左外连接包含left
join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).
注:此时我们不能说结果的行数等于左表数据的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。
2、右连接
right
join
或
right
outer
join
SQL语句:select
*
from
student
right
join
course
on
student.ID=course.ID
执行结果:
右外连接包含right
join右表所有行,如果左表中某行在右表没有匹配,则结果中对应左表的部分全部为空(NULL)。
注:同样此时我们不能说结果的行数等于右表的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。
3、完全外连接
full
join
或
full
outer
join
SQL语句:select
*
from
student
full
join
course
on
student.ID=course.ID
执行结果:
完全外连接包含full
join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)。
二、内连接
join 或
inner
join
SQL语句:select
*
from
student
inner
join
course
on
student.ID=course.ID
执行结果:
inner
join
是比较运算符,只返回符合条件的行。
此时相当于:select
*
from
student,course
where
student.ID=course.ID
三、交叉连接
cross
join
1.概念:没有
WHERE
子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。
SQL语句:select
*
from
student
cross
join
course
执行结果:
如果我们在此时给这条SQL加上WHERE子句的时候比如SQL:select
*
from
student
cross
join
course
where
student.ID=course.ID
此时将返回符合条件的结果集,结果和inner
join所示执行结果一样。
四、两表关系为一对多,多对一或多对多时的连接语句
当然上面两表为一对一关系,那么如果表A和表B为一对多、多对一或多对多的时候,我们又该如何写连接SQL语句呢?
其实两表一对多的SQL语句和一对一的SQL语句的写法都差不多,只是查询的结果不一样,当然两表也要略有改动。
比如表1的列可以改为:
Sno
Name
Cno
表2的列可以改为:
Cno
CName
这样两表就可以写一对多和多对一的SQL语句了,写法和上面的一对一SQL语句一样。
下面介绍一下当两表为多对多的时候我们该如何建表以及些SQL语句。
新建三表:
表A:
student
截图如下:
表B:
course
截图如下:
表C:
student_course
截图如下:
一个学生可以选择多门课程,一门课程可以被多个学生选择,因此学生表student和课程表course之间是多对多的关系。
当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。
SQL语句:select
s.Name,C.Cname
from
student_course
as
sc
left
join
student
as
s
on
s.Sno=sc.Sno
left
join
course
as
c
on
c.Cno=sc.Cno
执行结果:
此条SQL执行的结果是学生选课的情况。
D. SQL 中多表数据查询语句,最好能有实例说明。谢谢各位大侠啦
select
*
from
表A
inner
join
表B
on
A.字段
=
B.字段
看一下
inner
join
的用法吧,几个表都能串起来的。
E. SQL Server 2012 多表连接查询功能实例代码
废话不多说了,直接给大家贴代码了,具体代码如下所示:
--
交叉连接产生笛卡尔值
(X*Y)
SELECT
*
FROM
Student
cross
Join
dbo.ClassInfo
--另外一种写法
SELECT
*
FROM
Student
,
ClassInfo
--
内连接
(Inner
可以省略)
SELECT
*
FROM
Student
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
Inner
Join
SELECT
*
FROM
Student
INNER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
on
条件,通常是
主外键,但是不限于主外键
--
on
条件,允许有多个,而且可能是针对某个表的
SELECT
*
FROM
Student
INNER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID
AND
dbo.Student.Class
IN
(1,2)
--
针对Student表增加查询条件
--
不等于
(笛卡尔值减去
相等的值)
SELECT
*
FROM
Student
INNER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
<>
dbo.ClassInfo.ID;
--自连接
从Class表中查询到Class所在的系
SELECT
T1.*
,T2.ClassName
FROM
dbo.ClassInfo
AS
T1
INNER
JOIN
dbo.ClassInfo
AS
T2
ON
T1.PID=T2.ID
--
Left
Join
SELECT
*
FROM
Student
Left
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
Right
Join
SELECT
*
FROM
Student
RIGHT
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
全外连接
SELECT
*
FROM
Student
FULL
OUTER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
外连接和内连接的区别是:
--
内连接,on条件不符合的话,会过滤掉数据
--
外连接,以保留表为主,on条件成立显示数据,否则显示NULL
--Union
纵向连接
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
Student
WHERE
StuID<=2
UNION
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
dbo.Student
WHERE
StuID>2
--Union
去重复
SELECT
StuSex
FROM
Student
WHERE
StuID<=2
UNION
SELECT
StuSex
FROM
dbo.Student
WHERE
StuID>2
--Union
显示全部
SELECT
StuSex
FROM
Student
WHERE
StuID<=2
UNION
ALL
SELECT
StuSex
FROM
dbo.Student
WHERE
StuID>2
--Except
差集,排除
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
Student
Except
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
dbo.Student
WHERE
StuID<=2
--Intersect
交集
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
Student
WHERE
StuID>=2
Except
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
dbo.Student
WHERE
StuID<=3
以上所述是小编给大家介绍的SQL
Server
2012
多表连接查询功能实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
F. 关于SQL实例,多表查询实例,感激不尽~~~
S(studentid,studentname,sex)主键:studentid
C(courseid,coursename)主键:courseid
SC(studentid,courseid,grade)主键:studentid,courseid
如查询学“计算机基础”学生成绩的信息
selsct studengtid,studentname,coursename,grade
from SC
inner join S on S.studentid=SC.student
inner join C on C.courseid=SC.course
where C.coursename="计算机基础"
G. SQL如何实现多表查询
大体上的方法有两种
(1)联合查询
select dbo.vipcard.cardno,........,dbo.viptype.typename as cardtype from dbo.vipcard inner join dbo.viptype on dbo.vipcard.cardtype=dbo.viptype.ctypeid
(2)子查询
select dbo.vipcard.cardno,........,(select typename from viptype where dbo.vipcard.cardtype=dbo.viptype.ctypeid) as cardtype from dbo.vipcard
H. SQL语句多表多条件查询查询(三表)。各位前辈帮忙。
1、打开Microsoft SQL Server 2012,选中需要查询所有表的数据库。
I. 如何用一个sql分别从两个表中查询数据
sql语句从一张表中查询数据插入到另一张表中的方法如下:
1、select * into destTbl from srcTbl。
2、insert into destTbl(fld1, fld2) select fld1, 5 from srcTbl。以上两句都是将 srcTbl 的数据插入到 destTbl,但两句又有区别的:第一句(select into from)要求目标表(destTbl)不存在,因为在插入时会自动创建。第二句(insert into select from)要求目标表(destTbl)存在,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量。
J. SQL多表查询语句怎么写
SQL多表查询语句的步骤如下:
我们需要准备的材料分别是:电脑、sql查询器。
1、首先,打开sql查询器,连接上相应的数据库表,例如m1表和m2表。