SqlServer 常見SQL筆試題之語句操做題詳解
java
by:授客 QQ:1033553122數據庫
測試數據庫c#
CREATE DATABASE handWriting網絡
ON PRIMARYoracle
(jsp
name = 'bishi',函數
fileName = 'E:\數據庫\bishi.mbf',學習
size = 5MB,測試
maxSize = 30MB,spa
fileGrowth = 10%
)
LOG ON
(
name = 'bishilog',
fileName = 'E:\數據庫\bishilog.ldf',
size = 5MB,
fileGrowth = 10%
)
一、
有個表:
employee 職工(工號,姓名,性別,年齡,部門)(num,name,sex,age,departmentno)
wage工資(編號,工資金額)(ID,amount)
attend出勤(工號,工資編號,出勤率)(num,ID,attendance)
請根據要求,編寫相應的SQL語句。
--寫一個SQL語句,查詢工資金額爲8000的職工工號和姓名。
分析:多表查詢(3表或以上),先對第一個和第二個表按照兩錶鏈接作查詢,而後用查詢結果和第三個表作鏈接查詢,以此類推,直到全部的表都鏈接上爲止,最終造成一箇中間的結果表,而後根據WHERE條件過濾中間表的記錄,並根據SELECT 指定的列返回查詢結果。
SELECT name,employee.num FROM employee, wage, attend
WHERE employee.num = attend.num and attend.ID = wage.ID and wage.amount = 8000
--寫一個SQL語句,查詢職工張三的出勤率
分析:只涉及到兩張表。。以下
SELECT attendance FROM attend, employee
WHERE attend.num = employee.num AND employee.name = '張三'
--WHERE num = (SELECT num FROM employee WHERE employee.name = '張三')
--寫一個SQL語句,查詢3次出勤率爲0的職工姓名和工號【常見題目】
分析:設計到兩張表,相關子查詢,employee表中每給出一個工號,就去全表掃描attend表,先在表attend中查找知足WHERE條件的記錄,而後對結果進行分組,再過濾出勤率爲0的,對每個num,虛表都有值,那麼exists 虛表返回true,把結果放入結果集表中,而後再指向下一個記錄,給定一個num重複。。。。
SELECT name, num FROM employee
WHERE EXISTS(
SELECT num FROM attend
WHERE employee.num = attend.num and attendance = 0
GROUP BY num HAVING COUNT(*) = 3)
--寫一個SQL語句,查詢出勤率爲10而且工資金額小於2500的職工信息。[常見題目]
分析:不可行的思路:職工信息在表employee,工資在表wage,出勤率在表attend中,工資表只和出勤表相關聯,先從表attend和表wage選出知足條件的結果集,再經過num和表employee相關聯
SELECT * FROM employee,(
SELECT * FROM attend, wage
WHERE attendance = 10 AND attend.ID = wage.ID and amount <</span> 2500) A
WHERE employee.num = A.num
說明:屢次爲'A' 指定了列'ID' ,這種方法不可行,字段太多,會同名,要所有寫出來。。
思路二:多表鏈接,【通常這種作法錯不了,具備廣泛性】,num的選擇,來自attend中num集合,ID來自知足條件的集合
SELECT * FROM employee
WHERE num IN(
SELECT num FROM attend
WHERE attendance = 10 and ID IN(
SELECT ID FROM wage
WHERE amount <</span> 2500))
二、
爲管理崗位業務培訓信息,創建個表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分別表明學號、學員姓名、所屬單位、學員年齡
C (C#,CN ) C#,CN 分別表明課程編號、課程名稱
SC ( S#,C#,G ) S#,C#,G 分別表明學號、所選修的課程編號、學習成績
-- 使用標準SQL嵌套語句查詢選修所有課程的學員姓名和所屬單位【常見題目】
錯誤作法以下,
SELECT sn, sd FROM s
WHERE EXISTS(
SELECT * FROM c
WHERE EXISTS(
SELECT * FROM sc
WHERE s.s# = sc.s# and c.c# = sc.c#))
說明:先裝載s表,而後,指針p1指向第一個記錄了,而後裝載c表,指針p2指向第一個記錄,
而後裝載sc表,進行全sc表掃描,指針指向第一個記錄,而後查詢知足WHERE的記錄,若是找到記錄(無論一條仍是多條),則內層中的EXISTS虛表返回值爲真,執行SELECT * FROM C,把結果放入虛表中,顯然虛表中有數據,外層EXISTS 虛表爲真,而後把sn,sd放入最終結果表,這不說明他選了所有課程,只能說明他至少選了一門課程
正確作法:語義上:查詢這樣的學生,他沒有選的課程不存在。--雙重否認
對每一個學生,去課程表中查找沒被他選修的課程,結果找不到數據。
SELECT sn, sd
FROM s
WHERE NOT EXISTS
(
SELECT * FROM c
WHERE NOT EXISTS
(
SELECT * FROM sc
WHERE s.s# = sc.s# and sc.c# = c.c#
)
)
--如下子查詢即爲查找他沒選修的課程
SELECT * FROM c
WHERE NOT EXISTS
(
SELECT * FROM sc
WHERE s.s# = sc.s# and sc.c# = c.c#
)
--查詢選修了課程的學員人數【常見題目】
分析:選修課中去掉重複的學員號s#,剩下的記錄個數就表示人數
SELECT 學員人數= COUNT(DISTINCT s#) FROM SC
--查詢選修課程超過5門的學員學號和所屬單位【常見題目】
分析:同一個學生(分組使相同值的學號放在一組),選修課程超過5門(該組的記錄個數超過5個)
(HAVING提出要求,記錄個數用count實現);
先從sc表中查找,而後分組,選擇記錄大於5的,而後再從s表查找,條件是學生號在剛纔那個sc表查詢結果集中。
SELECT sn, sd FROM S
WHERE s# IN(
SELECT s# FROM SC
GROUP BY s#
HAVING COUNT(DISTINCT C#)>5)
注意:若是僅是group by,不帶having語句,那麼針對每一個分組僅會產生一條記錄,若是使用having語句則會產生1到n條記錄,每條記錄都必須知足having給定的條件。
--使用標準SQL嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名
分析:三表c,sc,s
SELECT s#,sn FROM s
WHERE s# IN(
SELECT s# FROM sc WHERE c# IN(
SELECT c# FROM c
WHERE cn = '稅收基礎'))
-- 使用標準SQL嵌套語句查詢選修課程編號爲2的學員姓名和所屬單位
SELECT s#,sd FROM s
WHERE s# IN(
SELECT s# FROM sc WHERE c# IN(
SELECT c# FROM c
WHERE c# = '2'))
-- 使用標準SQL嵌套語句查詢不選修課程編號爲’5’的學員姓名和所屬單位
SELECT s#,sd FROM s
WHERE s# IN(
SELECT s# FROM sc WHERE c# IN(
SELECT c# FROM c
WHERE c# <> '5'))
--用一條SQL語句查詢出每門課都大於80分的學生姓名【常見題目】
分析:涉及選修表,學生表,對sc表裏的每一個s#,全表掃描他選修的成績,都要大於80
語義:查找這樣的學生,全表掃描他選修的成績,不存在小於80的
SELECT sn FROM s
WHERE s# IN(
SELECT x.s# FROM sc x
WHERE NOT EXISTS(
SELECT * FROM sc y
WHERE y.s# = x.s# AND g <</span> 80))
三、
問題描述:
已知關係模式:
S1 (SNO,SNAME) 學生關係。SNO 爲學號,SNAME 爲姓名
C1 (CNO,CNAME,CTEACHER) 課程關係。CNO 爲課程號,CNAME 爲課程名,CTEACHER 爲任課教師
SC1(SNO,CNO,SCGRADE) 選課關係。SCGRADE 爲成績
--3.1. 找出沒有選修過「李明」老師講授課程的全部學生姓名【常見題型】
法一:等值鏈接查詢
SELECT SNAME FROM S1,C1, SC1
WHERE S1.SNO = SC1.SNO
AND S1.SNO = C1.CNO
AND C1.CTEACHER <> '李明'
法二:和方法一同樣的原理
SELECT SNAME FROM S1
WHERE SNO IN(
SELECT SNO FROM SC1
WHERE CNO IN(
SELECT CNO FROM C1
WHERE CTEACHER <> '李明'))
法三
[錯誤作法]
SELECT SNAME FROM S1
WHERE NOT EXISTS(
SELECT * FROM C1
WHERE NOT EXISTS(
SELECT * FROM SC1
WHERE CTEACHER = '李明' AND S1.SNO = SC1.SNO AND C1.CNO = SC1.CNO ))
[正解以下]:
語義:查詢這樣的學生,不存在被李明老師講且被他選修的課程。
SELECT SNAME FROM S1
WHERE NOT EXISTS(
SELECT * FROM C1
WHERE EXISTS(
SELECT * FROM SC1
WHERE CTEACHER = '李明' AND S1.SNO = SC1.SNO AND C1.CNO = SC1.CNO ))
--查找被李明老師講且被選修課程
SELECT * FROM C1
WHERE EXISTS(
SELECT * FROM SC1
WHERE CTEACHER = '李明' AND S1.SNO = SC1.SNO AND C1.CNO = SC1.CNO ))
--3.2. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績【常見題型】
分析:
語義:查詢這樣的學生的姓名及學生的平均成績,選修課程至少有兩名門不及格
培養解題習慣-->涉及表:姓名--S1表,成績--SC1表,關聯字段SNO,條件--同一個學生,兩門或兩門以上不及格,用到函數--VAG(),
條件WHERE,至少要有兩門用COUNT,同一個同窗,分組GROUP BY
假如這裏沒有要求查詢平均成績,那麼能夠以下
SELECT S1.SNAME FROM S1
WHERE EXISTS(
SELECT * FROM SC1 WHERE SC1.SNO = S1.SNO AND SC1.SCGRADE <</span> 60
GROUP BY SC1.SNO HAVING COUNT(*) >= 2);
可是這裏還要求平均成績,咱們能夠這樣,在上一步的基礎上,把EXISTS子句中的語句提取出來的結果表給取個別名,而後,兩表查詢
SELECT S1.SNAME, A.AVGSCORE FROM S1,
(SELECT SNO, AVG(SCGRADE) AVGSCORE FROM SC1
WHERE SCGRADE <</span> 60
GROUP BY SC1.SNO HAVING COUNT(*) >= 2) A
WHERE S1.SNO = A.SNO
--3.3. 列出既學過「1」號課程,又學過「2」號課程的全部學生姓名【常見題型】
作法1
SELECT SNAME
FROM S1,(
SELECT SNO FROM SC1
WHERE CNO = 1
INTERSECT
SELECT SNO FROM SC1
WHERE CNO = 2
)A
WHERE S1.SNO = A.SNO
作法2:
涉及表:選課表,學生表,從表中查找號課程或者號課程的學生,而後分組取同一個學生,而後選擇記錄數大於等於選兩門的同窗,而後再與學生錶鏈接
SELECT SNAME FROM S1
WHERE SNO IN(
SELECT SNO FROM SC1
WHERE CNO = 1 OR CNO = 2
GROUP BY(SNO) HAVING COUNT(*) >= 2)--注意這裏要是隻寫等於,那麼要是還選了其餘課程的就
會被遺漏
--3.4 列出對同一學生,「1」號課成績比「2」號課成績高的全部學生的學號
分析:涉及表SC1,條件:同一個學生,號課程成績比號課程成績高,能夠爲該表起兩個別名,而後聯合查詢,同一學生--》兩表SNO相等,相關子查詢,給定一個sno,一個cno,全表掃描另外一個表,查找知足where的。。
SELECT DISTINCT(X.SNO) FROM SC1 X --注意這裏必定要加個DISTINCT
WHERE X.CNO = 1 AND X.SCGRADE > (
SELECT SCGRADE FROM SC1 Y
WHERE Y.SNO = X.SNO AND Y.CNO = 2);
--3.5 列出「1」號課成績比「2」號課成績高的全部學生的學號及其「1」號課和「2」號課的成績
分析:涉及表一張,先從同同樣表中查找出1號課程,與2號課程的成績,及選修人SNO,而後SNO相等,肯定同一我的,而後再比較兩表中學生的成績。再從前面的結果查找學號。。。
SELECT A.SNO, SCORE1, SCORE2 FROM (
SELECT SNO,SCGRADE SCORE1 FROM SC1
WHERE CNO = 1)A,
(SELECT SNO, SCGRADE SCORE2 FROM SC1
WHERE CNO = 2)B
WHERE A.SNO = B.SNO AND A.SCORE1 > B.SCORE2
四、
請查詢出在ZD_ks中BM有重複的值及重複的次數,沒有的不要列出。以下表:
BM DUPCOUNT
001
002
採用SC1中的數據源
SELECT SNO,COUNT(SNO)- 1 REPEAT FROM SC1
GROUP BY SNO HAVING COUNT(*) > 1
五、
問題描述:
本題用到下面三個關係表:
T_CARD 借書卡 CNO 卡號,NAME 姓名,CLASS 班級
T_BOOKS 圖書 BNO 書號,BNAME 書名,AUTHOR 做者,PRICE 單價,QUANTITY 庫存冊數
T_BORROW 借書記錄CNO 借書卡號,BNO 書號,RDATE 還書日期
備註:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。
--5.1.找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數。
分析:涉及3表,並且輸出字段不在同一表中,這種狀況下用以下方式不錯
SELECT NAME, CNO, QUANTITY FROM CARD, T_BOOKS, T_BORROW
WHERE CARD.CNO=T_BORROW.CNO AND T_BOOKS.BNO = T_BORROW.BNO
GROUP BY NAME HAVING COUNT(*)>5
--5.2.查詢借閱了"水滸"一書的讀者,輸出姓名及班級。
SELECT NAME, CLASS FROM T_CARD
WHERE CNO IN (
SELECT CNO FROM T_BORROW
WHERE BNO IN (
SELECT BNO FROM T_BOOKS
WHERE BNAME = '水滸'))
--5.3.查詢過時未還圖書,輸出借閱者(卡號)、書號及還書日期。
SELECT * FROM T_BORROW
WHERE REDATE <</span> GETDATE();
--5.4.查詢書名包括"網絡"關鍵詞的圖書,輸出書號、書名、做者。
SELECT BNO, BNAME, AUTHOR FROM T_BOOKS
WHERE BNAME LIKE '%網絡%';
--5.5.查詢現有圖書中價格最高的圖書,輸出書名及做者。
SELECT TOP 1 WITH TIES BNAME, AUTHOR FROM T_BOOKS ORDER BY PRICE DESC;
--或者
SELECT BNAME, AUTHOR FROM T_BOOKS
WHERE PRICE = (SELECT MAX(PRICE) FROM T_BOOKS)
--5.6 查詢當前借了"計算方法"但沒有借"計算方法導論"的讀者,輸出其借書卡號,並按卡號降序排序輸出。
分析:涉及表,T_BORROW T_BOOKS,條件同一個學生,借了‘計算機方法’,沒借計算機方法導論,條件和條件都是同一個表中,考慮起別名
錯誤作法以下,子查詢中是排除了計算方法導論,可是父查詢中只要借了BNO的人就會被選出來,而借了BNO的人有可能借了計算方法導論
SELECT CNO FROM T_BORROW
WHERE BNO IN(
SELECT A.BNO FROM T_BOOKS A
WHERE A.BNAME LIKE '計算方法'AND A.BNO NOT IN(
SELECT B.BNO FROM T_BOOKS B
WHERE A.BNAME = '計算方法導論'))
ORDER BY CNO DESC;
通常涉及同一個的狀況要麼是等值,要麼就是EIXSTS或等相關子查詢,但這裏沒T_BOOK表中沒有CNO這關聯字段;
先保證他借了計算方法,而後再保證他沒有再借計算方法導論,怎麼保證?給定同一個CNO,再對T_BORROW表中的BNO,對書表進行全表掃描,不存在借計算方法導論的記錄
SELECT A.CNO FROM T_BORROW A, T_BOOKS B
WHERE A.BNO = B.BNO AND B.BNAME = '計算方法'
AND NOT EXISTS(
SELECT * FROM T_BORROW A1, T_BOOKS B1
WHERE A.CNO = A1.CNO AND B1.BNO = A1.BNO AND B1.BNAME = '計算方法導論')
ORDER BY CNO DESC;
--5.7 將"1"班同窗所借圖書的還期都延長一週。
UPDATE T_BORROW SET REDATE = DATEADD(DAY,7,REDATE)--注意函數的用法
WHERE CNO IN (
SELECT CNO FROM T_CARD
WHERE CLASS = 1);
--5.8 從BOOKS表中刪除當前無人借閱的圖書記錄。
分析:對book表中的每一個書號,對借書表全表掃描,結果找不到數據
DELETE FROM T_BOOKS WHERE NOT EXISTS(
SELECT * FROM T_BORROW
WHERE T_BOOKS.BNO = T_BORROW.BNO
);
--5.9.若是常常按書名查詢圖書信息,請創建合適的索引。
CREATE INDEX INDEX_A ON T_BOOKS(BNAME);
--5.10 在BORROW表上創建一個觸發器,完成以下功能:若是讀者借閱的書名是"數據庫技術及應用",--就將該讀者的借閱記錄保存在BORROW_SAVE表中(注ORROW_SAVE表結構同BORROW表)。
CREATE TRIGGER TRI_NAME ON T_BORROW
FOR INSERT,UPDATE
AS
DECLARE
@booknum INT
SELECT @booknum = BNO FROM INSERTED --注意這裏賦值【SET @變量名=值或SELECT @變量名= 值 FROM 表
IF @booknum = (SELECT BNO FROM T_BOOKS
WHERE BNAME = '數據庫技術及應用')
BEGIN
--INSERT INTO BORROW_SVAE SELECT * FROM INSERTED --注意這裏這種方式下,表BORROW_SAVE必定要先存在,否則執行的時候會提示對象名無效
SELECT * INTO BORROW_SVAE FROM INSERTED
END;
--檢測
INSERT INTO T_CARD VAlUES(3,'JJ',1);
INSERT INTO T_BORROW VALUES(3,5, '2008-12-01');
SELECT * FROM BORROW_SVAE;
發現上面的作法無效
--稍微改動了下
CREATE TRIGGER TR_SAVE ON T_BORROW
FOR INSERT,UPDATE
AS
IF @@ROWCOUNT>0
SELECT * INTO BORROW_SAVE
FROM INSERTED i,T_BOOKS b
WHERE i.BNO=b.BNO
AND b.BNAME='數據庫技術及應用'
--檢測
DELETE FROM T_BORROW WHERE BNO = 5;
INSERT INTO T_BORROW VALUES(3,5, '2008-12-01');
--提示數據庫中已存在名爲'BORROW_SVAE' 的對象。
--改正
DROP TRIGGER TR_SAVE
DROP TRIGGER TRI_NAME
CREATE TRIGGER TR_SAVE ON T_BORROW
FOR INSERT,UPDATE
AS
IF @@ROWCOUNT>0
SELECT * INTO BORROW_SAVE
FROM INSERTED i,T_BOOKS b
WHERE i.BNO = b.BNO
AND b.BNAME='數據庫技術及應用'
--檢測
DELETE FROM T_BORROW WHERE BNO = 5;
INSERT INTO T_BORROW VALUES(3,5, '2008-12-01');
--提示各表中的列名必須惟一。在表'BORROW_SAVE' 中屢次指定了列名'BNO'。
--改正
DROP TRIGGER TR_SAVE
CREATE TRIGGER TR_SAVE ON T_BORROW
FOR INSERT,UPDATE
AS
IF @@ROWCOUNT>0
SELECT i.CNO,i.BNO,I.REDATE INTO BORROW_SAVE
FROM INSERTED i,T_BOOKS b
WHERE i.BNO = b.BNO
AND b.BNAME='數據庫技術及應用'
--檢測
DELETE FROM T_BORROW WHERE BNO = 5;
INSERT INTO T_BORROW VALUES(3,5, '2008-12-01');
SELECT * FROM BORROW_SVAE;
--5.10.創建一個視圖,顯示1.班學生的借書信息(只要求顯示姓名和書名)。
CREATE VIEW V_VIEW
AS
SELECT NAME, BNAME FROM T_BORROW, T_CARD
WHERE T_BORROW.CNO = T_CARD.CNO AND T_CARD.CLASS = 1
--檢測
SELECT * FROM V_VIEW
--5.11查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,並按卡號升序排序輸出。
分析:涉及表:T_BORROW,T_BOOKS 條件,同時在同一張表選了計算方法和組合數學
--法一.分別查出這兩個結果集,而後INTERCEPT取交集
SELECT CNO FROM T_BORROW
WHERE BNO IN (SELECT BNO FROM T_BOOKS--注意這裏只能用IN
WHERE BNAME = '計算方法')
INTERSECT
SELECT CNO FROM T_BORROW
WHERE BNO IN (SELECT BNO FROM T_BOOKS
WHERE BNAME = '組合數學')
ORDER BY CNO DESC
--法二.查出一個結果集,而後分組,而後記錄大於等於2
SELECT CNO FROM T_BORROW
WHERE BNO IN (SELECT BNO FROM T_BOOKS
WHERE BNAME = '計算方法' OR BNAME = '組合數學')
GROUP BY CNO HAVING COUNT(*)>=2
ORDER BY CNO DESC
--5.12假定在建BOOKS表時沒有定義主碼,寫出爲BOOKS表追加定義主碼的語句。
ALTER TABLE T_BOOKS
ADD CONSTRAINT pk_key2
PRIMARY KEY CLUSTERED(BNO)
--5.15.對CARD表作以下修改:
-- a. 將NAME最大列寬增長到個字符(假定原爲個字符)。
ALTER TABLE T_CARD
ALTER COLUMN NAME VARCHAR(10)--注意這裏沒有SET
-- b. 爲該表增長列NAME(系名),可變長,最大個字符。
ALTER TABLE T_CARD
ADD 系名 VARCHAR(20)
--檢測結果
SELECT * FROM T_CARD
EXEC SP_HELP T_CARD--查看錶信息
六、
學生表以下:
自動編號 學號 姓名課程編號課程名稱分數
1 2005001 張三 0001 數學 69
2 2005002 李四 0001 數學 89
3 2005001 張三 0001 數學 69
刪除除了自動編號不一樣,其餘都相同的學生冗餘信息
分析;分組
DELETE FROM S2
WHERE 自動編號 NOT IN(
SELECT MIN(自動編號) FROM S2 GROUP BY 學號,姓名,課程編號,課程名稱,分數)
SELECT * FROM S2;
七、
複製表(複製結構,可是也會複製數據,源表名:a 新表名:b)
SELECT * INTO b FROM a WHERE 1<>1
說明:b能夠沒必要先建立
拷貝表(拷貝數據,源表名:a 目標表名:b)
INSERT INTO a(a, b, c) SELECT d,e,f FROM b;
說明:要先建立a
八、
有兩個表A和B,均有keyk和value兩個字段,若是B的keyk在A中也有,
就把B的value換爲A中對應的value
這道題的SQL語句怎麼寫?
UPDATE B SET VALUE =(
SELECT VALUE FROM A
WHERE B.KEYK = A.KEYK)
--結果:B中KEYK不在A中的,value就變成了NULL-->緣由沒對B中的key限制,很是容易忽略
--改正:刪除後從新插入上述數據
DELETE FROM B;
UPDATE B SET VALUE =(
SELECT VALUE FROM A
WHERE B.KEYK = A.KEYK)
WHERE B.KEYK IN (
SELECT KEYK FROM A WHERE A.KEYK = B.KEYK)
九、
原表:
courseid coursename score
1 java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80
爲了便於閱讀,查詢此表後的結果顯式以下(及格分數爲):
courseid coursename score mark
---------------------------------------------------
1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass
寫出此查詢語句
SELECT COURSEID, COURSENAME, SCORE,
(CASE WHEN SCORE > 60 THEN 'PASS' ELSE 'FAIL' END) AS MARK
FROM T_B
oracle中作法以下(未測試)
select courseid, coursename ,score ,decode(
sign(score-60),-1,'fail','pass') as mark from course
說明:SIGN返回指定表達式的正號(+1)、零(0) 或負號(-1)。
十、
已知表T一、T2和T3的結構和數據以下
T1
NameID CourseID Score
1 1 90
1 2 85
2 1 75
2 2 95
T2
ID Course
1 數學
2 語文
T3
ID Name
1 張三
2 李四
請寫出查詢的SQL語句,使得查詢的結果爲:
Name Course Score
——– ——– ——–
張三 數學 90
張三 語文 85
李四 數學 75
李四 語文 95
SELECT NAME,COURSE,SCORE FROM T1, T2, T3
WHERE T1.NAMEID = T3.ID AND T1.COURSEID = T3.ID
GROUP BY NAME,COURSE,SCORE;