mysql select子查询语句_MySQL select 子查询的使用

### 子查询

>where 这个值是计算出来的

>本质:`在 where 语句中嵌套一个子查询语句`

```sql

/*============== 子查询 ================

什么是子查询?

在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句

嵌套查询可由多个子查询组成,求解的方式是由里及外;

子查询返回的结果一般都是集合,故而建议使用IN关键字;

*/

-- 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列

-- 方法一:使用连接查询

SELECT studentno,r.subjectno,StudentResult

FROM result r

INNER JOIN `subject` sub

ON r.`SubjectNo`=sub.`SubjectNo`

WHERE subjectname = '数据库结构-1'

ORDER BY studentresult DESC;

-- 方法二:使用子查询(执行顺序:由里及外)

SELECT studentno,subjectno,StudentResult

FROM result

WHERE subjectno=(

SELECT subjectno FROM `subject`

WHERE subjectname = '数据库结构-1'

)

ORDER BY studentresult DESC;

-- 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名

-- 方法一:使用连接查询

SELECT s.studentno,studentname

FROM student s

INNER JOIN result r

ON s.`StudentNo` = r.`StudentNo`

INNER JOIN `subject` sub

ON sub.`SubjectNo` = r.`SubjectNo`

WHERE subjectname = '高等数学-2' AND StudentResult>=80

-- 方法二:使用连接查询+子查询

-- 分数不小于80分的学生的学号和姓名

SELECT r.studentno,studentname FROM student s

INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`

WHERE StudentResult>=80

-- 在上面SQL基础上,添加需求:课程为 高等数学-2

SELECT r.studentno,studentname FROM student s

INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`

WHERE StudentResult>=80 AND subjectno=(

SELECT subjectno FROM `subject`

WHERE subjectname = '高等数学-2'

)

-- 方法三:使用子查询

-- 分步写简单sql语句,然后将其嵌套起来

SELECT studentno,studentname FROM student WHERE studentno IN(

SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(

SELECT subjectno FROM `subject` WHERE subjectname = '高等数学-2'

)

)

```

MySQL中的SELECT子查询是指在一个SELECT语句中嵌套另一个SELECT语句,用于从一个表中获取数据,并将其作为外部查询的条件或结果之一。子查询可以嵌套多层,每一层都可以根据需要进行筛选和操作。 以下是MySQLSELECT子查询的一些常见用法和示例: 1. 子查询作为条件: 可以将子查询的结果作为外部查询的条件之一,例如: ``` SELECT column1, column2 FROM table1 WHERE column3 IN (SELECT column4 FROM table2); ``` 这个例中,子查询 `(SELECT column4 FROM table2)` 返回一个结果集,然后外部查询根据这个结果集来筛选出满足条件的行。 2. 子查询作为列: 可以将子查询的结果作为外部查询的列之一,例如: ``` SELECT column1, (SELECT column2 FROM table2 WHERE condition) AS subquery_result FROM table1; ``` 这个例中,子查询 `(SELECT column2 FROM table2 WHERE condition)` 返回一个结果,然后外部查询将这个结果作为一个新的列 `subquery_result` 返回。 3. 子查询作为表: 可以将子查询的结果作为外部查询的临时表来使用,例如: ``` SELECT t1.column1, t2.column2 FROM (SELECT column1 FROM table1 WHERE condition) AS t1 JOIN (SELECT column2 FROM table2 WHERE condition) AS t2 ON t1.column1 = t2.column2; ``` 这个例中,子查询 `(SELECT column1 FROM table1 WHERE condition)` 和 `(SELECT column2 FROM table2 WHERE condition)` 分别作为临时表 `t1` 和 `t2`,然后外部查询通过JOIN操作将它们连接起来。 以上是一些常见的MySQL SELECT子查询的用法和示例,希望对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值