mysql使用连接查询连接两个带有注册表的表

时间:2014-08-23 17:37:01

标签: mysql sql join

我想加入2个mysql表。但是加入信息是在一个单独的表中。表示我有3个表名为student,course和reg包含学生的ID和他所做的课程。

student table

    s_id | name
    1    | miki    
    2    | foly    
    3    | oski  



course table    
        c_id | name
        101  | c++    
        102  | java    
        103  | ruby 


reg  table

    s_id | c_id
    1    | 101    
    1    | 102    
    2    | 101 

现在我希望得到所有课程的人。我在没有使用连接查询的情况下编写了sql查询。但我想使用连接查询做同样的事情。这是我的查询

SELECT c.name FROM student as s,course as c,reg as r where r.s_id=s.s_id and r.c_id=c.c_id and s.name='miki';

4 个答案:

答案 0 :(得分:2)

只需加入所有3个表即可获得结果

select c.name
from course c
join reg r on r.c_id = c.c_id
join student s on s.s_id = r.s_id
where s.name = 'miki'

答案 1 :(得分:2)

SELECT s.name,
  c.name
FROM student s
JOIN reg r
ON r.s_id = s.s_id
JOIN course c
ON c.c_id = r.c_id
WHERE s.name = "miki"

答案 2 :(得分:2)

声明

SELECT c.name
FROM student as s,couse as c,reg as r 
where r.s_id=s.s_id and r.c_id=c.c_id and s.name='miki'

也是连接,表名之间的,cross join的捷径,所以你已经使用了连接(实际上你在where中有一些条件,所以RDBMS会将它优化为{ {1}})

但是,当然你可以用不同的语法重写它:

inner join

另一种语法:

SELECT c.name
FROM couse as c
inner join
reg as r 
on (c.c_id = r.c_id and r.s_id=(select s_id from student where name='miki'));

另一个:

SELECT c.name
FROM couse as c
inner join
reg as r 
on (c.c_id = r.c_id)
inner join
student as s
on (r.s_id=s.s_id and s.name='miki');

取决于一堆条件,这4个查询的性能可能不同,但结果会相同

答案 3 :(得分:0)

SELECT c.name, s.name as stud FROM course c
JOIN reg r on c.c_id = r.c_id 
JOIN student s on r.s_id = s.s_id 
WHERE s.name = 'miki'