2016-05-25 119 views
0

我有表courseID,studentName和其他表是courseID,courseName用户将根据学生名称搜索学生表中的课程名称 什么是SQL语法我应该使用吗?加入或内部连接在MySQL中,我可以将ID FK与另一个表中的varchar进行比较

+0

'JOIN'只是'INNER JOIN'的缩写,因此没有区别。那么查询应该做什么?用户输入学生姓名和课程名称,并根据学生是否参加课程获得“是”或“否”。或者用户输入学生姓名并获得所有课程?还是别的什么?如果你想从两个表中选择数据,一个连接将是要走的路。但是,如果仅显示一个表中的数据,则带有exists子句的查询可能更合适。 –

+0

用户输入学生姓名并获取所有课程 – uglyduck

回答

0

你可以试试这个:

select a.studentName,b.courseName 
from tbl_name a 
inner join tbl_name b 
on a.courseID = b.courseID 
+0

此代码有错误,因为您有别名表,但未在所选列中指定该名称。 –

+0

是的,我忘了添加别名。谢谢。 –

0

如果使用JOIN和指定约束(如on a.courseId = b.courseId)它是完全一样的,如果你使用INNER JOIN,所以要根据你的表结构你应该这样做:

select * from studentTable 
inner join courseTable 
on studentTable.courseID = courseTable.courseID 
where studentTable.studentName = 'Jack Black'; 

在MySQL中,你可以也写不出

select * from studentTable, courseTable 
where studentTable.courseID = courseTable.courseID 
and studentName = 'Jack Black'; 

,因为它在内部将以相同的方式查询。

检查出确切的语法加入这里:http://dev.mysql.com/doc/refman/5.7/en/join.html

+1

尽管它仍然(在它们被多余的20年后)* posible *使用逗号分隔的连接,我们不应该再推荐它们用于初学者。 –

+0

尽管如此,人们应该知道使用这种语法的可能性是存在的,因为它更常见。 –

0

,当你正在寻找一个连接的结果,如用他们所有的课程选择以及所有学生的名字你加入。例如: -

select s.studentname, c.coursename 
from course c 
join student_takes_course s on s.courseid = c.courseid; 

或(如表的顺序并不重要):

select s.studentname, c.coursename 
from student_takes_course s 
join course c on s.courseid = c.courseid; 

JOIN只是短暂的INNER JOIN。你也可以使用。

但是,如果您对加入的结果不感兴趣,那么不加入的好习惯。例如当你只是想从课程表中显示课程名称时,如你的例子。然后,您可以使用INEXISTS一般:

select coursename 
from course 
where courseid in 
(
    select courseid 
    from student_takes_course 
    where studentname = 'Joe' 
); 

select c.coursename 
from course c 
where exists 
(
    select * 
    from student_takes_course s 
    where s.studentname = 'Joe' 
    and s.courseid = c.courseid 
); 

(我喜欢IN条款在EXISTS条款对他们的简单和可能的情况下使用它们。)

相关问题