請教sql問題內連線和子查詢,請教SQL問題,內連線和子查詢

2022-02-09 01:13:49 字數 4511 閱讀 8737

1樓:

簡而言之:

1.就是humanresources.employeepayhistory的記錄裡,employeeid可能出現重複;

2.這樣內聯結的結果裡就有重複的employeeid和相應rate處於同一條記錄上;

3.當如果有相同employeeid 的 rate 大於平均rate時,就都會返回。

4而子查詢返還的結果中employeeid是唯一的。

2樓:阡陌半緣君

當然不一樣,內聯接查出人的行數肯定多一些.這都是因為內聯接返回兩表中所有相匹配的行的原因.

我就以例子來說,可能更清楚

沒有裝sqlserver2005我就簡單舉個例吧

以射擊舉例

a表為射擊手的編號和姓名

a 表playerid playername

1 張三

2 李四

b 表為射擊手每次的環數,每個射擊手可以射多次

b 表shootid playerid shootscore

1 1 10

2 1 2

3 2 10

3 2 10

如果用內接做, 返回兩表中大於平均球數(shootscore)句子我就不寫了.

得到的結果:

a.playerid playername b.playerid ..........

1 張三 1

2 李四 2

2 李四 2

可以看出,李四因匹配而重複

而巢狀就不存在這問題了,因為首先它只是從a表中選擇.b表只是一個參照條件.因此不存在重複行的問題

sql子查詢和連線查詢的區別是什麼呢?懸賞100求答案

3樓:匿名使用者

子查詢最普遍的作用是當作上層查詢的限制條件,比如select a from b where a in (select a from c where x=y) ,現實世界各種系統中,各式各樣的關係,這樣子查詢從別處提取資料作為另一個查詢的條件,這樣子查詢的作用就顯示出來了

連線查詢

比較常見的比如某工廠 生產x表 裡面有 a 日期 b 訂單 兩欄位 , 銷售y表 b 訂單 d 購買客戶 ,現在我們想看到某天是哪些客戶買的東西 然後連線 x y表得到 a b d 這樣 整個資料明細就出來了

以上只是各舉一個用途吧,你說的消除重複值,也可以說是用途之一,呵呵

4樓:殤忄路

子查詢就是查詢中又巢狀的查詢,巢狀的級數隨各資料庫廠商的設定而有所不同,一般最大巢狀數不超過15級,實際應用中,一般不要超過2級,否則**難以理解.一般來說,所有巢狀子查詢都可改寫為非巢狀的查詢,但是這樣將導致**量增大.子查詢就如遞迴函式一樣,有時侯使用起來能達到事半功倍之效,只是其執行效率同樣較低,有時用自身連線可代替某些子查詢,另外,某些相關子查詢也可改寫成非相關子查詢

表連線都可以用子查詢,但不是所有子查詢都能用表連線替換,子查詢比較靈活,方便,形式多樣,適合用於作為查詢的篩選條件,而表連線更適合與檢視多表的資料

子查詢不一定需要兩個表有關聯欄位,而連線查詢必須有欄位關聯(所謂的主外來鍵關係)

sql子查詢和連線查詢的區別是什麼呢?

5樓:匿名使用者

1、子查詢就如遞迴函式一樣,有時侯使用起來能達到事半功倍之效,只是其執行效率同樣較低,有時用自身連線可代替某些子查詢,另外,某些相關子查詢也可改寫成非相關子查詢。

2、表連線都可以用子查詢,但不是所有子查詢都能用表連線替換,子查詢比較靈活,方便,形式多樣,適合用於作為查詢的篩選條件,而表連線更適合與檢視多表的資料。

3、子查詢是一種常用計算機語言select-sql語言中巢狀查詢下層的程式模組。當一個查詢是另一個查詢的條件時,稱之為子查詢。

4、子查詢是本質上就是一個完整 的select 語句,它可以使一個 select、select...into 語句、insert...into 語句、delete 語句、或 update 語句或巢狀在另一子查詢中。

子查詢的輸出可以包括一個單獨的值(單行子查詢)、幾行值(多行子查詢)、或者多列資料(多列子查詢)。

5、連線查詢是關聯式資料庫中最主要的查詢,主要包括內連線、外連線和交叉連線等。通過連線運算子可以實現多個表查詢。連線是關聯式資料庫模型的主要特點,也是它區別於其它型別資料庫管理系統的一個標誌。

6樓:昂昂雄

答:連線查詢和子查詢可能都要涉及兩個或多個表,連線查詢和子查詢的區別是:連線查詢可以合併兩個或多個表中的資料,而帶子查詢的select語句的結果只能來自一個表,子查詢的結果是用來作為選擇結果資料時進行參照的。

有的查詢既可以使用子查詢來表示,也可以使用連線查詢表示。通常使用子查詢表示時,可以將一個複雜的查詢分解為一系列的邏輯步驟,條理清晰;而使用連線查詢表示有執行速度快的優點。因此,應儘量使用連線查詢。

sql中什麼時候用內連線查詢,什麼時候用外連線查詢?用起來好像一樣啊!

7樓:sql的藝術

需要查詢兩張表同時存在的資料,使用內連線

需要查詢兩張表中一張表存在,另一張表不存在的時候使用左外連結 或 右外連結

內連線的查詢結果都是滿足連線條件的元組。但有時我們也希望輸出那些不滿足連線條件的元組資訊。比如,我們想知道每個學生的選課情況,包括已經選課的學生(這部分學生的學號在學生表中有,在選課表中也有,是滿足連線條件的),也包括沒有選課的學生(這部分學生的學號在學生表中有,但在選課表中沒有,不滿足連線條件),這時就需要使用外連線。

外連線是隻限制一張表中的資料必須滿足連線條件,而另一張表中的資料可以不滿足連線條件的連線方式。3種外連線:

1)左外連線(leftouter join)

如果在連線查詢中,連線管子左端的表中所有的元組都列出來,並且能在右端的表中找到匹配的元組,那麼連線成功。如果在右端的表中,沒能找到匹配的元組,那麼對應的元組是空值(null)。這時,查詢語句使用關鍵字left outerjoin,也就是說,左外連線的含義是限制連線關鍵字右端的表中的資料必須滿足連線條件,而不關左端的表中的資料是否滿足連線條件,均輸出左端表中的內容。

例如:要查詢所有學生的選課情況,包括已經選課的和還沒有選課的學生,查詢語句為

select學生表.學號,姓名,班級,課程號,成績

from學生表left outer join選課表on學生表.學號=選課表.學號

左外連線查詢中左端表中的所有元組的資訊都得到了保留。

2)右外連線(rightouterjoin)

右外連線與左外連線類似,只是右端表中的所有元組都列出,限制左端表的資料必須滿足連線條件,而不管右端表中的資料是否滿足連線條件,均輸出表中的內容。

例如:同上例內容,查詢語句為

select學生表.學號,姓名,班級,課程號,成績

from學生表rightouterjoin選課表on學生表.學號=選課表.學號

右外連線查詢中右端表中的所有元組的資訊都得到了保留。

3)全外連線(full outer join)

全外連線查詢的特點是左、右兩端表中的元組都輸出,如果沒能找到匹配的元組,就使用null來代替。

例如:同左外連線例子內容,查詢語句為

select學生表.學號,姓名,班級,課程號,成績

from學生表full outer join選課表on學生表.學號=選課表.學號

全外連線查詢中所有表中的元組資訊都得到了保留。

sql連線查詢與子查詢有什麼區別

8樓:東風冷雪

連線,無論是 左連線,還是自然連線,或者右連線

都是笛卡爾積。

而子查詢,是查詢,在查詢,通過巢狀

9樓:匿名使用者

聯接查詢比子查詢簡單

一個查詢語句,一個條件

比如:select * from table,table1 where table1.id=table.id and table.name='表中要查的姓名'

子查詢是巢狀查詢吧

例如:select * from table1,table where table1.id=table.

id and table.name=(select name from table1 where id=1)

這是我的理解,(select name from table1 where id=1)是一個子查詢,可以查詢出一個值來...

希望對你有所幫助,描述的不是很清楚,不知道你看的懂不..xiexie

10樓:匿名使用者

表連線都可以用子查詢,但不是所有子查詢都能用表連線替換,子查詢比較靈活,方便,形式多樣,適合用於作為查詢的篩選條件,而表連線更適合與檢視多表的資料

11樓:匿名使用者

連線查詢好像比子查詢能快些

sql查詢問題

你這問題好模糊,連表欄位都沒有給出,給你大概寫下,select 訪問人 from 表 where convert varchar 7 日期欄位,120 2014 04 有問題再追問吧 select convert varchar 7 date,23 as date,count from testip...

sql查詢問題

mysql select from a id b num 1 b1 200 2 b1 300 3 b1 400 4 b2 120 5 b2 920 5 rows in set 0.00 sec mysql select b,sum num from a group by b b sum num b1...

各位大大,請教關於sql的問題,各位大大,請教一個關於sql的問題

資料如下 create table test 姓名 varchar 10 日期 varchar 5 時間 varchar 5 型別 varchar 4 insert into test values 張三 09 05 08 00 mj01 insert into test values 張三 09 ...