我试图显示学生的名字,姓氏,SID,主要和次要。以及每个学生的课程,CID和会议时间。桥表虽然让我感到困惑。 Idk是否做联盟或多表加入或什么。请帮忙!SQL UNION/JOIN?
回答
SELECT *
FROM tblStudent AS s
LEFT OUTER JOIN tblRegistration AS r
ON s.SID = r.SID
LEFT OUTER JOIN tblCourse AS c
ON c.CID = r.CID
不应该是一个内部连接,如果有的话? – Kendall 2012-04-19 21:58:28
@肯代尔是否至少有一门课程需要学习?如果是,它可以是'INNER JOIN'。如果没有课程相关的学生可以使用'LEFT JOIN',否则这些学生不会在结果集中。 – 2012-04-19 22:00:13
甲骨文语法:
SELECT stu.FirstName,
stu.LastName,
stu.Major,
stu.Minor,
reg.SID,
cou.CID,
cou.MeetingTime
FROM
tblStudent as stu,
tblRegistration as reg,
tblCourse as cou
WHERE
stu.SID(+) = reg.SID
and reg.CID = cou.CID
由于这是功课,而不是回答你的问题直接,我会提供你一些提示。
你应该真的考虑审查UNION
和JOINs
。
当您希望在同一数据集中返回多个查询时使用UNION。它们必须在每个字段中具有相似的数据类型,并且在每个查询中具有相同数量的字段。所以对于这个特定的问题,使用UNION
是否合理?可能不会,因为你希望学生和他们的课程排成一行。
对于此类查询,您需要一个JOIN
。有一个真正有用的JOIN视觉解释可以在线获得。我建议在学习SQL时保持它的方便。
A Visual Explanation of SQL Joins
由于需要学生的数据和他们的课程信息,您可以得到的唯一方式是使用tblRegistration
。如果你使用这个表格,在你的查询中你应该得到你正在查找的结果。
编辑:
由于评论者指出,第二个图是UNION
不是JOIN
,我在这里不同意就是一个例子来证明这一点。
如上所述的A UNION
将两个查询组合成单个结果集。这是一个带UNION演示一个sqlfiddle:
完全外连接指定从左边或右边表中的行不符合联接条件包括在结果集,输出列与其他表对应的设置为NULL
。这是通常由INNER JOIN
返回的所有行的补充。这是一个带FULL OUTER JOIN演示一个sqlfiddle:
正如你可以看到这两个查询的产品是不一样的,所以图中的FULL OUTER JOIN
不是UNION
。
- 1. SQL - 在T-SQL
- 2. LINQ:No SQL to SQL
- 3. SQL,Microsoft SQl
- 4. SQL:使用SQL
- 5. SQL Server模式SQL
- 6. SQL表到SQL表
- 7. SQL语句 - SQL Matrix
- 8. SQL - 如何从SQL
- 9. SQL 2000到SQL 2008
- 10. SQL连接和SQL
- 11. PL SQL动态SQL
- 12. SQL Express vs SQL Plus
- 13. SQL
- 14. SQL
- 15. SQL
- 16. SQL -
- 17. SQL
- 18. 动态SQL INSERT VALUES SQL 2008
- 19. SQL在SQL Server Management Studio中
- 20. SQL命令,嵌套的SQL
- 21. MS SQL不是SQL Server吗?
- 22. SQL Server 2008,SQL Server 2005
- 23. SQL服务器动态SQL
- 24. SQL注入$ db-> query($ sql)?
- 25. SQL Server的非SQL API?
- 26. 递归sql查询T-SQL
- 27. Linq to Sql -Sql生成
- 28. SQL和加入SQL Server 2005
- 29. SQL和SQL没有在SparkSQL
- 30. SQL Server T-SQL TRIM END
你有没有试图使用这两种方法来创建查询 - 你发现了什么? – 2012-04-19 21:27:20
Yesss :)但这是最后一个问题哈哈。如果这对任何东西都有效 我尝试过创建一个UNION,但它说我需要在目标列表中有相同数量的表达式。 – Kendall 2012-04-19 21:27:39
我们被允许接受外界的帮助。 – Kendall 2012-04-19 21:31:00