Mysql---數據查詢(一)

在進行數據查詢操作前,我們需要建立三張表,如下:


1.建立學生表:

CREATE TABLE student
(
Sno VARCHAR(7) PRIMARY KEY,
Sname VARCHAR(10) NOT NULL,
Ssex VARCHAR(2),
Sage TINYINT,
Sdept VARCHAR(20)
);

2.建立課程表:

CREATE TABLE courcse
(
Cno VARCHAR(10) NOT NULL,
Cname VARCHAR(20) NOT NULL,
Ccredit TINYINT,
Semester TINYINT,
PRIMARY KEY(Cno)
);

3.建立選修表:

CREATE TABLE sc
(
Sno VARCHAR(7) NOT NULL,
Cno VARCHAR(10) NOT NULL,
Grade SMALLINT,
XKLB VARCHAR(4),
PRIMARY KEY(Sno,Cno),
CONSTRAINT student_Sno
FOREIGN KEY(Sno)
REFERENCES student(Sno),
CONSTRAINT courcse_Cno
FOREIGN KEY(Cno)
REFERENCES courcse(Cno)
);

4.插入數據:

INSERT INTO student
VALUES
('9512101','李勇','男',19,'計算機系'),
('9512102','劉晨','男',20,'計算機系'),
('9512103','王敏','女',20,'計算機系'),
('9521101','張立','男',22,'信息系'),
('9521102','吳賓','女',21,'信息系'),
('9521103','張海','男',20,'信息系'),
('9531101','錢小平','女',18,'數學系'),
('9531102','王大力','男',19,'數學系');

INSERT INTO courcse
VALUES
('c01','計算機文化學',3,1),
('c02','VB',2,3),
('c03','計算機網絡',4,7),
('c04','數據庫基礎',6,6),
('c05','高等數學',8,2),
('c06','數據結構',5,4);

INSERT INTO sc
VALUES
('9512101','c01',90,'必修'),
('9512101','c02',86,'選修'),
('9512101','c06',NULL,'必修'),
('9512102','c02',78,'選修'),
('9512102','c04',66,'必修'),
('9521102','c01',82,'選修'),
('9521102','c02',75,'選修'),
('9521102','c04',92,'必修'),
('9521102','c05',50,'必修'),
('9521103','c02',68,'選修'),
('9521103','c06',NULL,'必修'),
('9531101','c01',80,'選修'),
('9531101','c05',95,'必修'),
('9531102','c05',85,'必修');

5.查詢過程

5.1查詢出生年份

PS:可以在輸出的時候對列重新命名,並且輸出並不存在的列,列值通過計算而來。

SELECT Sname 姓名,2015-Sage 出生年份 FROM student;


5.2查找選修了課程的同學的學號,並且升序排序。

PS:因爲在選修課表中,存在一名同學選了多門課程的情況(故主鍵爲學號加課程號),所以直接查詢學號會出現很多相同的學號。

SELECT DISTINCT Sno FROM sc ORDER BY Sno;
關鍵字DISTINCT 用來去除重複的行,OREDR BY 用來排序,默認排序爲升序(ASC),降序爲(DESC)。


5.3查詢成績不及格的學生的學號

PS:當一個學生有多們成績不及格時,只需列出一個學號

SELECT DISTINCT Sno FROM sc WHERE Grade<60;


5.4查詢成績爲空的學生的學號

PS:當查詢成績爲空的時候,一定要注意 WHERE 的判斷語句必須是 “Grade IS NULL”,而不能爲“Grade=NULL”,涉及到非NULL則爲“IS NOT NULL”。

SELECT DISTINCT Sno,Grade FROM sc WHERE Grade IS NULL;



5.5查詢年齡在20~23之間的學生的姓名、所在系、年齡

PS:在一個區間的查詢,可以使用 BETWEEN ... AND 或者對年齡進行兩次判斷取 AND,不在這個區間,則在BETWEEN前面加入 NOT。

SELECT Sname,Sdept,Sage FROM student WHERE Sage BETWEEN 20 AND 23;
SELECT Sname,Sdept,Sage FROM student WHERE Sage>=20 AND Sage<=23;



5.6查詢信息系、數學系的學生的姓名和性別

PS:可以用關鍵字IN來解決,不在範圍,則用NOT IN。以下兩句結果一樣。

SELECT Sname,Ssex FROM student WHERE Sdept IN ('信息系','數學系');
SELECT Sname,Ssex FROM student WHERE Sdept NOT IN('計算機系');



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章