(-1)寫在前面
文章參考http://blog.sina.com.cn/willcaty。
針對其中的一道練習題想出兩種其他的答案,希望網友給出更多回答。
(0) 基礎數據
student表
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 901 | 張老大 | 男 | 1985 | 計算機系 | 北京市海淀區 |
| 904 | 李四 | 男 | 1990 | 英語系 | 遼寧省阜新市 |
| 905 | 王五 | 女 | 1991 | 英語系 | 福建省廈門市 |
| 906 | 王六 | 男 | 1988 | 計算機系 | 湖南省衡陽市 |
+-----+--------+------+-------+------------+--------------+
score表
+----+--------+-----------+-------+
| Id | Stu_id | C_Name | Grade |
+----+--------+-----------+-------+
| 23 | 901 | 計算機 | 98 |
| 24 | 901 | 英語 | 80 |
| 25 | 902 | 計算機 | 65 |
| 26 | 902 | 中文 | 88 |
| 27 | 903 | 中文 | 95 |
| 28 | 904 | 計算機 | 70 |
| 29 | 904 | 英語 | 92 |
| 30 | 905 | 英語 | 94 |
| 31 | 906 | 計算機 | 90 |
| 32 | 906 | 英語 | 85 |
+----+--------+-----------+-------+
(1)查詢同時參加計算機和英語考試的學生的信息
方式一:
SELECT a.* FROM student a ,score b ,score c
WHERE a.id=b.stu_id
AND b.c_name='計算機'
AND a.id=c.stu_id
AND c.c_name='英語';
方式二:
SELECT * FROM student
WHERE id =ANY
( SELECT stu_id FROM score
WHERE stu_id IN (
SELECT stu_id FROM
score WHERE c_name= '計算機')
AND c_name= '英語' );
方式三:
select * from student where id in(
select s.stu_id from (select stu_id from score where c_name = '計算機') s
(select stu_id from score where c_name='英語') as t where s.stu_id=t.stu_id)
方式四:
select * from student where id in (
select stu_id from score where c_name ='計算機' and stu_id in(
select stu_id from score where c_name ='計算機'));
(2) 正確答案
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 901 | 張老大 | 男 | 1985 | 計算機系 | 北京市海淀區 |
| 904 | 李四 | 男 | 1990 | 英語系 | 遼寧省阜新市 |
| 906 | 王六 | 男 | 1988 | 計算機系 | 湖南省衡陽市 |
+-----+--------+------+-------+------------+--------------+