作者grence (多想两分钟 = =")
看板Database
标题Re: [SQL ] 初学者的join问题...
时间Sat Jun 23 23:54:02 2007
※ 引述《frank99977 (嘻)》之铭言:
: 现在如果有两个table t1跟t2
: 假设t1里有name,t2里有phone
: 而且也有PK跟FK
: select t1.name, t2.phone
: from t1,t2
: where ....
: 跟
: select t1.name,t2.phone
: from t1 inner join t2
: on ....
: where .....
: 请问一下
: 这两个出来结果会一样吗?
一样,where 就是 inner join
outer join才会有些微的差别,借用此例
select t1.name,t2.phone
from t1 left join t2
on ....
where .....
此时以左边的 t1为主,若 t1有name,t2没phone,会select出
name phone
--
john null
另外,from 2个 table以上会做卡氏积,一般资料库课程都会提到,
刚开始也许无法体会这所代表的意义,练习使用 self join解问题可能会有所体会...
在本版有看过一个很有印象的例子....忘了哪篇 囧>
问题大概是这样,一个储存结构如下:
班级 姓名 成绩
A XXX 90
A YYY 85
A ZZZ 88
A VVV 70
B HHH 74
B MMM 88
B KKK 72
B NNN 79
...
...
找出每班的前三名。答案应该还在版上 囧a..
可能还会觉得奇怪,为什麽有 where还要有 inner join?
我以为是因为....跟卡氏积有关系,on剔除重复的「错误」资料
where 用来从「正确」资料找出你想要的;
这样可以保持SQL 语法的弹性
SELECT *
FROM TABLE1
JOIN TABLE2 ON....
WHERE ....
TABLE1 跟 TABLE2 JOIN 起来会有很多栏位,
只要在第一句把 *换掉就可以轻松换捞别的栏位
只要在 WHERE子句改变条件就可以捞出其它的「正确」资料
在 FROM子句(我是把JOIN当成FROM下的东西,忘了这观念对不对…用的很开心就是XD)
里加入(JOIN)别的 TABLE也是一、两行就搞定的事
有这习惯在改前端应用程式或是後端资料库里的 SQL会愉快不少
感觉不管什麽程式语言都很注重弹性,必需要方便更改才会流行、易用。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.229.212.136