mysql实际综合案例_Mysql综合案例
Mysql綜合案例
考核要點(diǎn):創(chuàng)建數(shù)據(jù)表、單表查詢、多表查詢
已知,有一個(gè)學(xué)生表student和一個(gè)分?jǐn)?shù)表score,請(qǐng)按要求對(duì)這兩個(gè)表進(jìn)行操作。student表和score分?jǐn)?shù)表的表結(jié)構(gòu)分別如表1-1和表1-2所示。
表1-1student表結(jié)構(gòu)
字段名數(shù)據(jù)類(lèi)型主鍵外鍵非空唯一自增字段描述
stu_idINT(10)是否是是否學(xué)號(hào)
stu_nameVARCHAR(20)否否是否否姓名
sexVARCHAR(2)否否否否否性別
birthYEAR否否否否否出生年份
departmentVARCHAR(20)否否是否否院系
addrVARCHAR(50)否否否否否家庭住址
表1-2score表結(jié)構(gòu)
字段名數(shù)據(jù)類(lèi)型主鍵外鍵非空唯一自增字段描述
score_idINT(10)是否是是是編號(hào)
stu_idINT(10)否否是否否學(xué)號(hào)
c_nameVARCHAR(20)否否否否否課程名
gradeINT(10)否否否否否分?jǐn)?shù)
表1-1和表1-2中分別對(duì)student表和score表中字段的數(shù)據(jù)類(lèi)型、主鍵、外鍵、非空、唯一約束、自增和字段描述做了說(shuō)明,其中這兩個(gè)表中都有stu_id字段,用于表示學(xué)號(hào),該字段使student表和score表實(shí)現(xiàn)了關(guān)聯(lián)。
(1)啟動(dòng)MySQL服務(wù)器。
如果MySQL服務(wù)器是未啟動(dòng)的狀態(tài),可以在cmd窗口中,通過(guò)命令來(lái)啟動(dòng)服務(wù)器,具體命令如下所示:
net start mysql
(2)登錄MySQL服務(wù)器。
在cmd窗口中登錄MySQL服務(wù)器,用戶名為root,密碼為root,具體命令如下所示:
mysql -uroot -proot
(3)創(chuàng)建數(shù)據(jù)庫(kù)。
創(chuàng)建一個(gè)名為my_db的數(shù)據(jù)庫(kù),具體SQL語(yǔ)句如下:
create database my_db;
(4)切換當(dāng)前數(shù)據(jù)庫(kù)。
將名為my_db的數(shù)據(jù)庫(kù)切換為當(dāng)前數(shù)據(jù)庫(kù),具體SQL語(yǔ)句如下:
use my_db;
(5)創(chuàng)建學(xué)生表student,插入6條記錄。
創(chuàng)建學(xué)生表student,SQL語(yǔ)句如下所示:
CREATE TABLEstudent (
stu_idINT(10) PRIMARY KEY,
stu_nameVARCHAR(20)NOT NULL,
sexVARCHAR(2),
birthYEAR,
departmentVARCHAR(20),
addrVARCHAR(50)
);
上述SQL語(yǔ)句執(zhí)行成功后,表示學(xué)生表student創(chuàng)建成功,這時(shí),使用INSERT語(yǔ)句向表中插入數(shù)據(jù),SQL語(yǔ)句如下所示:
INSERT INTO student VALUES(901,'張飛', '男',1985,'計(jì)算機(jī)系', '河北省涿州市'),
(902,'關(guān)羽', '男',1986,'中文系', '山西省運(yùn)城市'),
(903,'貂蟬', '女',1990,'中文系', '山西省忻州縣'),
(904,'劉備', '男',1990,'英語(yǔ)系', '河北省涿州市'),
(905,'小喬', '女',1991,'英語(yǔ)系', '安徽省潛山市'),
(906,'趙云', '男',1988,'計(jì)算機(jī)系', '河北省正定市');
上述INSERT語(yǔ)句執(zhí)行成功后,向表中插入了6條記錄,分別是學(xué)生的學(xué)號(hào)、姓名、性別、出生年份、院系和出生地址,這時(shí),使用SELECT語(yǔ)句查看stu表中的數(shù)據(jù)信息
mysql> select * from student;
從查詢結(jié)果可以看出,在當(dāng)前的數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)student表,并成功插入了6條記錄,student表的主鍵為id。
(6)創(chuàng)建分?jǐn)?shù)表score,插入10條記錄。
首先創(chuàng)建分?jǐn)?shù)表score,SQL語(yǔ)句如下所示:
CREATE TABLEscore (
score_idINT(10) PRIMARY KEYAUTO_INCREMENT ,
stu_idINT(10) NOT NULL,
c_nameVARCHAR(20) ,
gradeINT(10)
);
上述SQL語(yǔ)句執(zhí)行成功后,表示分?jǐn)?shù)表score創(chuàng)建成功,接下來(lái),使用INSERT語(yǔ)句向score表中插入數(shù)據(jù),SQL語(yǔ)句如下所示:
INSERT INTO score(stu_id,c_name,grade) VALUES(901, '計(jì)算機(jī)',98),
(901, '英語(yǔ)', 80),(902, '計(jì)算機(jī)',65),(902, '中文',88),
(903, '中文',95),(904, '計(jì)算機(jī)',70),(904, '英語(yǔ)',92),
(905, '英語(yǔ)',94),(906, '計(jì)算機(jī)',90),(906, '英語(yǔ)',85);
上述SQL語(yǔ)句執(zhí)行成功后,向表中插入了10條記錄,分別是學(xué)生的學(xué)號(hào)、姓名、所在學(xué)校和報(bào)考的學(xué)校名稱,這時(shí),使用SELECT語(yǔ)句查看score表中的數(shù)據(jù)信息:
mysql> select * from score;
從查詢結(jié)果可以看出,score表創(chuàng)建成功,同時(shí)向表中插入了10條記錄,score表的主鍵為score_id。
(7)從student表中查詢計(jì)算機(jī)系和英語(yǔ)系學(xué)生的信息。
該操作屬于單表查詢操作,SQL語(yǔ)句如下所示:該操作屬于單表查詢操作,SQL語(yǔ)句如下所示:
mysql> SELECT * FROMstudent-> WHERE department IN ('計(jì)算機(jī)系','英語(yǔ)系');
上述SQL語(yǔ)句執(zhí)行成功后,順利查詢出了計(jì)算機(jī)系和英語(yǔ)系的學(xué)生的信息,上面的SQL語(yǔ)句使用了in操作符,針對(duì)本操作其實(shí)還有另外一種查詢方式,SQL語(yǔ)句如下所示:
mysql> SELECT * FROMstudent-> WHERE department='計(jì)算機(jī)系' OR department='英語(yǔ)系';
從查詢結(jié)果可以看出,使用or操作符也得到了正確的查詢結(jié)果。
(8)從student表中查詢年齡25~28歲的學(xué)生信息。
該操作屬于單表查詢操作,SQL語(yǔ)句如下所示:
mysql> SELECTstu_id,stu_name,sex,-> 2016-birth ASage,department,addr-> FROMstudent-> WHERE 2016-birth BETWEEN 25 AND 28;
上述SQL語(yǔ)句中,2016-birth表示當(dāng)前年份減去學(xué)生出生年份,得到的就是學(xué)生的年齡,并使用as操作符為列取別名為age,BETWEEN... AND...操作符用于表示某個(gè)范圍之間的數(shù)。從查詢結(jié)果可以看出,順利得到要求的結(jié)果。
針對(duì)本操作也可以不使用BETWEEN... AND...操作符,改為使用關(guān)系運(yùn)算符來(lái)對(duì)年齡范圍進(jìn)行限制,SQL語(yǔ)句如下所示:
mysql> SELECTstu_id,stu_name,sex,-> 2016-birth ASage,department,addr-> FROMstudent-> WHERE 2016-birth>=25 AND 2016-birth<=28;
(9)在student表中統(tǒng)計(jì)每個(gè)院系各有幾個(gè)學(xué)生。
該操作屬于單表查詢操作,使用GROUP BY 分組查詢,通過(guò)院系department來(lái)分組, SQL語(yǔ)句如下所示:
mysql> SELECT department AS "院系", COUNT(id) AS"人數(shù)"-> FROMstudent-> GROUP BY department;
從上述查詢結(jié)果可以看出,每個(gè)院系的學(xué)生均為2個(gè)人。
(10)查詢每個(gè)院系學(xué)生中的最高分。
該操作屬于多表查詢操作,SQL語(yǔ)句如下所示:
mysql> SELECT MAX(grade),department-> FROMscore-> LEFT JOIN student ON score.stu_id =student.st-> GROUP BY department;
上述SQL語(yǔ)句執(zhí)行成功后,順利查詢出了每個(gè)院系學(xué)生的最高分。
(11)查詢學(xué)生貂蟬的考試科目(c_name)和考試成績(jī)(grade)
該操作屬于多表查詢操作,SQL語(yǔ)句如下所示:
mysql> SELECTstu_name,c_name,grade-> FROMscore-> LEFT JOIN student ON score.stu_id =student.stu_id-> WHERE stu_name= "貂蟬";
(12)查詢計(jì)算機(jī)成績(jī)低于95的學(xué)生信息。
SQL語(yǔ)句如下:
mysql> SELECTstu_name,sex,birth,addr,c_name,grade-> FROMstudent-> LEFT JOIN score ON score.stu_id =student.stu_id-> WHERE c_name = "計(jì)算機(jī)" AND grade<95;
(13)查詢同時(shí)參加計(jì)算機(jī)和英語(yǔ)考試的學(xué)生的信息。
SQL語(yǔ)句如下:
mysql> SELECT *
-> FROMstudent-> WHERE stu_id =ANY(-> SELECTstu_id-> FROMscore-> WHERE stu_id IN (SELECTstu_id-> FROM score WHERE c_name= '計(jì)算機(jī)')-> AND c_name= '英語(yǔ)' );
(14)從student表和score表中分別查詢出學(xué)生的學(xué)號(hào),然后合并查詢結(jié)果。
SQL語(yǔ)句如下:
mysql> SELECT stu_id FROMstudent-> UNION
-> SELECT stu_id FROM score;
(15)查詢姓張或者姓王的同學(xué)的個(gè)人信息、院系和考試科目及成績(jī)。
SQL語(yǔ)句如下:
mysql> SELECTstudent.stu_id, stu_name,sex,birth,->addr, c_name,grade-> FROMstudent, score-> WHERE (stu_name LIKE '張%' OR stu_name LIKE '王%')-> AND (student.stu_id=score.stu_id) ;
(16)查詢山西省的學(xué)生的姓名、出生年份、院系、考試科目及成績(jī)。
SQL語(yǔ)句如下:
mysql> SELECTstu_name,birth,department, c_name,grade-> FROMstudent, score-> WHERE addr LIKE '山西%'
-> AND student.stu_id=score.stu_id;
總結(jié)
以上是生活随笔為你收集整理的mysql实际综合案例_Mysql综合案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql natural join用法
- 下一篇: python 取名字_python 获取