PHP作為一種流行的伺服器端腳本語言,可以匯集許多不同的資料類型和資料庫。尤其是在web應用程式的開發中,它經常需要存取資料庫來檢索和操作資料。本文將重點介紹PHP資料庫查詢語句。
一、什麼是資料庫查詢語句
在對資料庫進行操作的過程中,我們常常需要從資料庫中取得資料。這時,我們需要使用查詢語句。資料庫查詢(SQL Query)是從資料庫中檢索資料的指令集。 SQL是Structured Query Language的縮寫,其是一種在關聯式資料管理系統(RDBMS)中廣泛使用的語言,用於存取和操作資料庫。
在PHP中,我們可以使用不同的設施來存取各種類型的資料庫。 PHP支援MySQL、PostgreSQL、Oracle等資料庫,每種資料庫在查詢語句方面都有些微差別,但基本上都使用SQL語言實作。
二、查詢語句的結構
一個簡單的查詢語句通常包含三個部分:SELECT、FROM和WHERE。在 SELECT 中,指定要檢索的欄位;在 FROM 中,指定表格的名稱;在 WHERE 子句中,指定檢索條件。
下面是基本的查詢語句結構:
SELECT column1, column2, ...
FROM table
WHERE condition;
#column 表示需要檢索的列名,多個列名之間以逗號隔開。通常使用*(星號)代替列名,表示選擇全部列。
table 標示需要操作的表格的名稱。
condition 是一個可選項,它規定了檢索記錄的條件和限制,使用邏輯運算子(如AND,OR等)進行連接。
例如,下面範例是檢索“users”表中username、email欄位為“admin”,且password欄位為“123”的記錄:
SELECT username, email, password
FROM users
WHERE username = 'admin' AND password = '123';
但是,對於一些比較複雜的查詢需求,僅使用SELECT、FROM、WHERE可能無法滿足要求,這時需要使用JOIN語句、子查詢等高階查詢語句。這將在後面的章節中介紹。
三、查詢結果的處理
查詢語句傳回的結果通常是一個包含多個行的表,每一行表示對應的記錄。對於PHP應用程式開發者,一個表格的條目是一個數組,每個單元格的內容就是該數組中的一個元素。查詢結果的處理包括三個部分:
使用PHP中的mysqli_query和PDO::query可以執行查詢語句並傳回結果集。例如:
$query = "SELECT username, email, password FROM users WHERE username = 'admin' AND password = '123'";
$result = mysqli_query($connection, $query);
使用mysqli_fetch_assoc、PDO::fetch等函數可以從結果集中提取資料。例如:
while ($row = mysqli_fetch_assoc($result)) {
echo "username: " . $row["username"] . " email: " . $row["email"] . " password: " . $row["password"];
}
在PHP中,當使用完結果集時,應該使用mysqli_free_result或PDOStatement::closeCursor函數釋放結果集,避免資源的浪費。例如:
mysqli_free_result($result);
四、進階查詢技術
JOIN語句可以把兩個或多個表連接在一起,產生一個新的、大的表。常見的JOIN語句有內連接、外連接(左連接和右連接)、自連接等。
內連接(INNER JOIN):只傳回兩個表中符合條件的記錄,即在連接兩個表時,只有兩個表中都存在相同的值才會被檢索出來。
例如:
SELECT orders.OrderID, customers.CustomerName, orders.OrderDate
FROM orders
INNER JOIN customers
ON orders.CustomerID=customers.CustomerID;
#這個查詢將傳回訂單表(orders)中所有與顧客表(customers)相關聯的訂單,其中內連接的符號是JOIN或INNER JOIN,而ON關鍵字指定用於連結的主鍵/外鍵的條件。
子查詢是指在另一個SQL語句中嵌入一個SQL查詢。通常,子查詢被用來限制主查詢的結果集。子查詢可以嵌套多個查詢,這種方式稱為巢狀查詢。
例如:
SELECT AVG(DISTINCT 價格) FROM Products
WHERE ProductName IN (SELECT ProductName FROM Orders WHERE CustomerID=1);
#這個查詢將會傳回ID為1的客戶訂購的所有產品的平均價格,其實就是用子查詢清單查詢了客戶1購買的所有商品,之後再在外面套上個AVG函數,求平均值。
UNION語句結合兩個或多個SELECT語句的結果集(結果必須具有相同的字段,所以有的時候會使用別名來宣告) ,去除了結果集中的重複行。 UNION語句格式如下:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
例如:
SELECT ProductName FROM Products
UNION
SELECT ProductName FROM Suppliers
ORDER BY ProductName;
這個查詢將傳回所有產品名稱,包括從供應商(Suppliers)和產品(Products )查詢得到的結果,去掉重複後依名稱排序。
總結
本文旨在介紹PHP資料庫查詢語句,重點介紹了查詢語句的結構和查詢結果的處理方法,以及常用的高級查詢技術,包括JOIN、子查詢和UNION語句。合理使用這些進階查詢技術,可以更有效率地從資料庫中取得所需資料。
以上是重點介紹PHP資料庫查詢語句的詳細內容。更多資訊請關注PHP中文網其他相關文章!