一个简单的多表查询的问题

wu209000 2008-03-16 04:50:32
有一个旅馆房间表(Room)
roomNo price type

旅客表(Guest)
guestNo guestName

一个订单表(Booking)
guestNo(FK) roomNo(FK)

我想查询所有房间的信息,如果该房间有旅客则显示旅客的姓名
例如:
roomNo price type
r001 50 type
r002 30 type

guestNo guestName
gt001 name

guestNo roomNo
gt001 r002

那得到的结果应该是这样
roomNo price type guestName
r001 50 type
r002 30 type name

请问查询语句应该怎么写啊
...全文
71 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wu209000 的回复:]
我想问一下为什么要用 left join on 来联接呢, 跟直接用 where 语句联接有什么区别的.
[/Quote]
我想查询所有房间的信息,如果该房间有旅客则显示旅客的姓名
--------------------------------------------------------------------------
这是根据你的要求来的.所以要用left join

如果你要求房间没有预定就不显示,就直接用inner join.(就是三表直接连接.)
dawugui 2008-03-16
  • 打赏
  • 举报
回复
select room.* , isnull(guest.guestname , '') guestname
from room
left join booking on room.roomno = gooking.roomno
left join guest on booking.guestno = guest.guestno
fcuandy 2008-03-16
  • 打赏
  • 举报
回复
where 会转化为 inner join
inner join 与 left join的区别可以看联机丛书. 即会过滤右表不匹配的的行.
wu209000 2008-03-16
  • 打赏
  • 举报
回复
我想问一下为什么要用 left join on 来联接呢, 跟直接用 where 语句联接有什么区别的.
pt1314917 2008-03-16
  • 打赏
  • 举报
回复

select a.*,isnull(guestname,'')guestname from room a
left join booking c on a.roomno=c.roomno
left join guest b on b.guestno=c.guestno

34,838

社区成员

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

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