學生成績三個字段.用一個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 嵌套子查詢與相關子查詢的區別