1. 程式人生 > 實用技巧 >《MySQL必知必會》檢索資料,排序檢索資料(select ,* ,distinct ,limit , . , order by ,desc)

《MySQL必知必會》檢索資料,排序檢索資料(select ,* ,distinct ,limit , . , order by ,desc)

《MySQL必知必會》檢索資料,排序檢索資料

1、檢索資料

1.1 select 語句

為了使用SELECT檢索表資料,必須至少給出兩條資訊一想選擇什
麼,以及從什麼地方選擇。

1.2 檢索單個列

select prod_name
from products;


(此時,檢索得到的資料並未進行排序。)

MySQL執行多條SQL語句,結束每條SQL語句時,必須加上“ ; ”分隔,儘管這是單條SQL語句,你加上也可以執行,但其他部分的DBMS卻可能需要單條SQL語句也需要加上“ ; ”才可以執行,為了程式碼的可複用性,培養這一習慣十分重要。

MySQL4.1版本後,SQL語句是不區分大小寫的。大小寫這取決於個人習慣。

在處理SQL語句時,其中所有空格都被忽略。SQL語句可以在一行上給出,也可以分成許多行。多數SQL開發人員認為將SQL語句分成多行更容易閱讀和除錯。

1.3 檢索多個列

要想從一個表中檢索多個列,使用相同的SELECT語句。唯-的不同是必須在SELECT關鍵字後給出多個列名,列名之間必須以逗號分隔(注意:最後一個列名不需要加逗號)。

select prod_name , prod_price
from products;

1.4檢索所有列

select *
from products;

所有列用(*)萬用字元來表示。

給出的列的順序按照表結構中的列順序展示資料。

使用萬用字元一般, 除非你確實需要表中的每個列,否則最好別使用*萬用字元

。雖然使用萬用字元可能會使你自己省事,不用明確列出所需列,但檢索不需要的列通常會降低檢索和應用程式的效能

通過*萬用字元可以檢索到未知列名的列

1.5檢索不同的行

使用distinct關鍵字指示MySQL只返回不同的值,排除掉相同的值。

distinct關鍵字必須放在列名的前面

select distinct prod_price
from products;

不能部分使用distinct distinct關鍵字應用於所有列不僅是前置它的列。如果給出select distinct vend id,prodprice,除非指定的兩個列都不同,否則所有行都將被檢索出來。

1.6 限制顯示結果

select prod_name , prod_price
from products limit 5;

使用關鍵字 limit , 限制只顯示 5 行資料。

select prod_name , prod_price
from products limit 5 ,5;

可以限制開始行 和 顯示行數。上圖表示顯示從第6行資料開始,顯示5 行資料(0表示第1行資料,5即表示第6行資料)。

在行數不夠時,LIMIT中指定要檢索的行數為檢索的最大行數。如果沒有足 夠的行(例如,給出LIMIT10, 5,但只有13行,則返回最後3行資料),MySQL將只返回它能返回的那麼多行。

MySQL 5 後,還有一種 limit 替代語法 , limit 3 offset 4 等同於 limit 4 , 3 ;意為從第5行開始取3行資料。

                   **需要注意的是 LIMIT 是MySQL 特有的關鍵字,Oracle 沒有的,考慮到可複用性,應減少使用。**
1.7 使用完全限定的表名(庫名)

使用 “ . ” 指定

select products.prod_name 
from mydb.products;

效果等同於

select prod_name 
from products;

products表在 mydb 資料庫中 ,prod_name 列在 products 表中。這樣使用可以明確指定資料庫,表。遇上不同庫中相同表名,列名時,可以派上用場。

2、排序檢索資料

2.1 排序資料

使用關鍵字 order by

select vend_name
from vendors
order by vend_name;

vend_name 以字母順序排序資料。

2.2 按多個列排序

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

按價格排序,出現相同價格時,再按名稱字母順序排序。如果價格不相同,則不會按名稱字母順序排序。

2.3 指定排序方向

select prod_name , prod_price
from products
order by prod_price desc;

使用關鍵字 DESC 表示 降序排序方向,預設是升序排序方向(ASC)一般不需要指定。

select prod_name , prod_price
from products
order by prod_price desc,prod_name;	

desc 並未指定到 prod_name 列,則prod_name 列還是按照升序排序顯示資料結果。

同理, 在多個列上降序排序如果想在多個列上進行降序排序,必須對每個列指定DESC關鍵字

在字典( dictionary )排序順序中,A被視為與a相同,這是MySQL(和大多數資料庫管理系統)的預設行為。但是,許多資料庫管理員能夠在需要時改變這種行為(如果你的資料庫包含大量外語字元,:可能必須這樣做)。這裡,關鍵的問題是,如果確實需要改變這種排序順序,用簡單的ORDER BY子句做不到。你必須請求資料庫管理員的幫助。

order by 可以和 limit 組合使用

select prod_name , prod_price
from products
order by prod_price desc
limit 3;


如果使用order by 和 limit 組合,limit 必須在 order by 子句之後