Ⅰ 例舉幾條多表查詢sql語句
1.select a.學號,a.姓名,b.學籍號,a.性別,a.民族,a.身份證號,a.聯系電話
from 學生表 a, 注冊表 b
2.select count (*) [注冊人數]from 注冊表
where 注冊時間='2010-10-20'(select 專業代碼,專業名稱,總金額 from 專業表,注冊表,收據表
where 注冊時間='2010-10-20')
3.select a.所屬院系,b.性別,c.房間號,床位狀態
from 專業表 a, 學生表 b,房間表,床位表 c
where 床位狀態 = '空位'
Ⅱ sql的多表查詢
Select
A.id,
A.id1,
B.name,
A.id2,
C.name,
A.id3,
C.name
from
A
left
join
B
ON
A.id1
=
B.id
left
join
C
ON
A.id2
=
C.id
left
join
C
ON
A.id3
=
C.id
order
by
....
說明:1。這是執行對ID匹配Name
的最普遍做法,注意上面的left
join中以A為源數據表來遍歷,如果在B或C中找不到對應的name那麼該name欄位就顯示為空。
2。不要擔心
left
join
C
ON
A.id2
=
C.id
left
join
C
ON
A.id3
=
C.id
看起來挺奇怪,這其實很好理解,就相當於你將C表使用了兩次來做匹配,你完全可以將C看成是一個D表來與A的id3再次匹配name值,只不過這個D表就還是使用你的C表而已。
Ⅲ sql聯合查詢語句(兩張表)
sql聯合查詢語句(兩張表)是:
select A.ID,A.VALUE,A.TYPE,A.NAME,B.KEY,B.ID,B.VALUE,B.NAME
min(VALUE),max(VALUE) from A left join B on A.ID = B.ID
where B.NAME="你輸入的名字"
and B.VALUE > (select min(VALUE) from B where NAME="你輸入的名字"))
and B.VALUE < (select min(VALUE) from B where NAME="你輸入的名字"));
Ⅳ 在SQL中如何進行多表查詢
要想多表查詢,是有條件的。一般是幾張表結構相似或者是有一樣的ID號關聯。例如:
select * from 表1,表2,表3 這是把3張表結果全部查出來
select * from 表1 where not exists(select 0 from 表2 where
表1.id=表2.id)
Ⅳ 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執行的結果是學生選課的情況。
Ⅵ SQL server資料庫里查詢時新建查詢怎麼進行多表查詢
首先要檢查你的表與表之間是不是有約束(主外鍵約束),如果存在一般連接有左連接、右連接、內連接,下面給你舉例:
----做笛卡爾積
select
s.id,s.name,sc.id,sc.sname,sc.score
from
infom
s
,score
sc
------內連接
寫法一
select
s.id,s.name,sc.id,sc.sname,sc.score
from
infom
s
,score
sc
inner
join
score
sc
on
s.id=
sc.id
------內連接的條件
------on
s.id
<>sc.id
--------是全集
-
交集
------where
sc.score>80
------內連接
方法二
select
s.id,s.name,sc.id,sc.sname,sc.score
from
infom
s
,score
sc
where
s.id=
sc.id
-------------------------------------------------------外連接
左連接
--------------左表數據完全顯示,右表中相同的數據顯示,不同數據null
select
Student.name,score.score
from
Student
left
join
score
-----------------先寫的為左表
on
Student.id=score
.id
-----------------連接條件
-------------------------------------------------------外連接
右連接
--------------右表數據完全顯示,左表中相同的數據顯示,不同數據顯示null
select
Student.name,score.score
from
Student
right
join
score
on
Student.id=score
.id
-----------------------------------全連接
full
join
-----------------------------------左、右表的數據完全顯示,相同的數據顯示一次
select
Student.name,score.score
from
Student
full
join
score
on
Student.id=score
.id
-------------------------------交叉聯接
---------------------------------交叉聯接得到的是兩表聯接所有的數據組合
------------------------------------------(A表的數據記錄*
B
表的數據記錄)
---------------------方式一
select
Student.*,score.*
from
Student,score
------------------------方式二
select
score
.*,Student.*
from
Student
cross
join
score
-------------------------------多表聯接
-----------要求查出張三
C#的考試成績,涉及student,score,subject三個表
---------方式一:
select
student.name,subject.sname
,score
.score
from
Student
inner
join
score
on
student.id=
score.id
inner
join
subject
on
score.id=subject.id
where
Student.name='張三'
and
subject.sname='C#'
---------方式二:等值聯接
select
student.name,subject.sname
,score
.score
from
Student,score
,subject
where
StudentDB.id=score.id
and
score
.id=subject.id
and
Student.name='張三'
and
subject.sname='C#'
Ⅶ Sql多表查詢,怎麼做
根據你的查詢結果要求,可以根據一下幾個步驟確定多表查詢語句的寫法:
1、要顯示所有學生信息、班級、年級等信息,則需以主表1為主記錄,其他表通過外連接的方式進行關聯;
2、LEFT JOIN 關鍵字會從左表那裡返回所有的行,即使在右表中沒有匹配的行,確定主表之後,其他關聯表使用LEFT JOIN;
3、拼接SQL語句,需要確定關聯欄位主表1與表2的關聯為主表1.studentid=表2.studentid,
主表1與表3的關聯為主表1.gradId=表3.gradId,主表1與表4的關聯為主表1.classId=表4.classId
4、具體語句為:
SELECT 表1.ID, 表2.STUDENTNAME,表3.GRADNAME,表4.CLASSNAME
FROM 表1
LEFT JOIN 表2 ON 表1.STUDENTID = 表2.STUDENTID
LEFT JOIN 表3 ON 表1.GRADID = 表3.GRADID
LEFT JOIN 表4 ON 表1.CLASSID= 表4.CLASSID
Ⅷ 簡單的SQL多表查詢語句!
select
*
from
table_A
ta,tale_B
tb
where
ta.id
=
tb.id
或者
select
*
from
table_A
ta
inner
join
tale_B
tb
on
ta.id
=
tb.id
(其中,兩張表關聯的話,至少有一個ta.id
=
tb.id,三張表關聯查詢的話,至少有兩個關系=,以此類推...)
Ⅸ 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
Ⅹ SQL多表查詢語句怎麼寫
SQL多表查詢語句的步驟如下:
我們需要准備的材料分別是:電腦、sql查詢器。
1、首先,打開sql查詢器,連接上相應的資料庫表,例如m1表和m2表。