来自多个表的SQL查询

来自多个表的SQL查询,sql,postgresql,select,join,Sql,Postgresql,Select,Join,我正在学习SQL的初学者课程,并一直在尝试一些查询。有一件事我真的不明白,那就是如何“正确地”查询多个表;比较两个或多个表中的值 比如说,, 我有一个名为“学生”的表格,里面有一个人的用户名、姓名、出生日期和专业(只是代码。例如,CS代表“计算机科学”)。我选择将用户名作为主键 我还有另一个名为Major的表,其中包含作为主键的主代码(如CS)和整个主名称。例如,“CS”=“计算机科学”,NS=“神经科学”等 现在,假设我想找到一个专业的名字,给定一个学生的用户名。以下是此查询的伪代码: 1)

我正在学习SQL的初学者课程,并一直在尝试一些查询。有一件事我真的不明白,那就是如何“正确地”查询多个表;比较两个或多个表中的值

比如说,, 我有一个名为“学生”的表格,里面有一个人的用户名、姓名、出生日期和专业(只是代码。例如,CS代表“计算机科学”)。我选择将用户名作为主键

我还有另一个名为Major的表,其中包含作为主键的主代码(如CS)和整个主名称。例如,“CS”=“计算机科学”,NS=“神经科学”等

现在,假设我想找到一个专业的名字,给定一个学生的用户名。以下是此查询的伪代码:

1) 在学生表中:提供用户名,检查该特定人员的专业

select majorcode from Student where username='aUserName';
正确地这样做可以得到主要代码

2) 在专业表中:查找代码提供的专业的标题

select majorTitle from Major where majorcode='theMajorCode';
综合起来,我写:

select majorTitle from Major where majorcode=(select majorcode from Student where username='aUserName');
但是,现在假设我想要专业的标题(来自专业表)以及学生的姓名(来自学生表)

有什么建议吗

您需要加入。类似这样的情况-请注意,学生中任何行的majorcode不在Major中,反之亦然,将不包括在内。如果这不是您想要的,请查看外部联接

当然,您可以向该查询添加WHERE子句。使用别名(“s”代表学生,“m”代表专业)参考表格以避免歧义。

您需要一个联接。类似这样的情况-请注意,学生中任何行的majorcode不在Major中,反之亦然,将不包括在内。如果这不是您想要的,请查看外部联接

当然,您可以向该查询添加WHERE子句。使用别名(“s”代表学生,“m”代表专业)参考表格以避免歧义。

您需要一个联接。类似这样的情况-请注意,学生中任何行的majorcode不在Major中,反之亦然,将不包括在内。如果这不是您想要的,请查看外部联接

当然,您可以向该查询添加WHERE子句。使用别名(“s”代表学生,“m”代表专业)参考表格以避免歧义。

您需要一个联接。类似这样的情况-请注意,学生中任何行的majorcode不在Major中,反之亦然,将不包括在内。如果这不是您想要的,请查看外部联接

当然,您可以向该查询添加WHERE子句。使用别名(“s”代表学生,“m”代表专业)参考表格以避免歧义

SELECT majorTitle, username
FROM Student s
JOIN Major m ON s.majorcode = m.majorcode