1. 程式人生 > >資料庫系統實驗4:SQL——SELECT查詢操作

資料庫系統實驗4:SQL——SELECT查詢操作

資料庫系統實驗4:SQL語言——SELECT查詢操作

實驗環境

windows10作業系統,使用MySQL 5.5 Command Line完成實驗

實驗內容

實驗課教材(MySQL資料庫技術與實驗指導)第73頁“實驗內容與要求”第1題
基於jxgl資料庫,使用SQL語句表達以下查詢

  1. 檢索年齡大於23歲的男學生的學號和姓名
  2. 檢索至少選修一門課程的女學生姓名
  3. 檢索王林不學的課程的課程號
  4. 檢索至少選修兩門課程的學生學號
  5. 檢索全部學生都選修的課程的課程號和課程名
  6. 檢索選修了所有3學分的每門課程的學生平均成績

步驟及過程

首先按以下SQL語句建立測試用的jxgl資料庫

CREATE
DATABASE jxgl;
use jxgl; CREATE TABLE IF NOT EXISTS student( sno CHAR(7) NOT NULL, sname VARCHAR(16), sage SMALLINT CHECK(sage>=16 AND sage<=45), ssex CHAR(2) DEFAULT '男' CHECK(ssex='男' OR ssex='女'), sdept CHAR(2), PRIMARY KEY(sno) ) ENGINE=InnoDB; INSERT INTO student VALUES ('2005001', '錢橫', 18
, '男','Cs'), ('2005002', '王林', 19, '女','Cs'), ('2005003', '李民', 23, '男','Is'), ('2005004', '趙欣然', 16, '女','Ma');
CREATE TABLE IF NOT EXISTS course( cno CHAR(2) NOT NULL, cname VARCHAR(20), cpno CHAR(2), ccredit SMALLINT, PRIMARY KEY(cno) ) ENGINE=InnoDB; INSERT INTO course VALUES ('1', '資料庫系統', '5', 4), ('2', '數學分析'
, '', 2), ('3', '資訊系統導論', '1', 3), ('4', '作業系統原理', '6', 3), ('5', '資料結構', '7', 4), ('6', '資料處理基礎', '', 4), ('7', 'C語言', '6', 3);
CREATE TABLE IF NOT EXISTS sc( sno CHAR(7) NOT NULL, cno CHAR(2) NOT NULL, grade SMALLINT, PRIMARY KEY(sno, cno), FOREIGN KEY(sno) REFERENCES student(sno), FOREIGN KEY(cno) REFERENCES course(cno) ) ENGINE=InnoDB; INSERT INTO sc VALUES ('2005001', '1', 87), ('2005001', '2', 67), ('2005001', '3', 90), ('2005001', '4', 90), ('2005001', '5', 90), ('2005001', '6', 90), ('2005001', '7', 90), ('2005002', '2', 95), ('2005002', '4', 88), ('2005003', '3', 88), ('2005003', '4', 88), ('2005004', '4', 88);

使用SQL語句表達以下查詢

  • 檢索年齡大於23歲的男學生的學號和姓名
SELECT sno, sname
FROM student
WHERE sage>23 AND ssex='男';
  • 檢索至少選修一門課程的女學生姓名
SELECT student.sname
FROM student, sc
WHERE student.ssex='女' AND student.sno=sc.sno
GROUP BY student.sno
HAVING count(*)>=1;
  • 檢索王林不學的課程的課程號
SELECT cno
FROM course
WHERE NOT EXISTS
(SELECT * FROM student, sc
WHERE sc.sno=student.sno
AND sc.cno=course.cno AND student.sname='王林');
  • 檢索至少選修兩門課程的學生學號
SELECT student.sno
FROM student, sc
WHERE student.sno=sc.sno
GROUP BY student.sno
HAVING count(*)>=2;
  • 檢索全部學生都選修的課程的課程號和課程名
SELECT cno, cname
FROM course
WHERE NOT EXISTS
(SELECT * FROM student
WHERE NOT EXISTS
(SELECT * FROM sc
WHERE sno=student.sno AND cno=course.cno));
  • 檢索選修了所有3學分的每門課程的學生平均成績
SELECT AVG(grade)
FROM course, sc
WHERE course.cno=sc.cno AND course.ccredit=3;