一 、導入hellodb.sql生成數據庫后實現以下操作
# mysql -uroot -h172.16.23.23 -pcento.123 < hellodb.sql
mysql> SHOW DATABASES; 可以列出已存在的數據庫 +--------------------+ | Database | +--------------------+ | information_schema | | NODE1 | | RJYY | | hellodb | | mysql | | performance_schema | | test | +--------------------+ mysql> USE hellodb; mysql> SHOW TABLES; +-------------------+ | Tables_in_hellodb | +-------------------+ | classes | | coc | | courses | | scores | | students | | teachers | | toc | +-------------------+
1、 在students表中,查詢年齡大于25歲,且為男性的同學的名字和年齡;
mysql> SELECT Name,Age FROM students WHERE Age >25 AND Gender='M'; +--------------+-----+ | Name | Age | +--------------+-----+ | Xie Yanke | 53 | | Ding Dian | 32 | | Yu Yutong | 26 | | Shi Qing | 46 | | Tian Boguang | 33 | | Xu Xian | 27 | | Sun Dasheng | 100 | +--------------+-----+
2、 以ClassID為分組依據,顯示每組的平均年齡;
mysql> SELECT avg(age),ClassID FROM students WHERE ClassID IS NOT NULL GROUP BY ClassID ; +----------+---------+ | avg(age) | ClassID | +----------+---------+ | 20.5000 | 1 | | 36.0000 | 2 | | 20.2500 | 3 | | 24.7500 | 4 | | 46.0000 | 5 | | 20.7500 | 6 | | 19.6667 | 7 | +----------+---------+
3、 顯示第2題中平均年齡大于30的分組及平均年齡;
mysql> SELECT avg(Age),ClassID FROM students WHERE ClassID IS NOT NULL GROUP BY ClassID HAVING avg(Age) > 30; +----------+---------+ | avg(Age) | ClassID | +----------+---------+ | 36.0000 | 2 | | 46.0000 | 5 | +----------+---------+
4、 顯示以L開頭的名字的同學的信息;
mysql> SELECT * FROM students WHERE Name LIKE 'L%'; +-------+-------------+-----+--------+---------+-----------+ | StuID | Name | Age | Gender | ClassID | TeacherID | +-------+-------------+-----+--------+---------+-----------+ | 8 | Lin Daiyu | 17 | F | 7 | NULL | | 14 | Lu Wushuang | 17 | F | 3 | NULL | | 17 | Lin Chong | 25 | M | 4 | NULL | +-------+-------------+-----+--------+---------+-----------+
5、 顯示TeacherID非空的同學的相關信息;
mysql> SELECT * FROM students WHERE TeacherID IS NOT NULL; +-------+-------------+-----+--------+---------+-----------+ | StuID | Name | Age | Gender | ClassID | TeacherID | +-------+-------------+-----+--------+---------+-----------+ | 1 | Shi Zhongyu | 22 | M | 2 | 3 | | 2 | Shi Potian | 22 | M | 1 | 7 | | 3 | Xie Yanke | 53 | M | 2 | 16 | | 4 | Ding Dian | 32 | M | 4 | 4 | | 5 | Yu Yutong | 26 | M | 3 | 1 | +-------+-------------+-----+--------+---------+-----------+
6、 以年齡排序后,顯示年齡最大的前10位同學的信息;
mysql> SELECT * FROM students ORDER BY Age DESC LIMIT 10; +-------+--------------+-----+--------+---------+-----------+ | StuID | Name | Age | Gender | ClassID | TeacherID | +-------+--------------+-----+--------+---------+-----------+ | 25 | Sun Dasheng | 100 | M | NULL | NULL | | 3 | Xie Yanke | 53 | M | 2 | 16 | | 6 | Shi Qing | 46 | M | 5 | NULL | | 13 | Tian Boguang | 33 | M | 2 | NULL | | 4 | Ding Dian | 32 | M | 4 | 4 | | 24 | Xu Xian | 27 | M | NULL | NULL | | 5 | Yu Yutong | 26 | M | 3 | 1 | | 17 | Lin Chong | 25 | M | 4 | NULL | | 23 | Ma Chao | 23 | M | 4 | NULL | | 18 | Hua Rong | 23 | M | 7 | NULL | +-------+--------------+-----+--------+---------+-----------+
7、 查詢年齡大于等于20歲,小于等于25歲的同學的信息;用三種方法;
mysql> SELECT * FROM students WHERE Age >=20 AND Age <=25; mysql> SELECT * FROM students WHERE Age BETWEEN 20 AND 25; mysql> SELECT * FROM students WHERE Age IN (20,21,22,23,24,25); +-------+---------------+-----+--------+---------+-----------+ | StuID | Name | Age | Gender | ClassID | TeacherID | +-------+---------------+-----+--------+---------+-----------+ | 1 | Shi Zhongyu | 22 | M | 2 | 3 | | 2 | Shi Potian | 22 | M | 1 | 7 | | 9 | Ren Yingying | 20 | F | 6 | NULL | | 11 | Yuan Chengzhi | 23 | M | 6 | NULL | | 16 | Xu Zhu | 21 | M | 1 | NULL | | 17 | Lin Chong | 25 | M | 4 | NULL | | 18 | Hua Rong | 23 | M | 7 | NULL | | 21 | Huang Yueying | 22 | F | 6 | NULL | | 22 | Xiao Qiao | 20 | F | 1 | NULL | | 23 | Ma Chao | 23 | M | 4 | NULL | +-------+---------------+-----+--------+---------+-----------+
二、 導入hellodb.sql,以下操作在students表上執行
1、以ClassID分組,顯示每班的同學的人數;
mysql> SELECT count(StuID),ClassID FROM students GROUP BY ClassID ; +--------------+---------+ | count(StuID) | ClassID | +--------------+---------+ | 2 | NULL | | 4 | 1 | | 3 | 2 | | 4 | 3 | | 4 | 4 | | 1 | 5 | | 4 | 6 | | 3 | 7 | +--------------+---------+
2、以Gender分組,顯示其年齡之和;
mysql> SELECT sum(Age),Gender FROM students GROUP BY Gender ; +----------+--------+ | sum(Age) | Gender | +----------+--------+ | 190 | F | | 495 | M | +----------+--------+
3、以ClassID分組,顯示其平均年齡大于25的班級;
mysql> SELECT avg(Age),ClassID FROM students GROUP BY ClassID HAVING avg(Age) > 25; +----------+---------+ | avg(Age) | ClassID | +----------+---------+ | 63.5000 | NULL | | 36.0000 | 2 | | 46.0000 | 5 | +----------+---------+
4、以Gender分組,顯示各組中年齡大于25的學員的年齡之和;
mysql> SELECT sum(Age),Gender FROM students WHERE Age > 25 GROUP BY Gender ; +----------+--------+ | sum(Age) | Gender | +----------+--------+ | 317 | M | +----------+--------+
三、 導入hellodb.sql,完成以下題目:
1、顯示前5位同學的姓名、課程及成績;
mysql> SELECT s.Name,courses.Course,scores.Score FROM (select * from students limit 5) AS s LEFT JOIN scores ON scores.StuID = s.StuID LEFT JOIN courses ON scores.CourseID =courses.CourseID;
mysql> SELECT s.name,sc.course,sc.score FROM (SELECT * FROM students LIMIT 5 ) AS s LEFT JOIN (SELECT scores.stuid,courses.course,scores.score FROM scores LEFT JOIN courses ON courses.CourseID=scores.CourseID)AS sc ON s.StuId=sc.StuID; +-------------+----------------+-------+ | name | course | score | +-------------+----------------+-------+ | Shi Zhongyu | Kuihua Baodian | 77 | | Shi Zhongyu | Weituo Zhang | 93 | | Shi Potian | Kuihua Baodian | 47 | | Shi Potian | Daiyu Zanghua | 97 | | Xie Yanke | Kuihua Baodian | 88 | | Xie Yanke | Weituo Zhang | 75 | | Ding Dian | Daiyu Zanghua | 71 | | Ding Dian | Kuihua Baodian | 89 | | Yu Yutong | Hamo Gong | 39 | | Yu Yutong | Dagou Bangfa | 63 | +-------------+----------------+-------+
2、顯示其成績高于80的同學的名稱及課程;
mysql> SELECT Name,Course,Score FROM (students LEFT JOIN scores ON students.StuID=scores.StuID ) LEFT JOIN courses ON courses.CourseID=scores.CourseID WHERE Score > 80; +-------------+----------------+-------+ | Name | Course | Score | +-------------+----------------+-------+ | Shi Zhongyu | Weituo Zhang | 93 | | Shi Potian | Daiyu Zanghua | 97 | | Xie Yanke | Kuihua Baodian | 88 | | Ding Dian | Kuihua Baodian | 89 | | Shi Qing | Hamo Gong | 96 | | Xi Ren | Hamo Gong | 86 | | Xi Ren | Dagou Bangfa | 83 | | Lin Daiyu | Jinshe Jianfa | 93 | +-------------+----------------+-------+
3、求前8位同學每位同學自己兩門課的平均成績,并按降序排列;
mysql> SELECT Name,avg(Score) FROM (SELECT * FROM students LIMIT 8) AS rj LEFT JOIN scores AS jr ON rj.StuID=jr.StuID GROUP BY Name ORDER BY avg(Score) DESC; +-------------+------------+ | Name | avg(Score) | +-------------+------------+ | Shi Qing | 96.0000 | | Shi Zhongyu | 85.0000 | | Xi Ren | 84.5000 | | Xie Yanke | 81.5000 | | Ding Dian | 80.0000 | | Lin Daiyu | 75.0000 | | Shi Potian | 72.0000 | | Yu Yutong | 51.0000 | +-------------+------------+
4、顯示每門課程課程名稱及學習了這門課的同學的個數;
mysql> SELECT courses.Course,count(rj.StuID) FROM scores AS rj LEFT JOIN courses ON courses.CourseID=rj.CourseID GROUP BY rj.CourseID; +----------------+-----------------+ | Course | count(rj.StuID) | +----------------+-----------------+ | Hamo Gong | 3 | | Kuihua Baodian | 4 | | Jinshe Jianfa | 1 | | Taiji Quan | 1 | | Daiyu Zanghua | 2 | | Weituo Zhang | 2 | | Dagou Bangfa | 2 | +----------------+-----------------+
四、 思考題
1、如何顯示其年齡大于平均年齡的同學的名字?
mysql> SELECT Name,Age FROM students WHERE Age > (SELECT avg(Age) FROM students); +--------------+-----+ | Name | Age | +--------------+-----+ | Xie Yanke | 53 | | Ding Dian | 32 | | Shi Qing | 46 | | Tian Boguang | 33 | | Sun Dasheng | 100 | +--------------+-----+
2、如何顯示其學習的課程為第1、2,4或第7門課的同學的名字?
mysql> SELECT rj.Name,scores.CourseID FROM students AS rj LEFT JOIN scores ON scores.StuID = rj.StuID WHERE scores.CourseID IN (1,2,4,7); +-------------+----------+ | Name | CourseID | +-------------+----------+ | Shi Zhongyu | 2 | | Shi Potian | 2 | | Xie Yanke | 2 | | Ding Dian | 2 | | Yu Yutong | 1 | | Yu Yutong | 7 | | Shi Qing | 1 | | Xi Ren | 1 | | Xi Ren | 7 | | Lin Daiyu | 4 | +-------------+----------+
3、如何顯示其成員數最少為3個的班級的同學中年齡大于同班同學平均年齡的同學?
mysql> SELECT students.name,students.age,tp.classid,tp.vg FROM students,(SELECT classid,COUNT(stuid) AS cs,AVG(age) AS vg FROM students GROUP BY classid HAVING cs >=3) AS tp WHERE students.age>tp.vg AND students.classid=tp.classid; +---------------+-----+---------+---------+ | name | age | classid | vg | +---------------+-----+---------+---------+ | Shi Potian | 22 | 1 | 20.5000 | | Xie Yanke | 53 | 2 | 36.0000 | | Ding Dian | 32 | 4 | 24.7500 | | Yu Yutong | 26 | 3 | 20.2500 | | Yuan Chengzhi | 23 | 6 | 20.7500 | | Xu Zhu | 21 | 1 | 20.5000 | | Lin Chong | 25 | 4 | 24.7500 | | Hua Rong | 23 | 7 | 19.6667 | | Huang Yueying | 22 | 6 | 20.7500 | +---------------+-----+---------+---------+
4、統計各班級中年齡大于全校同學平均年齡的同學。
mysql> SELECT rj.Name,rj.Age FROM students AS rj LEFT JOIN classes AS jr ON rj.ClassID=jr.ClassID WHERE rj.ClassID=jr.ClassID AND Age > (SELECT AVG(Age) FROM students); +--------------+-----+ | Name | Age | +--------------+-----+ | Xie Yanke | 53 | | Ding Dian | 32 | | Shi Qing | 46 | | Tian Boguang | 33 | +--------------+-----+
原創文章,作者:renjin,如若轉載,請注明出處:http://www.www58058.com/68765