SQL(mysql)必知必會(2)檢索數據

以下討論的DBMS全是mysql

檢索數據

以world中city表爲例

檢索單個列select name from city

仔細對比會發現結果是無序的,跟原始表單中的順序並不是互相對應的。

 

結束SQL的語句,多條SQL語句必須以分號(;)分隔,MySQL如同多數DBMS一樣,並不需要加上;,但是加上也沒有壞處。

但是如果使用的是mysql的命令行必須要加上;來結束SQL語句。

 

SQL語句和大小寫:SQL並不區分大小寫,但是區分大小寫更容易閱讀和理解。值得注意的是有些標識符需要區分大小寫(數據庫、表、列名)等。

使用空格:在處理SQL語句時,其中所有的空格都被忽略,所以可以把SQL分成多行便於閱讀。

 

 

檢索多個列:select name,ID,Population from city;

注意:這裏使用逗號分開,但是逗號不能加錯位置。

 

但是如圖所示,查詢的結果仍舊不是原數據的結構組織。

檢索出所有的列select * from city;

檢索出不同的行select distinct Isofficial from countrylanguage;

Distinct 去除了結果中的重複值,只顯示唯一值。

限制結果

Select語句返回的結果是所有的,爲了返回第一行或者前幾行可以使用limit子句。

select name from city limit 6;返回結果爲6條

爲得出下一個6行,可以指定檢索開始行和行數

select name from city limit 6,6;

 

注意:

行0:檢索出來的第一行爲行0而不是行1,因此limit1將檢索出來第二行

在行數不夠時:MYsql將只返回它能返回的那麼多

MySQL5以後limit3,4=limit4offset3

 

使用完全限定的表名

select city.Name from world.city;

在數據庫world中選擇表city的行name

排序檢索數據

檢索出的數據並不是以純粹的隨機順序顯示,如果不排序,數據一般將以它在底層的表中出現的順序顯示,這可以是數看,據添加到表中的順序。

子句(clause)SQL語句由子句構成,有些子句是必須的,而有一些是可以選的。

爲了明確排序用select語句檢索出的數據,可以使用order by子句。Order by子句取一個或多個列的名字,據此對輸出進行排序。

 select name,ID from city order by ID;

 

按照多個排序

只需要制定列名,列名之間用逗號分開即可。

 select name,ID,population from city order by Population,name;

 

 

 

 

數據的排序方式默認爲升序排序(從A到Z),也可以用order by 進行降序排序,此時需要指定DESC關鍵詞。

select name,ID from city order by ID desc;

 

select name,ID,population from city order by Population desc,ID;

 

如果想在多個列上進行將序排列,一定要將每個列都指定DESC關鍵字。

與DESC相對應的是升序ASC,但是升序一般是默認,很少會用到。

Order by和limit組合可以找出一個列中的最高或者最低的值。(limit在order by後邊)

select name,ID,population from city order by Population desc limit 1;

得出的結果是人口最多的ID。

過濾數據

數據庫表一般包含大量的數據,很少需要檢索表中的所有行,通常根據特定的操作報告需求提取表數據的子集,只檢測所需數據需要指定搜索條件,也稱爲過濾條件。

在同時使用where和order by時,where優先在前,否則會報錯。

操作符

說明

=

等於

<>

不等於

!=

不等於

<

小於

<=

小於等於

>

大於

>=

大於等於

BETWEEN

在指定的兩個值之間

檢查單個值select name,ID,population from city where ID =5;

檢查某個條件

select name,ID,population from city where population >= 1000000;

不匹配檢查

select * from city where countrycode <> "JPN";

剔除countrycode 爲JPN的數據

範圍值檢查select * from city where ID between 6 and 10;

篩選出ID從6至10的數據。

篩選出空值:select * from city where District is null;

爲了進行更強的過濾控制,MySQL允許給出多個WHERE子句,有兩種方式使用:以AND子句方式或OR子句方式使用。

操作符(Operator):用來聯結或改變WHERE子句中的子句的關鍵詞。也稱爲邏輯操作符(logical operator )。

AND操作符

爲了通過不止一個列進行過濾,可使用AND操作符給WHERE子句附加條件。

select * from city where countrycode ="TWN"and population<=160000;

OR操作符

與AND操作符不同,匹配任意條件即可。

select * from city where countrycode ="TWN" or countrycode ="AIA";

計算次序

Where可以包含任意數目的AND或OR操作符,允許兩者進行復雜或者高級的過濾。

但是SQL像多數語言一樣,在處理OR操作符前,優先處理AND操作符。

解決方案是用圓括號明確的分組相應的操作符,消除分歧。

IN操作符:用來指定條件範圍,範圍中的每一個條件都可以進行匹配。IN取合法值的由逗號分隔清單都在圓括號中。

select * from city where ID in (1,2,10) order by population;

注意,這裏只有ID爲1,2,10的三條數據。

IN操作符的優點:

在使用長的合法選項清單時,IN操作符的語法更清楚更直觀。

在使用IN時,計算的次序更容易管理。

IN操作符一般比OR操作符清單執行更快。

IN最大的優點是可以包含其他select語句,使得能夠更動態的建立where子句。

NOT操作符:否定後跟條件的關鍵字。

用通配符進行過濾

通配符:用來匹配值的一部分特殊字符。

搜索模式:由字面值、通配符或兩者組合成的搜索條件。

通配符本身是SQL的WHERE子句中有特殊含義的字符,SQL支持幾種通配符。爲在搜索子句中使用通配符,必須使用LIKE操作符。

LIKE指示MySQL後跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。

百分號(%)通配符

最常使用的通配符是百分號%,在搜索串中,%表示任何字符出現任意次數。

select * from city where name like'ka%';

 

注意:這裏的搜索根據MySQL的配置方式是可以區分大小寫的。

‘%ka%’表示匹配中間有ka的文本,不管他前後出現什麼內容。‘s%e’表示匹配以s開頭e結尾的對象,%除了一個或多個字符外還能匹配0個字符。

注意null:%不能匹配null。

劃線通配符(-),但是下劃線的用途與%一樣,但是下劃線只匹配單個字符。

通配符使用技巧:不要過度使用通配符。

用正則表達式進行搜索

select * from city where population regexp '.8000';

 

LIKE與REGEXP有很大的區別,且REGEXP匹配不分大小寫,如區分大小寫可以用BINARY等關鍵字。

LIKE 匹配整個列,如果匹配的文本在列值中出現,LIKE不會找到它。

進行OR匹配

 

匹配幾個字符之一

  1. =[1|2|3]

匹配特殊字符:使用\\作爲前導,\\-表示查找-,\\.表示查找.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章