搜尋
首頁資料庫mysql教程MySQL中如何用WHERE子句聯結多個表

WHERE子句的重要性

利用 WHERE 子句建立連結關係似乎有點奇怪,但實際上,有一個很充分的理由。請記住,在 SELECT 語句中聯結幾個表格時,對應的關係是在運行中建構的。在資料庫表的定義中不存在能指示MySQL如何對錶進行聯結的東西。你必須自己做這件事。在聯結兩個表時,你實際上做的是將第一個表中的每一行與第二個表中的每一行配對。 WHERE 子句作為過濾條件,它只包含那些符合給定條件(這裡是聯結條件)的行。沒有WHERE 子句,第一個表中的每個行將與第二個表中的每個行配對,而不管它們邏輯上是否可以配在一起。

直角笛卡兒積(cartesian product) 由沒有聯結條件的表關係回傳的結果為直角卡兒積。檢索出的行的數目將是第一個表中的行數乘以第二個表中的行數。

輸入:

select vend_name,prod_name,prod_price from vendors,products order by vend_name,prod_name;

分析:對應的笛卡兒積不是我們所想要的。這裡回傳的資料用每個供應商都匹配了每個產品,它包括了

供應商不正確的產品。實際上有的供應商根本就沒有產品。

不要忘了 WHERE 子句 應該保證所有聯結都有 WHERE 子句,否則MySQL會傳回比想要的資料多得多的資料。同理,應該保證 WHERE 子句的正確性。不正確的過濾條件將導致MySQL傳回不正確的資料。

叉聯結 有時我們會聽到返回稱為叉聯結(cross join)的笛卡兒積的聯結類型。

內部聯結

目前為止所用的聯結稱為等值聯結(equijoin),它是基於兩個表之間的相等測試。這種聯結也稱為內聯結。其實,對於這種聯結可以使用稍微不同的語法來明確指定聯結的類型。下面的 SELECT 語句傳回與前面範例完全相同的資料:

輸入:

select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;

分析:此語句中的 SELECT 與前面的 SELECT 語句相同,但 FROM 子句不同。這裡,兩個表之間的關係是 FROM 子句的組成部分,以 INNERJOIN 指定。在使用這種語法時,聯結條件是用特定的 ON 子句而不是 WHERE子句給出。傳遞給 ON 的實際條件與傳遞給 WHERE 的相同。

使用哪一種文法 ANSI SQL規格首選 INNER JOIN 語法。此外,儘管使用 WHERE 子句定義聯結的確比較簡單,但使用明確的聯結語法能夠確保不會忘記聯結條件,有時這樣做也能影響效能。


連結多個資料表

SQL對一個SELECT 語句中可以連結的資料表的數目沒有限制。創建聯結的基本規則也相同。首先列出所有表,然後定義表之間的關係。例如:

輸入:

select prod_name,vend_name,prod_price,quantity from orderitems,products,vendors where products.vend_id = vendors.vend_id and orderitems.prod_id = products.products.prod_id and order_num = 20005;

輸出:

MySQL中如何用WHERE子句聯結多個表

#分析:此範例顯示編號為 20005 的訂單中的物品。訂單物品存放在orderitems 表中。每個產品按其產品ID存儲,它引用 products表中的產品。這些產品透過供應商ID連結到 vendors 表中對應的供應商,供應商ID儲存在每個產品的記錄中。這裡的 FROM 子句列出了3個表,而WHERE 子句定義了這兩個聯結條件,而第三個聯結條件則用來過濾出訂單20005 中的物品。

效能考慮 MySQL在執行時間關聯指定的每個表以處理聯結。這種處理可能是非常耗費資源的,因此應該仔細,不要連結不必要的表。聯結的表越多,性能下降越厲害。

多做實驗 如所見,為執行任一給定的SQL操作,一般存在不只一種方法。很少有絕對正確或絕對錯誤的方法。效能可能會受操作類型、表中資料量、是否存在索引或鍵以及其他一些條件的影響。因此,有必要對不同的選擇機制進行實驗,以找出最適合特定情況的方法。

【相關推薦】

1.什麼是mysql子查詢?如何利用子查詢進行過濾?

2.mysql建立計算欄位使用子查詢

3.mysql中什麼是聯結和關係表?

4.為什麼要使用聯結和如何建立聯結

以上是MySQL中如何用WHERE子句聯結多個表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!