1. 程式人生 > >MySQL的select語句

MySQL的select語句

查詢資料

基本語法:select 欄位列表/* from 表名 [where 條件];

完整語法:select [select選項] 欄位列表[欄位別名]/* from 資料來源[where 條件子句] [group by條件子句] [having 子句] [order by 子句] [limit 子句];

select選項部分:select選項是指select對查出來的結果的處理方式,主要有兩種。

All:預設的,保留所有的結果

Distinct: 對查詢結果進行去重(將重複的給去除)

查詢全部

舉例:

Select all * from 表名; 和select * from 表名是等價的。

我們前面經常使用select * from 表名的語法來查詢全部資料,這裡舉例下帶上select all選項;

 

去重查詢

為了演示去重,我們得給當前my_student表進行插入一些重複的資料。


       上面我們先是插入了一條重複的資料,然後用select distinct查詢就顯示兩條結果,去除了一個重複的結果。注意這裡distinct去除是指全部欄位都完全相同才認為是一個重複的記錄。

欄位別名

       欄位別名:當資料進行查詢出來的時候,有時候名字並不一定就滿足需求(多表查詢的時候會有同名欄位),這個時候需要對欄位名進行重新命名,這個就是別名。

 語法:欄位名 [as] 別名;

舉例:


第一種是使用別名顯示,第二種不加,還有新增別名語句as可以寫也可以不寫

資料來源就是資料的來源,關係型資料庫的來源都是資料表。本質上只要保證資料類似二維表,最終都可以作為資料來源。資料來源分為多種:單表資料來源,多表資料來源,查詢語句。

單表資料來源舉例:select * from 表名;


多表資料來源舉例:select * from 表名1,表名2,…;

這裡我們用兩個表查詢舉例,先分別看看兩個表的內容。


上面顯示兩個表,表1有1條資料,表2有兩條資料。


       上面的現象是:從一張表中取出一條記錄,去另外一張表中匹配所有記錄,而且全部保留(記錄數和欄位數),這種結果在數學上稱之為笛卡爾積。其實就是一種交叉連線,笛卡爾積沒什麼用處,實際工作中儘量避免。

查詢語句舉例:資料的來源是一條查詢語句(查詢語句結果其實就是二維表)

語法:select * from (select語句) as 表名;


 Where字句:用來判斷資料,也就是根據條件篩選資料。Where 子句返回結果有兩種:0和1,0代表false,1代表true,在SQL中沒有布林這種資料型別。

判斷條件:

比較運算子:>, <, >=, !=, <>, =, like, between and, in, not in。

邏輯運算子:&&(and),||(or), !(not)

      簡單解釋上面幾種判斷條件:<>這個也是不等於,意思是既大於也小於,like一般是在模糊匹配的時候用到,between and很好理解,在什麼範圍之間,in 和not in就是包含或者不包含的判斷。

Where 原理:

       Where是唯一一個直接從磁盤獲取資料的時候就開始判斷的條件,從磁碟取出一條記錄,開始進行where判斷,判斷的結果如果成立儲存到記憶體,如果失敗直接放棄。從這個角度來說,where字句是考慮到記憶體使用效率的設計。

 在舉例之前,我們先來修改下我們的學生表,增加幾個欄位。


       分別增加了身高,體重和籍貫三個欄位。下面我們來給插入幾條資料,插入後效果如下。(如果你嫌麻煩,你可以用影象化工具連線mysql,進行編輯,插入資料)


查詢練習1:找出學生id為java01001或者java01003的學生,練習邏輯判斷


查詢練習2:查詢身高在165到175之間的學生

 

查詢練習3:找出來自湖南或者湖北的學生。

這個利用練習1的邏輯判斷是完全可以實現,下面我們用like模糊匹配來實現。