数据库基本查询


欢迎来到鸿鹄会让我们一起学习吧!
我的邮箱2779372950@qq.com

一、在studentsdb数据库中使用SELECT语句进行基本查询。

(1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。
SELECT c.`学号`,c.`姓名`,c.`出生日期` FROM student_info c;
(2)查询student_info表学号为 0002的学生的姓名和家庭住址。
SELECT c.`姓名`,c.`家族住址` FROM student_info c
 where c.`学号`='0002';
(3)查询student_info表所有出生日期在95年以后的女同学的姓名和出生日期。
SELECT c.`姓名`,c.`出生日期` FROM student_info c
 WHERE c.`出生日期` > '1995-01-01'AND c.`性别`='女';

二、使用select语句进行条件查询。

(1)在grade表中查询分数在70-80范围内的学生的学号、课程编号和成绩。
SELECT * FROM grade d
SELECT d.`学号`,d.`课程编号`,d.`分数` FROM grade d 
 WHERE d.`分数` BETWEEN 70 AND 80;
(2)在grade表中查询课程编号为0002的学生的平均成绩。
SELECT AVG(d.`分数`) AS 分数 FROM grade d
 WHERE d.`课程编号`=0002;
(3)在grade表中查询选修课程编号为0003的人数和该课程有成绩的人数。
SELECT COUNT(d.`分数`) FROM grade d
 WHERE d.`课程编号`=0003;
(4)查询student_info的姓名和出生日期,查询结果按出生日期从大到小排序。
SELECT c.`姓名`,c.`出生日期` FROM student_info c 
 ORDER BY c.`出生日期` DESC;
(5)查询所有姓名“张”的学生的学号和姓名。
SELECT c.`学号`,c.`姓名` FROM student_info c
 WHERE c.`姓名` LIKE '张%';

三、对student_info表,查询学生的学号、姓名、性别、出生日期及家庭住址,查询结果先按照性别的由小到大排序,性别相同的再按学号由大到小排序。

SELECT c.`学号`,c.`姓名`,c.`性别`,c.`出生日期`,c.`家族住址` FROM student_info c
  ORDER BY c.`性别`,c.`学号`DESC;

四、使用GROUP BY子句查询grade表中各个学生的平均成绩。

SELECT AVG(d.`分数`) AS 平均成绩 FROM grade d;

五使用UNION运算符针student_info表中姓“刘”的学生的学号、姓名与姓“张”的学生的学号、姓名返回在一个表中。

SELECT c.`学号`,c.`姓名` FROM  student_info c WHERE c.`姓名` LIKE '刘%'
UNION
SELECT c.`学号`,c.`姓名` FROM  student_info c WHERE c.`姓名` LIKE '张%';

六嵌套查询

(1)在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期。
SELECT c.`姓名`,c.`出生日期` FROM student_info c
 WHERE c.`性别`=(SELECT c.`性别` FROM student_info c WHERE c.`姓名`='刘东阳');
(2)使用IN子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。
SELECT c.`学号`,c.`姓名`,c.`性别` FROM student_info c
 WHERE c.`学号` IN   ( SELECT d.`学号` FROM grade d WHERE  d.`课程编号` IN('0002','0005'));
(3)使用ANY子查询查找学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和分数。
SELECT d.`学号`,d.`课程编号`,d.`分数` FROM grade d
 WHERE d.`学号`='0001' AND  d.`分数` > ANY(SELECT d.`分数` FROM grade d WHERE d.`学号`=0002);
(4)使用ALL子查询查找学号为0001的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数。
SELECT d.`学号`,d.`课程编号`,d.`分数` FROM grade d
 WHERE d.`学号`='0001' AND  d.`分数` > ALL(SELECT d.`分数` FROM grade d WHERE d.`学号`=0002);

七、连接查询

(1)查询分数在80-90范围内的学生的学号、姓名、分数。
SELECT c.`学号`,c.`姓名`,d.`分数` FROM student_info c, grade d
 WHERE c.`学号` = d.`学号` AND d.`分数` BETWEEN 80 AND 90;
(2)使用INNER JOIN连接方式查询学习“数据库原理及应用”课程的学生学号、姓名、分数。
# SELECT e.`课程名称` FROM curriculum e
SELECT c.`学号`,c.`姓名`,d.`分数` FROM student_info c INNER JOIN grade d
 ON c.`学号`=d.`学号` INNER JOIN curriculum e ON d.`课程编号`=e.`课程编号` 
 WHERE e.`课程名称`="数据库原理及应用";
(3)查询每个学生所选课程的最高成绩,要求列出学号、姓名、最高成绩。
SELECT c.`学号`,c.`姓名`,max(d.`分数`)AS 最高成绩 FROM student_info c,grade d
 WHERE c.`学号`=d.`学号` GROUP BY c.`学号`;
(4)使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。
SELECT c.`学号`,c.`姓名`,SUM(d.`分数`)总成绩 FROM student_info c 
 LEFT OUTER JOIN grade d ON c.`学号`=d.`学号`GROUP BY c.`学号`;
(5)为grade表添加数据行:学号为0004、课程编号为0006、分数为76。
使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。
INSERT INTO grade VALUES ('0004','0006','76') 
SELECT d.`课程编号`,e.`课程名称`,COUNT(*)选修人数 FROM grade d
 RIGHT OUTER JOIN curriculum e ON d.`课程编号`=e.`课程编号` GROUP BY d.`课程编号`;

文章作者: 崔蓬勃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 崔蓬勃 !
评论
  目录