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表。