MySQL数据库select语句详细用法三(子查询及其select练习)

SELECT *FROM student2 WHERE age > 
(SELECT age FROM student2 WHERE NAME ='欧阳丹丹')

首先解释一下括号中的代码,意思是在查询student2中的name为欧阳丹丹的人的名字,然后解释一下整个语句的意思:在括号中查询出来的字段中再次进行查询在student2中age大于name为欧阳丹丹的字段的字段。就是子查询

练习:

CREATE DATABASE studb;

INSERT INTO student (sno, sname, ssex, sage, sdept) VALUE (10001, '李勇', '男', 19, 'cs'),
(10002, '刘晨', '女', 20, 'is'),(10003, '王敏', '女', 21, 'ma'),(10004, '张力', '男', 20, 'is'),
(10005, '欧阳丹丹', '女', 22, 'ma');

INSERT INTO course (cno, cname, cpno, ccredit) VALUE (1, '数学', 5, 6),(2,'语文', 4, 5),
(3,'英语', 3, 3),(4, '物理', 1, 3),(5, '化学', 2, 4);
 
INSERT INTO sc(sno, cno, grade) VALUE (10001,    1,    96),
(10001,    2,    95),
(10001,3,    68),
(10001,    4,    89),
(10001,    5,    99),
(10002,    1,    87),
(10002,    2,    97),
(10002,    3,    100),
(10003,    1,    84),
(10004,    2,    95),
(10004,    4,    94),
(10004,    5,    75),
(10005,    2,    94),
(10005,    3,    100),
(10005,    4,    61),
(10005,    5,    56);

#把两个表中sno相同的记录关联到一起进行输出
SELECT * FROM student INNER JOIN sc ON student.sno=sc.sno
WHERE sdept='is'

SELECT * FROM student LEFT JOIN sc ON student.sno=sc.sno
WHERE grade>95

SELECT * FROM student RIGHT JOIN sc ON student.sno=sc.sno
WHERE sdept='is'


SELECT * FROM student,sc where student.sno=sc.sno AND sdept='is'

 

将此代码复制粘贴到数据库中运行即可获得一个数据库和三个表分别是student ,sc, course

这里7,8题较难所以解释一下其他的难度适中。

1.查询全体学生的学号和姓名
2.查询全体学生的姓名、学号、所在系
3.查询全体学生的详细记录
4.查全体学生的姓名及其出生年份
5.查看全体学生的姓名、出生年份和所在系(用小写字母表示所有系名)

1.SELECT sno,sname FROM student ;
2.SELECT sno,sname,sdept FROM student;
3.SELECT * FROM student;
4.SELECT sname,(2024-sage) AS birthday FROM student;
5.SELECT sname,(2024-sage) AS birthday,sdept FROM student;

sno代表着每个学生的编号,cno代表每个课程的编号,cname是课程名称,grade是分数

子查询可以进行多个表之间的查询,它可以将他们连接起来

6.查询每个学员所有科目平均成绩
7.按成绩从高到低排序查询成绩在80——90(闭区间)之间的学员姓名
8.查询选课学分在3以上的年龄最小的两个学员的姓名
9.查询每门课的平均分

6.SELECT sno,AVG(grade) FROM sc GROUP BY sno

7.SELECT sname FROM student WHERE sno IN 
(SELECT sno FROM sc WHERE grade IN 
(SELECT grade FROM sc WHERE grade>=80 AND grade<=90 ORDER BY grade DESC ));

解释:首先在sc表中找到成绩在80到90的成绩,然后再根据这个成绩在sc表中找到学生的编号最终在student表中找到学生的姓名。

8.SELECT sname FROM student WHERE sno IN 
(SELECT sno FROM sc WHERE cno IN 
(SELECT cno FROM course WHERE ccredit>3)) 
ORDER by sage ASC LIMIT 2

解释:首先在course表中找到学分大于三的并且年龄是升序的同学但是题中说是要两个人,所以我们要限制人数使用limit关键字,然后在sc表中根据这个cno查询出学生的编号,最后在student表中查询到姓名。

9.SELECT cno,AVG(grade) FROM sc GROUP BY cno

这里面重要的是处理问题的先后顺序,要选择正确的处理顺序才可以完成的有效率

至此MySQL的基本用法已经完成,请大家多多练习其实并不难的。难度过大的操作也是有的,但是对于工作上的数据库后端操作这些已经够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值