作者frank99977 (嘻)
看板Database
标题Re: [SQL ] 初学者的join问题...
时间Sun Jun 24 01:27:39 2007
那如果照你这样说,如果不是OUTER JOIN
这样用JOIN或者直接把栏位挑出来再加WHERE都可以做了喔?
感谢大大回答这麽详细
※ 引述《grence (多想两分钟 = =")》之铭言:
: 标题: 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
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.218.133