我想加入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';
答案 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'