导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

SQL查询语句的小问题,各位大虾帮忙!来者有分!

cox5 2003-12-10 09:36:36
我在开发一个邮件系统,有这样一个问题:数据库中有两张表1》邮件表Email(EmailID,Subject,RecvName,SendName)和2》附件表Email_Attach(EmailID,FileName,Length,AttachID),两张表通过EmailID关联,现在要找出用户'a'收到的所有邮件,同时显示附件的文件名称,一个邮件可以有多个附件,也可以没有附件,我这样写:Select Email.EmailID,Subject,FileName from Email,Email_Attach where Email.EmailID = Email_Attach.EmailID and RecvName = 'a' ,这句话只能找出有附件的邮件,而没有附件的邮件找不出,对于没有附件的邮件FileName项显示为空(""或null),该如何解决?望各位高手帮忙!来者有分
...全文
1 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
victorycyz 2003-12-11
Select a.EmailID,a.Subject,b.FileName
from Email a left join Email_Attach b on a.EmailID = b.EmailID
where a.RecvName = 'a'
回复
cgsun 2003-12-10
联接可分为以下几类:

内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。

外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL JOIN 或 FULL OUTER JOIN。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

交叉联接。
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

回复
capcom 2003-12-10
转贴至: lvltt(未完成@与星俱进@Whowhowho)

declare @a table(a int,b int)
declare @b table(a int,b int)
insert @a values(1,1)
insert @a values(2,2)
insert @b values(1,1)
insert @b values(3,3)

--左:
select * from @a Aa left join @b Bb on Aa.a=Bb.a
--右:
select * from @a Aa right join @b Bb on Aa.a=Bb.a
--内
select * from @a Aa join @b Bb on Aa.a=Bb.a
--外
select * from @a Aa full join @b Bb on Aa.a=Bb.a
--完全
select * from @a,@b


约束是怕用户录入不规则的错误数据,主建可以提高索引效率

连接无非是这几个

--内连接和where相同
inner join
--左向外连接,返回左边表所有符合条件的
left join
--右向外连接,返回右边表所有符合条件的
right join
--完整外部连接,左向外连接和右向外连接的合集
full join
--交叉连接,也称笛卡儿积。返回左表中的每一行与右表中所有行的组合
cross join
回复
DigJim 2003-12-10
Select Email.EmailID,Subject,FileName
from Email
left join Email_Attach on Email.EmailID=Email_Attach.EmailID
where RecvName = 'a'
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告