天天看點

MySQL資料庫增删改查SQL語句(2018整理集合大全)

檢視資料庫

show databases; 

使用資料庫

use 資料庫名;

建立資料庫

CREATE DATABASE 資料庫名;

删除資料庫

DROP DATABASE 資料庫名;

建立表

create table 表名(

    列名1 類型(長度) [限制],

    列名2 類型(長度) [限制],

    ……

);

長度差別

int類型帶長度:不影響存取值,即使設定的值超出了長度的範疇,也能存,如果沒有達到設定的長度,則使用空格自動填充到設定的長度

char類型:不可變字元,設定的長度就是規定目前字段能存的資料的最大長度,若超出長度,則會報錯,若沒有達到長度,使用空格填充到設定的長度

varchar:可變字元,設定的長度同樣是規定目前字段能存的資料的最大長度,若超出長度,則會報錯,若沒有達到長度,不會使用空格填充,實際多長就是多長

删除表

DROP TABLE 表名;

表限制

1.非空限制    NOT NULL

2.預設值限制  DEFAULT \'男\'

3.唯一限制    UNIQUE

4.主鍵限制    PRIMARY KEY

檢視表結構

DESC 表名

修改表

修改列名

Alter table 表名  change  列名  新列名 類型;

修改列類型

Alter table 表名  change 列名  列名  新類型;

修改列類型

Alter table 表名  modify  列名  新類型;

資料查詢-單表===

查詢表中全部資訊

select * from 表名;

查詢表中指定列的資訊

select 列1,列2 from 表名;

語句的執行順序:from—>select

資料去重

select distinct 列…. From 表名;

拼接結果

select concat(列1,列2) from 表名;

運算符優先級:

1.乘法和除法的優先級高于加法和減法

2.同級運算的順序是從左到右

3.表達式中使用"括号"可強行改變優先級的運算順序

select 列1[+-*/]列2 from 表名;

設定别名(注意:關鍵字as可以省略)

select 列 as 别名 from 表名;   

select 列 别名 from 表名;      

 語句的執行順序:from—>select

條件查詢

select 列… from 表名 where 條件;  

條件中比較運算符:( 等于:=  大于:>  大于等于:>=  小于:<  小于等于:<=  不等于:!= 或 <>  )

where 列  比較運算符  值;

注意:字元串、日期需使用單引号括起來

語句的執行順序:from—>where—>select

邏輯運算符( 并且:and 或 &&   或:or    非:not 或 !    )

where 條件1  邏輯運算符  條件2;  

where not 條件; 

範圍查詢

where 列 between 條件1  and 條件2;          //列在這個區間的值

where 列 not between 條件1 and 條件2;    //不在這個區間

where !( 列 between 條件1 and 條件2 );     //同樣表示不在這個區間

集合查詢( 判斷列的值是否在指定的集合中 )

where 列 in(值1,值2);          //列中的資料是in後的值裡面的

where 列 not in(值1,值2);   //不是in中指定值的資料

NULL值查詢( 注意:列中值為null不能使用=去查詢 )

where 列 is null;  //查詢列中值為null的資料

模糊查詢

%:表示0到多個字元,示例:

where 列 like \'%0\';   //表示以0結尾

where 列 like  \'0%\';   //表示以0開頭

where 列 like  \'%0%\';   //表示資料中包含0

_:表示一個字元,可多次使用,示例:

where 列 like \'%0_\';   //資料結尾第二位是0

結果排序( 對查詢出的結果按照一列或多列進行升序還是降序排列 升序:asc  降序:desc    注意:不能使用中文的别名排序)

where 條件 order by 列 [asc/desc]

語句的執行順序:from—>where—>select—>order by

分頁查詢( beginIndex:表示從第多少條資料開始   pageSize:表示每頁顯示的資料條數 )

where [條件] limit beginIndex,pageSize;

ex:每頁顯示3條資料

第一頁: SELECT * FROM 表名 LIMIT 0,3    --0,1,2

第二頁: SELECT * FROM 表名 LIMIT 3,3    --3,4,5

第三頁: SELECT * FROM 表名 LIMIT 6,3    --6,7,8

第四頁: SELECT * FROM 表名 LIMIT 9,3    --9,10,11 

  ……

第七頁: SELECT * FROM 表名 LIMIT 18,3   --18,19,20

beginIndex公式:(目前頁數-1)*pageSize

聚集函數( 作用于一組資料,并對一組資料傳回一個值 )

COUNT:統計結果記錄數,若統計的是列,列中為Null,那麼count将不會計算值

MAX:  統計計算最大值

MIN:  統計計算最小值

SUM:  統計計算求和

AVG:  統計計算平均值

分組函數( 注意:如果要對分組後的資料進行篩選,那麼必須使用having關鍵字,條件寫在having後 )

select 聚集函數 from 表名 where [條件] group by 列 having 分組後的條件

語句的執行順序:FROM—> WHERE—>group by---->Having—>SELECT-->ORDER BY

Where和having的差別:

Where: 先過濾已有的資料(資料是已經存在的),在進行分組,在聚集計算

Having:先分組,在對每組進行計算,根據得到結果在過濾(分組把資料算出之後,在過濾)

注意:使用having的時候,它是可以使用别名的

=資料查詢-多表=

交叉連接配接:又名笛卡爾積,使用交叉連接配接會産生笛卡爾積

假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

select *  from 表1,表2

内連接配接:過濾為空的資料(查詢的實際上是兩張表資料的交集部分)    目的 ==》解決笛卡爾積現象,正确查詢了需要的資料

select * from 表1,表2  where 表1.字段=表2.字段;  //隐式内連接配接,使用where條件消除笛卡爾積

select * from 表1 [inner] join 表2 on 表1.字段=表2.字段;  //顯式内連接配接,如果是多張表,則一直在join..on後依次添加join..on即可,inner關鍵字可被省略

外連接配接:左外連接配接、右外連接配接、全外連接配接

左外連接配接:以左邊表為主,傳回左邊表中所有資料,若右表中無資料,則顯示為NULL,請參考實際查詢結果來了解

select * from 表1 left [outer] join 表2 on 表1.字段=表2.字段;   //表1為左表,表2為右表,outer關鍵字可被省略

右外連接配接:以右邊表為主,傳回右表中所有資料,若左表中無資料,則顯示為NULL,結合實際查詢結果來了解

select * from 表1 right [outer] join 表2 on 表1.字段=表2.字段;  //表1為左表,表2為右表,outer關鍵字可被省略

全外連接配接:傳回涉及的多表中的所有資料,MYSQL中不支援該查詢,僅限了解自連接配接:單表當作多表查詢,直白的講就是一張表中資料含有多種關系,使用多表查詢的文法,來查詢一張表,查詢過程中一定要使用别名

多用在分類資料、省市縣分類資料、權限…

select 表1.字段1,表2.字段2 from 表名 as 表1,表名 as 表2 where 表1.字段1=表2.字段2

子查詢:将一個查詢結果作為另一個查詢的對象,直白的講就是SQL語句嵌套

select * from (select * from 表名) as 别名

select * from where 條件->條件中包含查詢語句

注意:1.查詢結果的虛拟表必須取别名

           2.字段與關鍵字一樣,沖突時,需要給字段名加``,(Esc鍵下面、1的左邊)

           3.如果給虛拟結果表中的字段取了别名,則對虛拟結果表查詢時,應該用 表别名.虛拟表字段别名

=插入資料=

insert into 表名(字段1,字段2..) values(值1,值2…);    

注意: 1.如果插入的表中的主鍵是自增類型的,可以不用插入值

            2.如果主鍵是非自增 ,插入的資料則是填補主鍵字段值空餘的值

            3.如果主鍵設定了自動遞增,會從主鍵字段最大值開始插入資料

其他插入方式:

insert into 表名(字段1,字段2) values(值1,值2),(值1,值2);     //插入多條資料【MYSQL】

insert into 表名 values(值1,值2);                    //針對全表所有字段進行插入操作

insert into 表名(字段) select 字段 from 表2;         //查詢結果插入

insert into 表名 select 字段 from 表2;               //查詢結果,全表插入

=修改資料=

update 表 set 字段=值 where 條件;  //帶條件修改指定資料,否則修改全表

=删除資料=

delete from 表 where 條件;  //删除資料帶條件指定資料,否則删除全表資料

=資料備份=

在指令行視窗進行,若作業系統版本高,則使用管理者模式

導出:

mysqldump -u賬戶 -p密碼 資料庫名稱>腳本檔案存儲地

ex:         mysqldump -uroot -proot jdbcdemo> C:/shop_bak.sql

導入:

mysql -u賬戶 -p密碼 資料庫名稱< 腳本檔案存儲位址

ex:         mysql -uroot -proot jdbcdemo< C:/shop_bak.sql

使用可視化導入導出:

Navicat工具的導入和導出/Navicat工具的備份和還原

=資料索引=

索引的作用相當于圖書的目錄,可以根據目錄中的頁碼快速找到所需的内容。

什麼列适合建索引??

1.表的主鍵、外鍵必須有索引;

2.資料量超過30000的表應該有索引;

3.經常與其他表進行連接配接的表,在連接配接字段上應該建立索引;

4.經常出現在Where子句中的字段,特别是大表的字段,應該建立索引;

5.索引應該建在選擇性高的字段上;

6.索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;

sql語句建立和删除索引:

建立索引:

CREATE INDEX 索引名稱 ON 表名 (列名)

删除索引:

方式一:

DROP INDEX 索引名 ON 表名 

方式二:

ALTER TABLE 表名 DROP INDEX 索引名