1. 程式人生 > >【MySQL】4、Select查詢語句

【MySQL】4、Select查詢語句

4.Select查詢語句

4.1、select語句

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
 
// 建立連線
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("連線失敗: " . mysqli_connect_error());
}
 
$sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { //判斷結果集是否有資料 // 輸出資料 while($row = mysqli_fetch_array($result)) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } }
else { echo "0 結果"; } mysqli_close($conn); ?>

上面這個例子在 $sql 變數中存放由 mysqli_query() 函式返回的資料。接下來,我們使用 mysqli_fetch_array() 函式以陣列的形式從記錄集返回第一行。每個隨後對 mysqli_fetch_array() 函式的呼叫都會返回記錄集中的下一行。 while loop 語句會迴圈記錄集中的所有記錄。為了輸出每行的值,我們使用了 PHP 的 $result 變數 ($result['FirstName'] 和 $result['LastName'])。

4.2、MySQL Where 條件子句

如需選取匹配指定條件的資料,請向 SELECT 語句新增 WHERE 子句。

SELECT * FROM user WHERE id = 1

下面的運算子可與 WHERE 子句一起使用:

運算子說明
= 等於
!= 不等於
> 大於
< 小於
>= 大於或等於
<= 小於或等於
BETWEEN 介於一個包含範圍內
LIKE 搜尋匹配的模式

註釋:SQL 語句對大小寫不敏感。WHERE 與 where 等效。

4.3、Order By 排序關鍵詞

ORDER BY 關鍵詞用於對記錄集中的資料進行排序。

SELECT column_name(s) FROM table_name ORDER BY column_name

升序或降序的排序

如果您使用 order by 關鍵詞,記錄集的排序順序預設是升序(1 在 9 之前,"a" 在 "p" 之前)。

請使用 DESC 關鍵詞來設定降序排序(9 在 1 之前,"p" 在 "a" 之前):

SELECT column_name(s) FROM table_name ORDER BY column_name DESC

根據兩列進行排序

可以根據多個列進行排序。當按照多個列進行排序時,只有第一列相同時才使用第二列:

SELECT column_name(s) FROM table_name ORDER BY column_name1, column_name2

4.4、limit 限定查詢語句

limit 關鍵詞用於對指定記錄進行查詢,常用於分頁顯示記錄。

select * from guestbook limit  4 , 10 //獲取從第4條後的10條資訊
select * from guestbook order by id desc limit  5       //按降序獲取前五條資訊

這條語句表示在guestbook表裡獲取從第5條開始到第14條結束的記錄。

4.5、like關鍵字的模糊查詢

1、使用萬用字元“%”的 where 子句

萬用字元 % 表示 0 個或多個、任意長度和型別的字元,包括中文漢字。 示例 :查詢所有包含“好”字或“高”字的文章(這時可以配合 or 運算子來使用)
select * from tb_file where content like '%好%' or content like '%高%';

2、使用萬用字元“_”的 where 子句

萬用字元“_”表示匹配任意的單個字元。 示例 :查詢使用者名稱只包含 5 個字元,其中後 4 個字元為 soft 的使用者。程式碼如下:
select * from tb_user where regname like '_soft'; 
注意: 使用 MySQL 做模糊查詢要注意編碼問題。 如果編碼不統一, 那麼查詢時就容易查不到資料,或返回的資料不匹配。所以在安裝 MySQL 時,要保持和系統編碼的統一。常用的編碼格式有 gb2312、ISO-8859-1、utf8 和 gbk 等。

4.6、常規多表查詢(兩個表具有相同的公共欄位)

selete * form a,b where a.c=b.c      //c為兩個表中相同的欄位,返回a表和b表條件匹配的所有記錄
select * from a left join b where a.c=b.c        //效果同第一句,返回a表和b表條件匹配的所有記錄
注意: 1、第二條語句中,如果用on代替where,則會返回a表所有的記錄和b表條件匹配的記錄。 2、on篩選後再用where子句篩選,和只用where篩選子句的效果相同。 3、兩(多)個表查詢,1(條記錄)-1(條記錄)的記錄查詢出來將顯示一條。1(條記錄)-N(條記錄)的記錄查詢將顯示N條,1部分重複顯示。

left join左連線顯示兩個表的資料詳解

(兩個表具有相同的公共欄位) left join關鍵字會從左表 那裡返回所有的記錄,即使在右表 中沒有匹配的行。同時返回右表匹配的記錄。 語法:
select 左表名.欄位名,右表名.欄位名 from 左表名 left join 右表名  on 左表名.欄位名=右表名.欄位名
例如:

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York

"Orders" 表:

Id_OOrderNoId_P
3 22456 1
4 24562 1
您可以使用下面的 select語句:
select Persons.LastName, Persons.FirstName, Orders.OrderNo from Persons left join Orders ON Persons.Id_P=Orders.Id_P order by Persons.LastName

結果集:

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Bush George

注意:在使用left jion時,on和where條件的區別如下:

1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉(....left jion...where... 查詢多個表的結果 =  .... from....where... 查詢多個表的結果相同)。

4.7、GROUP BY 語句

GROUP BY 語句用於結合聚合函式(sum、avg、count、max、min),根據一個或多個列對結果集進行分組統計。 合計函式 (比如 SUM) 常常需要新增 GROUP BY 語句。

舉例:我們擁有下面這個 "Orders" 表:

O_IdOrderDateOrderPriceCustomer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望查詢每個客戶的總金額(總訂單)。我們想要使用 GROUP BY 語句對客戶進行組合。

我們使用下列 SQL 語句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer                       //根據客戶名字進行統計分組,可同時並存多種分組方式。用逗號隔開

結果集類似這樣:

CustomerSUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
注意:在查詢條件中使用聚合函式,不能使用where子句連線,需要用having子句連線。
//having在group by 之後使用
SELECT * from website GROUP BY name HAVING SUM(count) > 200;

4.8、IN子句

IN 操作符指定查詢的條件,允許您在 WHERE 子句中規定多個值。
//下面語句查詢1、3年級的學生:
SELECT * FROM student WHERE grade IN ('1','2');