---
tags: database
---
# 12/06
1
查詢住址相同的學生姓名及住址;
```
SELECT s_name ,s_address
FROM students as s
Where s_address IN
(
SELECT s.s_address
FROM students as s
GROUP BY s_address
HAVING COUNT(s.s_address)>=2
)
```
2
查詢姓「陳」的學生,男生、女生人數
```
SELECT s.s_sex,COUNT(s.s_no) as 男生女生人數
FROM students as s
WHERE s.s_name LIKE '%陳%'
GROUP BY s.s_sex
```
3
查詢課程名稱為「鋼琴課」,且分數低於 90 的學生姓名和分數;
```
SELECT s.s_name as 姓名,r.r_result as 分數
FROM students as s,results as r,classes as c
WHERE c.c_name='鋼琴課' and r.r_result<90 and s.s_no=r.s_no and r.c_no=c.c_no
```
4
查詢所有學生的選課情況,顯示學號、姓名及課程名稱;
```
SELECT s.s_no as 學號,s.s_name as 姓名,c.c_name as 課程名稱
FROM students as s,results as r,classes as c
WHERE s.s_no=r.s_no and r.c_no=c.c_no
```
5
. 查詢各科成績前三名的同學及科目、成績,不考慮成績並列情況;
```
SELECT s.s_no,s.s_name,a.c_no,a.r_result,a.num
FROM
(
SELECT s_no,c_no,r_result,RANK() OVER (PARTITION BY c_no ORDER BY r_result DESC) AS num
FROM results
)a
,students as s
,classes as c
where a.NUM < 4 and s.s_no = a.s_no and c.c_no = a.c_no
```
6
查詢至少有一門課與學號為“S080400011”的學生所學相同的學號和姓名;
```
SELECT DISTINCT s.s_no as 學號,s.s_name as 姓名
FROM students as s,results as r,classes as c
WHERE s.s_no=r.s_no and r.c_no=c.c_no and r.c_no IN
(
SELECT c.c_no
FROM results as r,classes as c ,students as s
WHERE r.s_no='S080400011' and s.s_no=r.s_no and r.c_no=c.c_no
) and r.s_no<>'S080400011'
```