1. 程式人生 > >Mysql綜合案例

Mysql綜合案例

mys mil 年齡 同學 primary 表示 align 出了 pro

Mysql綜合案例

考核要點:創建數據表、單表查詢、多表查詢

  已知,有一個學生表student和一個分數表score,請按要求對這兩個表進行操作。student表和score分數表的表結構分別如表1-1和表1-2所示。

表1-1student表結構

  字段名   數據類型  主鍵  外鍵  非空   唯一  自增  字段描述

  stu_id   INT(10)   是   否   是   是   否   學號

  stu_name  VARCHAR(20) 否   否   是   否   否   姓名

  sex     VARCHAR(2) 否   否  

否   否   否    性別

  birth   YEAR    否   否   否   否   否   出生年份

  department VARCHAR(20) 否   否   是   否   否   院系

  addr    VARCHAR(50) 否   否   否   否   否   家庭住址

表1-2score表結構

  字段名   數據類型  主鍵  外鍵  非空  唯一  自增  字段描述

  score_id  INT(10)   是   否   是   是   是   編號

  stu_id   INT(10)   否  

否   是   否   否   學號

  c_name  VARCHAR(20)  否   否   否   否   否   課程名

  grade   INT(10)   否   否   否   否   否   分數

  表1-1和表1-2中分別對student表和score表中字段的數據類型、主鍵、外鍵、非空、唯一約束、自增和字段描述做了說明,其中這兩個表中都有stu_id字段,用於表示學號,該字段使student表和score表實現了關聯。

(1)啟動MySQL服務器。

  如果MySQL服務器是未啟動的狀態,可以在cmd窗口中,通過命令來啟動服務器,具體命令如下所示:

net start mysql

(2)登錄MySQL服務器。

  在cmd窗口中登錄MySQL服務器,用戶名為root,密碼為root,具體命令如下所示:

mysql -uroot -proot

(3)創建數據庫。

  創建一個名為my_db的數據庫,具體SQL語句如下:

create database my_db;

(4)切換當前數據庫。

  將名為my_db的數據庫切換為當前數據庫,具體SQL語句如下:

use my_db;

(5)創建學生表student,插入6條記錄。

  創建學生表student,SQL語句如下所示:

CREATE TABLE student (
    stu_id INT(10) PRIMARY KEY,
    stu_name VARCHAR(20)NOT NULL,
    sex VARCHAR(2),
    birth YEAR,
    department VARCHAR(20),
    addr VARCHAR(50)
);

  上述SQL語句執行成功後,表示學生表student創建成功,這時,使用INSERT語句向表中插入數據,SQL語句如下所示:

INSERT INTO student VALUES
( 901,張飛, ,1985,計算機系, 河北省涿州市),
( 902,關羽, ,1986,中文系, 山西省運城市),
( 903,貂蟬, ,1990,中文系, 山西省忻州縣),
( 904,劉備, ,1990,英語系, 河北省涿州市),
( 905,小喬, ,1991,英語系, 安徽省潛山市),
( 906,趙雲, ,1988,計算機系, 河北省正定市);

  上述INSERT語句執行成功後,向表中插入了6條記錄,分別是學生的學號、姓名、性別、出生年份、院系和出生地址,這時,使用SELECT語句查看stu表中的數據信息

mysql> select * from student;

  從查詢結果可以看出,在當前的數據庫中創建了一個student表,並成功插入了6條記錄,student表的主鍵為id。

(6)創建分數表score,插入10條記錄。

  首先創建分數表score,SQL語句如下所示:

CREATE TABLE score (
    score_id INT(10) PRIMARY KEY AUTO_INCREMENT ,
    stu_id INT(10) NOT NULL ,
    c_name VARCHAR(20) ,
    grade INT(10)
);

  上述SQL語句執行成功後,表示分數表score創建成功,接下來,使用INSERT語句向score表中插入數據,SQL語句如下所示:

INSERT INTO score(stu_id,c_name,grade) VALUES(901, 計算機,98),
(901, 英語, 80),(902, 計算機,65),(902, 中文,88),
(903, 中文,95),(904, 計算機,70),(904, 英語,92),
(905, 英語,94),(906, 計算機,90),(906, 英語,85);

  上述SQL語句執行成功後,向表中插入了10條記錄,分別是學生的學號、姓名、所在學校和報考的學校名稱,這時,使用SELECT語句查看score表中的數據信息:

mysql> select * from score;

  從查詢結果可以看出,score表創建成功,同時向表中插入了10條記錄,score表的主鍵為score_id。

(7)從student表中查詢計算機系和英語系學生的信息。

  該操作屬於單表查詢操作,SQL語句如下所示:該操作屬於單表查詢操作,SQL語句如下所示:

mysql> SELECT * FROM student
    -> WHERE department IN (計算機系,英語系);

  上述SQL語句執行成功後,順利查詢出了計算機系和英語系的學生的信息,上面的SQL語句使用了in操作符,針對本操作其實還有另外一種查詢方式,SQL語句如下所示:

mysql> SELECT * FROM student
    -> WHERE department=計算機系 OR department=英語系;

  從查詢結果可以看出,使用or操作符也得到了正確的查詢結果。

(8)從student表中查詢年齡25~28歲的學生信息。

  該操作屬於單表查詢操作,SQL語句如下所示:

mysql> SELECT stu_id,stu_name,sex,
    ->   2016-birth AS age,department,addr
    -> FROM student
    -> WHERE 2016-birth BETWEEN 25 AND 28;

  上述SQL語句中,2016-birth表示當前年份減去學生出生年份,得到的就是學生的年齡,並使用as操作符為列取別名為age,BETWEEN... AND...操作符用於表示某個範圍之間的數。從查詢結果可以看出,順利得到要求的結果。

  針對本操作也可以不使用BETWEEN... AND...操作符,改為使用關系運算符來對年齡範圍進行限制,SQL語句如下所示:

mysql> SELECT stu_id,stu_name,sex,
    -> 2016-birth AS age,department,addr
    -> FROM student
    -> WHERE 2016-birth>=25 AND 2016-birth<=28;

(9)在student表中統計每個院系各有幾個學生。

  該操作屬於單表查詢操作,使用GROUP BY 分組查詢,通過院系department來分組, SQL語句如下所示:

mysql> SELECT department AS "院系", COUNT(id) AS "人數"
    -> FROM student
    -> GROUP BY department;

  從上述查詢結果可以看出,每個院系的學生均為2個人。

(10)查詢每個院系學生中的最高分。

  該操作屬於多表查詢操作,SQL語句如下所示:

mysql> SELECT MAX(grade),department
    -> FROM score
    -> LEFT JOIN student ON score.stu_id = student.st
    -> GROUP BY department;

  上述SQL語句執行成功後,順利查詢出了每個院系學生的最高分。

(11)查詢學生貂蟬的考試科目(c_name)和考試成績(grade)

  該操作屬於多表查詢操作,SQL語句如下所示:

mysql> SELECT stu_name,c_name,grade
    -> FROM score
    -> LEFT JOIN student ON score.stu_id = student.stu_id
    -> WHERE stu_name= "貂蟬";

(12)查詢計算機成績低於95的學生信息。

  SQL語句如下:

mysql> SELECT stu_name,sex,birth,addr,c_name,grade
    -> FROM student
    -> LEFT JOIN score ON score.stu_id = student.stu_id
    -> WHERE c_name = "計算機" AND grade<95;

(13)查詢同時參加計算機和英語考試的學生的信息。

  SQL語句如下:

mysql> SELECT *
    -> FROM student
    -> WHERE stu_id =ANY(
    -> SELECT stu_id
    -> FROM score
    -> WHERE stu_id IN (SELECT stu_id
    -> FROM score WHERE c_name=  計算機)
    -> AND c_name= 英語 );

(14)從student表和score表中分別查詢出學生的學號,然後合並查詢結果。

  SQL語句如下:

mysql> SELECT stu_id  FROM student
    -> UNION
    -> SELECT stu_id  FROM score;

(15)查詢姓張或者姓王的同學的個人信息、院系和考試科目及成績。

  SQL語句如下:

mysql> SELECT student.stu_id, stu_name,sex,birth,
    ->  addr, c_name,grade
    -> FROM student, score
    -> WHERE (stu_name LIKE  張%  OR stu_name LIKE  王%)
    -> AND (student.stu_id=score.stu_id) ;

(16)查詢山西省的學生的姓名、出生年份、院系、考試科目及成績。

  SQL語句如下:

mysql> SELECT stu_name,birth,department, c_name,grade
    -> FROM student, score
    -> WHERE addr LIKE 山西%
    -> AND student.stu_id=score.stu_id;

Mysql綜合案例