MySQL對資料操作的一些深入文法

來源:互聯網
上載者:User

標籤:tab   順序   做了   create   sum   des   關係運算   蠕蟲   distinct   

其他資料操作

 

資料的操作也叫作crud:

C:create

R:read

U:update

D:delete

插入資料 蠕蟲複製

就是在已有的資料的基礎之上,將原來的資料進行複製,插入到相對應的表中!

文法規則:

insert into 表名 select *|欄位列表from 表名

注意:

當一個表中的資料複製到另一個表中的時候,需要注意資料的來源要與被插入的表的欄位數量和類型要保持一致!

總結蠕蟲複製的優點:

1, 可以以最快的速度複製另外一張表的資料

2, 在短期內產生大量的資料,以測試伺服器的壓力

主鍵重複

插入的值與主鍵中的值發生衝突,重複的時候,需要使用一個文法,一般使用在主鍵更改的時候:

如果重複的時候及更新值:

insert into 表名[欄位列表] values(值列表) on duplicate key update 欄位1=值1,欄位2=值2……

直接將重複的值刪除,插入新資料:

replace into 表名[欄位列表] values(值列表);

修改資料

update 表名 set 欄位1=值1,欄位2=值2……[where條件][order by 欄位名 asc|desc][limit 資料量]

刪除資料

標準文法:

delete from 表名 [where條件] [order by 欄位名 asc|desc][limit 資料量]

 

還有一個類似刪除功能的文法:

truncate table 表名;  或 truncate 表名;

注意:該語句不屬於DML,屬於DDL

 

相當於做了兩件事情:

1, 先把原表drop掉!

2, 再按以前的原表的結構重新建立一次!

查詢資料

select [select選項] *|欄位列表 [as 欄位別名] from 資料來源 [where子句][group by子句][having子句][order by子句][limit子句];

 

以上的文法一般只是單表查詢,另外還有多表查詢,多表查詢又有聯集查詢、子查詢、串連查詢(左串連,右串連,內串連,外串連,自然串連)

注意:

1, from後面的子句往往稱之為:五子句,也叫五子查詢!

2, 五子查詢都可以沒有,但是,如果要有,就必須按順序寫!

select選項和別名

含義:查詢到的資料如何顯示

這裡的select選項有兩個值:

all:也是預設值(預設值),保留所有的查詢結果!

distinct:去重,去掉重複的查詢結果!

別名

所謂的別名,就是給欄位或其他運算式等標識符另起一個名字,基本文法如下:

欄位|運算式|表|子查詢  [as]  別名

這裡的as可以省略,但是為了增加可讀性,一般還是寫上!

 

where子句

文法:where 運算式

先將運算式計算結果,如果運算式為真(結果不為0)則則返回記錄,如果為假(則為0),則不返回記錄。相當於對所有記錄進行遍曆!

MySQL運算子

MySQL支援以下的運算子:

關係運算子

<  >

<=  >=

=   !=(<>)

注意:這裡的等於是一個等號

between and

做數值範圍限定,相當於數學上的閉區間!

比如:

between A and B相當於 [A,B]

在between and前加上not 則是反過來。

in和not in

文法形式:in|not in(集合)

表示某個值出現或沒出現在一個集合之中!

模糊查詢

也就是帶有like關鍵字的查詢,常見的文法形式是:

select *|欄位列表from 表名 where 欄位名 [not] like 萬用字元字串;

 

所謂的萬用字元字串,就是含有萬用字元的字串!

MySQL中的萬用字元有兩個:

_   :代表任意的單個字元

%   :代表任意的字元

group by子句

分組統計查詢語句

group by 欄位1[,欄位2]……

從形式上看,就是通過表內的某個或某些欄位進行分組:

統計函數

sum():求和,就是將某個分組內的某個欄位的值全部相加

max():求某個組內某個欄位的最大值

min():求某個組內某個欄位的最小值

avg():求某個組內某個欄位的平均值

count():統計某個組內非null記錄的個數,通常就是用count(*)來表示!

多欄位分組

group by 欄位1[,欄位2]……

作用是:先根據欄位1進行分組,然後再根據欄位2進行分組!

having子句

having子句和where子句一樣,也是用來篩選資料的,通常是對group by之後的統計結果再次進行篩選!

二者的比較:

 

1, 如果語句中只有having子句或只有where子句的時候,此時,它們的作用基本是一樣的!

2, 二者的本質區別是:where子句是把磁碟上的資料篩選到記憶體上,而having子句是把記憶體中的資料再次進行篩選!

3, where子句的後面不能使用統計函數,而having子句可以!因為只有在記憶體中的資料才可以進行運算統計!

order by子句

根據某個欄位進行排序,有升序和降序!

文法形式為:

order by 欄位1[asc|desc]

預設的是asc,也就是升序!如果要降序排序,需要加上desc!

多欄位排序

order by 欄位1[asc|desc],欄位2[asc|desc]……

比如:order by score asc,age desc

 聯集查詢

關鍵字:union

 

文法形式

select語句1

union[union選項]

select 語句2

union[union選項]

select 語句3

union[union選項]

……

 

作用:

所謂的聯集查詢,就是將多個查詢結果進行縱向上的拼接,也就是select語句2的查詢結果放在select語句1查詢結果的後面。依次類推!

 

既然是縱向上的拼接,所以聯集查詢有一個最最基本的文法,就是各個select語句查詢出來的結果,其中欄位的個數必須相同,比如,不能一個是4列,一個是3列!並且從顯示的結果上看,無論“拼接”了多少個select語句,欄位名只顯示第一條select語句的欄位名!

 

其中,這裡的union選項跟前面學習的select選擇的值是一樣的,只是預設值不一樣:

all:也是預設值,保留所有的查詢結果!

distinct:去重(預設值),去掉重複的查詢結果!

交叉串連

關鍵字:cross join

 

含義

就是從一張表的一條記錄去串連另一張表中的所有記錄,並且儲存所有的記錄,其中包括兩個表的所有的欄位!

交叉串連文法:

select  * | 欄位列表 from 表1  cross join 表2

MySQL對資料操作的一些深入文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.