抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

[toc]

一 、导入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 |
+--------------+-----+

评论