熱線電話:13121318867

登錄
2023-11-01 閱讀量: 2521
CDA一級SQL學習之要查詢“計算機” 系的沒有不及格成績的學生學號和姓名

單選題:有關系S(SNO,SNAME,SDEPT,SAGE),C(CNO,CNAME),Sc(SNO,CNO,GRADE)。其中SNO是學生號,SNAME是學生姓名,SDEPT是系別,SAGE是學生年齡,CNO是號,CNAME是課程名稱,GRADE是成績。要查詢“計算機”系的沒有不及格成績的學生學號和姓名 ( )

A.SELECT Sno, Sname FROM S WHERE Sdept='計算機' INTERSECT SELECT Sno, Sname FROM SC WHERE GRADE>=60;

B.SELECT Sno, Sname FROM S WHERE Sdept='計算機' and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);

C.SELECT Sno, Sname FROM S WHERE Sdept='計算機' EXCEPT SELECT SNOFROM SC WHERE GRADE<60;

D.SELECT Sno, Sname FROM S WHERE Sdept='計算機' and SNO in (SELECT SNO FROM SC WHERE GRADE>=60);

b3b19a5da6460f683e97aaecfad18b1.png

答案:選B

解析:

首先提示一點,一個學生會對應多個課程,會存在有的課程及格有的課程不及格,如下表所示:

學號 課程 成績

學生A 課程1 66

學生A 課程2 55

學生A 課程3 44

其次沒有不及格成績的學生學號和姓名,意味著這個學生的所有課程成績都要及格,上表中的學生A這類有的課程及格有的課程不及格的學生不符合條件

小伙伴大多疑問D選項,對于SELECT SNO FROM SC WHERE GRADE>=60這個子查詢,學生A這類有的課程及格有的課程不及格的學生會出現在子查詢結果中,進而最后結果中也會出現學生A這類有的課程及格有的課程不及格的學生,因此D不是正確的答案。


詳細探討

A. SELECT Sno, Sname FROM S WHERE Sdept='計算機’INTERSECT SELECT Sno, Sname FROM SC WHERE GRADE>=60;

首先 其中SELECT Sno, Sname FROM SC WHERE GRADE>=60錯誤,Sname 不在SC中,這個子查詢無法執行。

其次這個查詢語句使用了INTERSECT操作符來獲取同時滿足兩個條件的學生學號和姓名。首先,在第一個子查詢中,我們選擇S表中Sno和Sname列,限定條件是Sdept為“計算機”。然后,在第二個子查詢中,我們選擇SC表中Sno和Sname列,限定條件是GRADE大于等于60, 學生A這類有的課程及格有的課程不及格的學生會被查詢到,。最后,使用INTERSECT操作符來獲取兩個子查詢的交集。然而,學生A這類有的課程及格有的課程不及格的學生會出現在最后結果中,因此不是正確的答案。

B. SELECT Sno, Sname FROM S WHERE Sdept='計算機' and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);

這個查詢語句使用了NOT IN關鍵字來排除主查詢中的學生學號在子查詢中出現的情況。首先,在主查詢中,我們從S表中選擇Sno和Sname列,限定條件是Sdept為“計算機”。然后,在子查詢中,我們選擇SC表中的SNO列,限定條件是GRADE小于60。最后,使用NOT IN關鍵字來排除主查詢中的學生學號在子查詢中出現的情況。這樣,只有在S表中的學生學號不在SC表中的不及格成績學生學號列表中的學生才會被選擇。因此,這個查詢語句是正確的答案。

C. SELECT Sno, Sname FROM S WHERE Sdept='計算機’ EXCEPT SELECT Sno FROM SC WHERE GRADE<60;

會報措提示:列數不一致 Error Code: 1222. The used SELECT statements have a different number of columns。EXCEPT前后列數不一致,無法執行。改為:SELECT Sno FROM S WHERE Sdept='計算機’ EXCEPT SELECT Sno FROM SC WHERE GRADE<60;可以得到結果,但是結果無學生姓名Sname 。因此不是正確的答案。

D. SELECT Sno, Sname FROM S WHERE Sdept='計算機’ and SNO in (SELECT SNO FROM SC WHERE GRADE>=60);

對于SELECT SNO FROM SC WHERE GRADE>=60這個子查詢,學生A這類有的課程及格有的課程不及格的學生會出現在子查詢結果中,進而最后結果中也會出現學生A這類有的課程及格有的課程不及格的學生,因此D不是正確的答案

綜上所述,B是正確的答案


備注:比較新的 MySQL 8.0.31 版本支持INTERSECT 和 EXCEPT,老版本不支持


以下是我對于此題的SQL建表建數實踐,感興趣的伙伴可以試試。


##建表建數實踐:

#創建S表:

#DROP TABLE S;

CREATE TABLE S (

Sno CHAR(10) PRIMARY KEY,

Sname VARCHAR(20) NOT NULL,

Sdept VARCHAR(20) NOT NULL,

Sage INT NOT NULL

);


INSERT INTO S VALUES ('S001', '張三', '計算機', 20);

INSERT INTO S VALUES ('S002', '李四', '數學', 21);

INSERT INTO S VALUES ('S003', '王五', '計算機', 19);

INSERT INTO S VALUES ('S004', '趙六', '物理', 20);

INSERT INTO S VALUES ('S005', '錢七', '計算機', 22);


#創建C表:

#DROP TABLE C;

CREATE TABLE C (

Cno CHAR(10) PRIMARY KEY,

Cname VARCHAR(20) NOT NULL

);


INSERT INTO C VALUES ('C001', '數據庫');

INSERT INTO C VALUES ('C002', '數據結構');

INSERT INTO C VALUES ('C003', '計算機組成原理');

INSERT INTO C VALUES ('C004', '操作系統');

INSERT INTO C VALUES ('C005', '計算機網絡');


#創建SC表:

#DROP TABLE SC;

CREATE TABLE SC (

Sno CHAR(10) NOT NULL,

Cno CHAR(10) NOT NULL,

Grade INT NOT NULL,

PRIMARY KEY (Sno, Cno),

FOREIGN KEY (Sno) REFERENCES S(Sno),

FOREIGN KEY (Cno) REFERENCES C(Cno)

);


INSERT INTO SC VALUES ('S001', 'C001', 66);

INSERT INTO SC VALUES ('S001', 'C002', 55);

INSERT INTO SC VALUES ('S001', 'C003', 44);

INSERT INTO SC VALUES ('S002', 'C001', 75);

INSERT INTO SC VALUES ('S002', 'C002', 80);

INSERT INTO SC VALUES ('S002', 'C003', 70);

INSERT INTO SC VALUES ('S003', 'C001', 90);

INSERT INTO SC VALUES ('S003', 'C002', 95);

INSERT INTO SC VALUES ('S003', 'C003', 85);

INSERT INTO SC VALUES ('S004', 'C001', 70);

INSERT INTO SC VALUES ('S004', 'C002', 80);

INSERT INTO SC VALUES ('S004', 'C003', 75);

INSERT INTO SC VALUES ('S005', 'C001', 85);

INSERT INTO SC VALUES ('S005', 'C002', 90);

INSERT INTO SC VALUES ('S005', 'C003', 80);



A.SELECT Sno, Sname FROM S WHERE Sdept='計算機' INTERSECT SELECT Sno, Sname FROM SC WHERE GRADE>=60;


B.SELECT Sno, Sname FROM S WHERE Sdept='計算機' and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);


C.SELECT Sno, Sname FROM S WHERE Sdept='計算機' EXCEPT SELECT SNOFROM SC WHERE GRADE<60;


D.SELECT Sno, Sname FROM S WHERE Sdept='計算機' and SNO in (SELECT SNO FROM SC WHERE GRADE>=60);






0.0000
0
關注作者
收藏
評論(0)

發表評論

暫無數據
推薦帖子
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码