日期:2014-05-16  浏览次数:20873 次

SQL查询语句求助。升级版
有两个表,
一个表放学生的一般信息,比如,姓名(唯一不重复)、年龄、性别、籍贯。

张三 20岁 男 北京
李四 21岁 男 天津
王五 20岁 女 上海

另一个表放学生的选修课程情况(每个学生选修科目和数量都不一定相同),比如姓名,学科,分数
张三 语文 90分
张三 数学 80分
李四 数学 70分
李四 英语 60分
李四 地理 90分
王五 语文 90分
王五 历史 80分

我想查询的结果是:
查询到既选修了语文,又选修了数学,同时籍贯为北京的同学的基本信息(姓名、年龄、性别、籍贯),当如何写?
谢谢!

------解决方案--------------------
SQL code

select 
*--指定显示列
from 
t1 as a
inner join t2 as b on a.姓名=b.姓名 
inner join t2 as c on c.姓名=a.姓名
where t1.籍贯=N'北京' and b.科目='语文' and c.科目='数学'

------解决方案--------------------
SQL code
select *
from t1 as a 
inner join t2 as b on a.姓名=b.姓名
where b.科目='语文' and exists(select 1 from t2 where 姓名=b.姓名 and c.科目='数学')

------解决方案--------------------
SQL code
select a.*
from (一个表放学生的一般信息 a inner join 另一个表放学生的选修课程情况 b1 on a.姓名=b1.姓名)
    inner join 另一个表放学生的选修课程情况 b2 on a.姓名=b2.姓名
where b1.学科='语文' and b2.学科='数学文'
and 籍贯='北京'