點兩下工作室 回首頁
使用者登入 記住我
search_adv.png, 3.8kB
關於我們服務項目模組下載佈景下載技術文件互動討論
藏經閣 :: 模組開發相關技術教學

關於資料表的JOIN用法


差點忘記答應昇鴻要把JOIN的語法PO上來,目前工作室JOIN最多資料表的,我相信就是我啦!(不知道應該開心?還是難過?)
我收集了各項說明,如有失誤之處,還請不吝指教!
範例基本上沒有整理啦!有問題再提出來!

轉載自 http://chensh.loxa.edu.tw/php/B_9.php 感謝分享!


註:第2種寫法比較簡單

select a.*,b.* from T1 as a left join T2 as b on a.A=b.C



三個資料表結合:



SELECT A.`g_name` , A.`g_area` , C.`date1` FROM ".$xoopsDB->prefix("tour_dir")." AS A

LEFT JOIN ".$xoopsDB->prefix("tour_orderm")." AS B ON A.group_sn = B.customer_sn

LEFT JOIN ".$xoopsDB->prefix("tour_orders")." AS C ON B.serno = C.serno

WHERE A.`g_area` LIKE '$g_area'

ORDER BY C.`date1` ASC



//刪除的用法

delete A,B,C,D,E,F from xoops2016a_tour_dir as A

LEFT JOIN xoops2016a_tour_orderm as B ON A.group_sn=B.customer_sn

LEFT JOIN xoops2016a_tour_orders as C ON B.serno=C.serno

LEFT JOIN xoops2016a_tour_accent as D ON A.group_sn=D.up_mark_sn

LEFT JOIN xoops2016a_tour_schedule as E ON A.group_sn=E.group_sn

LEFT JOIN xoops2016a_tour_ws_price as F ON A.group_sn=F.ws_price_group_sn

where A.group_sn=53



//更新的用法

update Table1 t1

join Table2 t2 on t1.ID=t2.t1ID

join Table3 t3 on t2.ID=t3.t2ID

set t1.Value=12345

where t3.ID=54321



CROSS JOIN

SELECT employee.realname, salary.amount FROM employee, salary

SELECT employee.realname, salary.amount FROM employee JOIN salary

SELECT employee.realname, salary.amount FROM employee CROSS JOIN salary

在這個例子中,employee 原有 4 筆資料,而 salary 有 5 筆資料,在 JOIN 之後,結果將是兩者資料筆數的乘積:20。就等於是將兩個資料表中,所有可能的組合全部列出來一樣,其結果在實務上不見得有意義。這種結合可被視為兩個資料表的「笛卡兒乘積(Cartesian product)」。





INNER JOIN

兩個表格在結合時,指定彼此之間的結合條件,如:

SELECT employee.realname, salary.amount FROM employee, salary

WHERE employee.employee_id = salary.employee_id



SELECT employee.realname, salary.amount FROM employee

JOIN salary ON employee.employee_id = salary.employee_id



SELECT employee.realname, salary.amount FROM employee

INNER JOIN salary ON employee.employee_id = salary.employee_id



如此一來,只有符合結合條件(同時存在於彼此之間)的資料,才會被 JOIN 在一起。這是最常用的 JOIN 型式。





OUTER JOIN

兩個表格在進行 INNER JOIN 時,只有彼此相符合的資料列才會被考慮到,除此之外,就完全被忽略了。相較於 INNER JOIN 的排他性,OUTER JOIN 則是「寬容」多了。

在進行 LEFT OUTER JOIN 時,除了彼此相符合的資料列以外,左方的資料表中不相符的資料列也會被強迫輸出,如:

SELECT employee.realname, salary.amount FROM employee

LEFT OUTER JOIN salary ON employee.employee_id = salary.employee_id

SELECT employee.realname, salary.amount FROM employee

LEFT JOIN salary ON employee.employee_id = salary.employee_id

像 Chuang 這種僅出現在 empolyee 裡,不存在於 saraly 中的資料列,在搭配 NULL 值之後,也能被列在結果之中了。善用這種特殊結果,我們可以順利找到只存在前一資料表,而不存在於後一資料表的資料列。





NATURAL JOIN

NATURAL 又代表什麼?加上這個關鍵字之後,兩個表格在進行 JOIN 時,不必言明彼此的結合關係,兩者之間同名的欄位會被自動結合在一起。

所以,以下兩段語法的執行結果相同:

SELECT employee.realname, salary.amount FROM employee

INNER JOIN salary ON employee.employee_id = salary.employee_id

SELECT employee.realname, salary.amount FROM employee

NATURAL JOIN salary



以下兩段語法的執行結果也是相同的:

SELECT employee.realname, salary.amount FROM employee

LEFT JOIN salary ON employee.employee_id = salary.employee_id

SELECT employee.realname, salary.amount FROM employee

NATURAL LEFT JOIN salary



SELECT A.`group_sn` , A.`g_no` , B.`ws_price_count` , B.`ws_price_title`,D.`date1`

FROM ".$xoopsDB->prefix("tour_dir ")." AS A

LEFT JOIN ".$xoopsDB->prefix("tour_ws_price ")." AS B ON A.`group_sn` = B.`ws_price_group_sn`

LEFT JOIN ".$xoopsDB->prefix("tour_orderm ")." AS C ON A.`group_sn` = C.`customer_sn`

LEFT JOIN ".$xoopsDB->prefix("tour_orders ")." AS D ON C.`serno` = D.`serno`

WHERE A.`g_name` LIKE '%{$tour_name}%'

AND TO_DAYS(D.`date1`)- TO_DAYS(NOW()) > 3

AND A.`g_del` != '1'

AND B.`ws_price_title` LIKE '成人%'

ORDER BY B.`ws_price_count` ASC , A.`g_no` ASC



轉載自 http://chensh.loxa.edu.tw/php/B_9.php 感謝分享!
<< jquery驗證表單
跟蹤網址
  • 文章地址: http://ck2tw.net/modules/article/view.article.php?c3/33
  • 跟蹤地址: http://ck2tw.net/modules/article/trackback.php?33
評分
10987654321
API: RSS | RDF | ATOM
Copyright© kimozi & 點2下工作室
網友個人意見,不代表本站立場,對於發言內容,由發表者自負責任。
發表者 樹狀展開
tad
發表日期: 09月15日 22:10  更新: 09月15日 22:10
管理員
註冊日期: 10月08日
來自:
發表總數: 1334
 評論: 關於資料表的JOIN用法
非常棒的文章~
值得大家仔細研讀
lijohn
發表日期: 09月30日 15:59  更新: 09月30日 15:59
工作室成員
註冊日期: 10月10日
來自:
發表總數: 4
 評論: 關於資料表的JOIN用法
真的很不錯的文章,解決ㄌ我的疑惑!
全部展開 全部收合

ugm:

最近幫客戶架的網站都可以收到信:

  1. pack-bags.com
  2. tobs.org.tw

我本身也是使用gmail,因此實在不了解原因出在那裡

目前有9人線上 (1人在瀏覽藏經閣)
會員: 0 人
訪客: 9 人
詳情: 更多…







目前訂閱人數: 124 人
電子報:
Email :
訂閱: 取消:
CK2 模組開發網電子報第 3 期
CK2 模組開發網電子報第 2 期
CK2 模組開發網電子報第 1 期