表自連接

有一個學生表,裏面有 學號 功課編號
學生成績三個字段.用一個SQL查詢語句得出每門功課成績最好的前兩名

學號     功課編號        學生成績
1             1                99
2             1                98
3             1                100
4             2                88
5             2                87
6             2                88
7             3                99
8             3                88
9             3                100

解決方法
SELECT DISTINCT 學生表1.*
FROM 學生表 學生表1 INNER JOIN
         學生表 學生表2 ON 學生表1.學號 IN
             (SELECT TOP 2 學生表.學號
            FROM 學生表
            WHERE 學生表.功課編號 = 學生表1.功課編號
            ORDER BY 學生成績 DESC)

查詢結果
學號     功課編號        學生成績
1             1                99
2             1                98
4             2                88
6             2                88
7             3                99
9             3                100



同樣的問題還有

查找不同課程成績相同的學生的學號、課程號、學生成績

例:

1.實現自連接,編寫一個SELECT語句查詢customers表中,地址相同的客戶的'姓名'和'地址'


SELECT DISTINCT customers1.*
FROM customers customers1 where customers1.地址 IN
(SELECT customers.姓名,customers.地址
FROM customers
WHERE customers.地址 = customers1.地址)

2.建立查詢,編寫一個SELECT語句,查詢所有購買了"book"貨品的客戶姓名,要求結果集中不存在重複的記


select distinct 客戶姓名 from customers where 貨品="book"

3.相關子查詢 ,編寫一個SELECT語句,查找訂貨數量大於該貨品的平均訂貨數量的訂單信息
select * from 訂貨表 where 訂貨表.訂貨數量>(select avg(訂貨數量) from 訂貨表)

4.修改表中數據,編寫一條UPDATE語句,將所有庫存量大於1000的貨品價格降低10%
update 庫存表 set 貨品價格=貨品價格*0.1 where 庫存量>1000

5.刪除表中記錄,編寫一條DELETE語句,刪除orders表中2號部的訂單信息
delete from orders where 訂貨單位=2號部

4.3 基於列表選擇行,編寫一條SELECT語句,從goods表中檢索出貨品名稱爲"pen","book","desk"的貨品的"貨品

名稱","庫存量","供應商"信息.
select 貨品名稱,庫存量,供應商
from goods
where 出貨品名稱="pen" or 出貨品名稱="pen" or 出貨品名稱="desk"


4.4 改變結果集的列標題,用兩種方法編寫SELECT語句,從goods表檢索出所有庫存量大於等於1000且小於等於

2000的"貨品名稱","庫存量","供應商"信息.列標題分別爲"貨品的名稱","貨品的庫存量","貨品的單價".


select 貨品名稱 as '貨品的名稱',庫存量 as '貨品的庫存量',供應商 as '貨品的單 價'
from goods
where 庫存量>=1000 and   庫存量<=2000

select 貨品名稱 as '貨品的名稱',庫存量 as '貨品的庫存量',供應商 as '貨品的單 價'
from goods having 庫存量>=1000 and   庫存量<=2000

4.5 使用算術運算符對結果集中的列進行計算,編寫一條SELECT語句,顯示goods表中所有貨品的貨品名稱.價格和

折扣10%後的價格,使用別名"9折後的價格"標識被計算的列,查詢結果按價格由高到低排序.
select 貨品名稱,價格,價格*0.9 as '9折後的價格'
from goods order by 價格 desc


4.7 基於字符串匹配條件選擇查詢結果,編寫一條SELECT語句,列出customers表中姓王的客戶信息.
select * from customers where 姓名 like '%王%'


4.10 實現外連接,查詢出重慶客戶的姓名.電話號碼並顯示他們的訂單信息.

4.11 實現內連接,查詢出有訂單的重慶客戶的姓名.電話號碼並顯示他門的訂單信息
                                       

4.15 向表中添加行,編寫一條INSERT語句,在goods表中添加一行.數據如下
貨品名稱   庫存量   供應商   狀態   價格
PENCIL      200     NULL      0      0.3

insert into goods(貨品名稱,庫存量,供應商,狀態,價格) values(PENCIL,200,NULL,0,0.3)

4.19 創建一個新表,新表中包含訂購了"pen"的訂單信息

4.20 嵌套子查詢與相關子查詢的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章