菜鸟继续请教SQL语句。

qq_28859743 2015-06-23 03:18:02
在数据库中有表A,表B和表C。
表A中有name, No两列,分别表示姓名和学号。
表B中有No, address两列,分别表示学号和家庭住址。

如 表A数据为:

name No
李可 17
付军 18
李好 19
李好 20

表B数据为
NO address
17 北京市海淀区
18 广东省广州市
19 长沙市芙蓉区
19 北京是朝阳区

假如我现在想找出所有有家庭住址的学生的信息。应该就是用下面这个SQL语句(注意:有个别学生可能有两个住址):
SELECT name, No FROM A Where No in (select distinct No from B)
这样可以得到学号为17,18,19的姓名name和学号No.

现在又有一个表C,表C中有三列,分别为No, Sex, Height,分别表示学号,性别,身高。数据如下:
No, Sex, Height
17 男 175
19 女 160

注意,并不是所有表A中的学号在表C中都可以找到。
我现在想把所有有家庭住址的学生的姓名name,学号No, 性别Sex, 和身高Height找出来。如果在表C中找不到不存在该学号No的信息的话,让Sex和Height返回空就可以了。
也就是我要得到如下结果:
name No Sex Height
李可 17 男 175
付军 18
李好 19 女 160

请问该怎么样写这个SQL语句呢?
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ginnnnnnnn 2015-06-23
  • 打赏
  • 举报
回复
引用 3 楼 chen357313771 的回复:
SELECT DISTINCT t1.No,t1.NAME,t3.sex,t3.height 
FROM t1 
JOIN t2 ON t1.No = t2.No
LEFT JOIN t3 ON t1.No=t3.No
在left join 一个D就可以啦,你看left join C怎么写 D也参照就行啦
Landa_Tiny_cui 2015-06-23
  • 打赏
  • 举报
回复
后面再关联个D表就好了
SELECT A.name, A.No,C.Sex,C.Heigh,d.tag FROM A left join C on A.No = C.No join d on a.no=d.no
 Where A.No in (select distinct No from B)
[/quote]
引用 4 楼 qq_28859743 的回复:
[quote=引用 1 楼 KanzakiOrange 的回复:]
SELECT A.name, A.No,C.Sex,C.Heigh FROM A left join C on A.No = C.No
 Where A.No in (select distinct No from B)
非常感谢,这样可以了。但我又发现我前面还没描述完整。 还要用到一个表D,假如表D中还有No 和 tag两列。我还想把表D中的tag也读取出来,该怎么操作呢? 也就是我要把A.name, A.No, C.Sex, C.Height, D.tag都读取出来。[/quote]
qq_28859743 2015-06-23
  • 打赏
  • 举报
回复
引用 1 楼 KanzakiOrange 的回复:
SELECT A.name, A.No,C.Sex,C.Heigh FROM A left join C on A.No = C.No
 Where A.No in (select distinct No from B)
非常感谢,这样可以了。但我又发现我前面还没描述完整。 还要用到一个表D,假如表D中还有No 和 tag两列。我还想把表D中的tag也读取出来,该怎么操作呢? 也就是我要把A.name, A.No, C.Sex, C.Height, D.tag都读取出来。
chen357313771 2015-06-23
  • 打赏
  • 举报
回复
SELECT DISTINCT t1.No,t1.NAME,t3.sex,t3.height 
FROM t1 
JOIN t2 ON t1.No = t2.No
LEFT JOIN t3 ON t1.No=t3.No
Landa_Tiny_cui 2015-06-23
  • 打赏
  • 举报
回复
SELECT  a.NAME,
		a.no,
		c.sex,
		c.height
FROM a 
LEFT JOIN c ON a.no=c.no
WHERE exists (SELECT 1 FROM b WHERE a.no=b.no)  --exists的效率比in高
关于exists和in的区别请看链接http://muyue123.blog.sohu.com/146930118.html
Ginnnnnnnn 2015-06-23
  • 打赏
  • 举报
回复
SELECT A.name, A.No,C.Sex,C.Heigh FROM A left join C on A.No = C.No
 Where A.No in (select distinct No from B)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧