初期テーブルの構造と内容
Student、Course、SCの3つのテーブルが含まれています(それぞれ、Student Information Table、Course Information Table、Course Selection Result Table)
1.1学生テーブルの構造
1.2コーステーブルの構造
1.3SCテーブル構造
2.1学生のコンテンツ
2.2コースの内容
SELECT * FROM Course ORDER BY cast(Cno as int);
2.3SCコンテンツ
データを挿入
INSERT INTO Student VALUES('201212126','WANGHUA','MALE',18,'CS');
データを削除する
DELETE FROM Course WHERE Cno = '11';
データの更新
UPDATE Course SET Cno = '8' WHERE Cno = '11';
データを探す
1.単一テーブルクエリ
SELECT Sno, Sname FROM Student;
SELECT Sname, 2021-Sage FROM Student;
SELECT Sname NAME,
'Year of Birth:' BIRTH,
2021-Sage BIRTHDAY,
LOWER(Sdept) DEPARTMENT
FROM Student;
SELECT Sno FROM SC;
SELECT DISTINCT Sno FROM SC;
SELECT Sname FROM Student WHERE Sdept = 'CS';
SELECT Sname, Sage FROM Student WHERE Sage<20;
Sname、Sdept、Sage FROM Student WHERE Sage(NOT)BETWEEN 19 AND 20;
SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 19 AND 20;
(NOT)
SELECT Sname, Ssex FROM Student WHERE Sdept IN('CS','IS');
ファジークエリ
ワイルドカード:_%
SELECT * FROM Student WHERE Sno LIKE '201212121';
SELECT * FROM Course WHERE Cno = '2';
SELECT * FROM Course WHERE Cno LIKE '2';
SELECT * FROM Course WHERE Cno LIKE '2%';
SELECT Sname FROM Student WHERE Sname LIKE 'LIU%';
SELECT Sname FROM Student WHERE Sname LIKE '___CHEN%';
INSERT INTO Course VALUES('9','DBADESIGN','',4);
SELECT * FROM Course WHERE Cname LIKE 'DB_DESIGN%';
SELECT * FROM Course WHERE Cname LIKE 'DB\_DESIGN%' ESCAPE'\';
集計関数
学生の総数
SELECT COUNT(*) FROM Student;
選択科目1の平均成績
SELECT AVG(Grade) FROM SC WHERE Cno = '1';
201212121選択科目の学生の合計単位
SELECT SUM(Ccredit) FROM SC,Course
WHERE Sno = '201212121' AND SC.Cno = Course.Cno;
GROUP BY
各コース番号と対応するコース数
SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;
リンククエリ
各学生の状況とその選択科目
SELECT Student.*, SC.* FROM Student,SC WHERE Student.Sno = SC.Sno;
自然なつながり
SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade
FROM Student, SC WHERE Student.Sno = SC.Sno;
第2コースを受講し、スコアが90ポイント未満の学生IDと学生の名前
SELECT Student.Sno, Sname FROM Student, SC
WHERE Student.Sno = SC.Sno AND SC.Cno = '2' AND SC.Grade<=90;
自己接続
各コースの前提条件を照会する(比較)
SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST, Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;
SELECT Cno,Cpno FROM Course WHERE Cpno = Cno;
SELECT FIRST.Cno,FIRST.Cpno FROM Course FIRST,Course
WHERE FIRST.Cpno = FIRST.Cno;
外部結合
SELECT Student.Sno, Sname, Sname, Ssex, Sage, Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC ON (Student.Sno = SC.Sno);
マルチテーブル結合
各学生の学生ID、名前、選択科目、成績を照会します
SELECT Student.Sno, Sname, Cname, Grade FROM Student,SC,Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno;
ネストされたクエリ
コース2を選択した学生の名前
SELECT Sname FROM Student WHERE Sno IN
(SELECT Sno FROM SC WHERE Cno = '2');
自分の選択科目の平均成績を超える各学生のコース数
SELECT Sno, Cno FROM SC x
WHERE Grade >=(SELECT AVG(Grade) FROM SC y WHERE y.Sno = x.Sno);
コレクションクエリ
コンピュータサイエンスの学生と19歳未満の学生
SELECT * FROM Student WHERE Sdept = 'CS'
UNION SELECT * FROM Student WHERE Sage<=19;
コンピュータサイエンスの学生と19歳以下の交差点
SELECT * FROM Student WHERE Sdept = 'CS'
INTERSECT SELECT * FROM Student WHERE Sage<=19;
コンピュータサイエンス技術科の学生と19歳未満の学生の違い
SELECT * FROM Student WHERE Sdept = 'CS'
EXCEPT SELECT * FROM Student WHERE Sage<=19;
派生テーブルに基づくクエリ
自分の選択科目の平均を超える各学生の科目数を調べます
SELECT Sno, Cno
FROM SC, (SELECT Sno, Avg(Grade) FROM SC GROUP BY Sno)
AS Avg_sc(avg_sno,avg_grade)
WHERE SC.Sno = Avg_sc.avg_sno AND SC.Grade >= Avg_sc.avg_grade;