《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 子句之後。