1. 程式人生 > >MySql 語句大全 - 基礎操作

MySql 語句大全 - 基礎操作

目錄

對資料庫操作

1. 顯示資料庫

2. 使用資料庫

3. 建立資料庫

4. 刪除資料庫

對資料表操作

1. 建立新表:

2. 刪除表:

3. 清空表:

4. 查看錶結構:

5. 修改表: 

1) 修改表名:將表 tb_one 改名為 tb_two ;

2) 修改欄位型別:

3) 修改欄位名:

4) 增加列

5) 增加/刪除主鍵

6) 增加/刪除外來鍵

對錶資料操作(CRUD)

1. 查詢:

1) 簡單查詢:

2) 條件查詢:in

3) 模糊查詢:

4) 排序:

5) 統計函式:

6) 分組查詢:

7) 分頁查詢:

8) 去重查詢:

2. 高階查詢:

1)交叉連線(cross join):(不使用 ,毫無意義)

2)內連線(join .. on ):

3)外連線(left/right join):

4)聯合查詢:

5)子查詢:

3. 修改:

4. 刪除:

附錄

模糊查詢:Concat函式

用法: 字串拼接 ;CONCAT(str1,str2,…) 

CONCAT_WS()函式

Group_concat函式

型別轉換:Cast()函式


對資料庫操作

1. 顯示資料庫

    show databases ;

2. 使用資料庫

    use 資料庫名稱 ;

3. 建立資料庫

create database 資料庫名稱 ;

# utf-8
create database 資料庫名稱 default charset utf8 collate utf8_general_ci;

# gbk
create database 資料庫名稱 default character set gbk collate gbk_chinese_ci;

4. 刪除資料庫

    drop database Database_Name

 

對資料表操作

1. 建立新表

# 使用舊錶建立新表
create table 新表 like 舊錶 ;
create table 新表 as select UserName1,UserName2… from 舊錶 definition only
# 建立新表 1 (標準)

create table Table_Name (
id int(11) auto_increment primary key , //自增  主鍵

name varchar(255) default null,

…

) engine=InnoDB default charset = utf-8 ;

# 建立新表 2 (新增外來鍵約束)

create table Table_Name (
id int(11) auto_increment primary key , //自增  主鍵

name varchar(255) default null,

… ,

constraint 外來鍵索引【如: fk_two_one】foreign key (該表字段) references 父表(欄位) 

//foreign key (該表字段) references 父表(欄位)

)  ;

2. 刪除表

    drop table 表名 ;

3. 清空表

    delete from 表名 ;

    truncate table 表名 ;

4. 查看錶結構

    desc Table_Name;   //desc = describe

5. 修改表: 

1) 修改表名:將表 tb_one 改名為 tb_two ;

    alter table tb_one Rename tb_two  ;

2) 修改欄位型別:

    alter table <表名> modify <欄位名> <資料型別>  ;

3) 修改欄位名:

    alter table <表名> change <舊欄位名> <新欄位名> <新資料型別> ;

4) 增加列

    alter table 表名 add column 新欄位 資料型別

5) 增加/刪除主鍵

    alter table 表名 add/drop primary key(欄位)

6) 增加/刪除外來鍵

##例:alter table tb_two add constraint fk_two_one foreign key (oneid) references tb_one(id) ;

alter table 子表 add constraint 外來鍵索引[如FK_子表_父表] foreign key (子表外來鍵欄位) references 父表(欄位) ; //增加外來鍵約束

alter table 子表 drop foreign key 外來鍵索引  ; //刪除外來鍵約束

 

對錶資料操作(CRUD

1. 查詢

1) 簡單查詢:

select  *  from 表名 ;  # 查詢所有欄位

select id , name, … from 表名 ;

2) 條件查詢:in

select * from 表名 where 欄位2=值 一個條件查詢
select * from 表名where 欄位1='值 ' and 欄位2=值 ;多條件 並關係 查詢
select * from 表名where 欄位1='值 ' or 欄位2=值 ;多條件 或關係 查詢
select * from 表名where 欄位1>=50 and 欄位<=60; 範圍查詢
select * from 表名where 欄位between 50 and 60 ;範圍查詢

同個欄位查詢多個值:

select * from 表名where 欄位 in (值1,值2,值3,...) ;

 

3) 模糊查詢:

select * from 表名where Name like '%型'  //%萬用字元代表任意多個字元
select * from 表名 where Name like '%奧迪%'

select * from 表名where Name like '_馬%'  // _萬用字元代表任意一個字元

4) 排序:

select * from 表名order by 欄位asc ;  // 按照價格升序排列
select * from 表名order by 欄位desc ;   // 按照價格降序排列
select * from 表名order by 欄位1,欄位2 ; //按照兩列進行排序,前面的為主要的

5) 統計函式:

select count(*) from 表名 ;  // 查詢表中有多少條資料
select max(Price) from 表名 ;   //取價格的最大值
select min(Price) from 表名 ;   //取價格的最小值
select sum(Price) from 表名 ;   // 取價格的總和
select avg(Price) from 表名 ;    //取價格的平均值

注: 使用函式,若帶條件查詢則不能使用where而應該使用HAVING

select sum(price) from table_user Having sum(price)>20 or id>2;

6) 分組查詢:

select 欄位from Car group by 欄位having count(*)>2 ;  //查詢所有系列中數量大於2的

7) 分頁查詢:

select * from 表名 limit 0,5 ;   // 從第條資料開始讀取5條資料

8) 去重查詢:

select distinct 欄位from 表名;

 

2. 高階查詢

1)交叉連線(cross join):(不使用 ,毫無意義

## 左表迴圈每條記錄 直到右表所有記錄 ,沒有匹配條件:

select * from 左表 cross join 右表 ; // select * from 左表 , 右表 ;

2)內連線(join .. on ):

## 左表每條記錄與右表的所有記錄進行匹配, 匹配條件相同則保留:

select * from 左表 join 右表 on 條件 ;

select m.id,m.name,…, w.id,w.name,… from table_Left m join table_Right w on m.id = w.id ;

注:USING欄位的使用,簡寫效果; 即兩個表中的欄位都為id ,則可以使用Using欄位取代on欄位。( USING(id) ==  m.id=w.id )

... join table_Right USING(id);

3)外連線(left/right join):

## 以某張表為主(所有記錄保留),與另一張表進行連線,匹配條件保留,否則另一張表字段置為NULL;即無論是否符合On語句後面的條件,左/右主表中的資料都會被查詢出來,另一張表未匹配的欄位置為null

## left join ()連線 :以左表為主

## right join 右(外)連線 :以右表為主

select *from One_Table left join Two_Table on 條件 ;

select m.id,m.name,…, w.id,w.name,… from table_Left m left/right join table_Right w on m.id = w.id ;

4)聯合查詢:

## 聯合查詢結果不增加欄位(類似將表2插入資料到表1中,但與資料型別無關);

## 聯合查詢意義:

1. 查詢同一張表,但是需求不同: 如查詢學生資訊, 男生身高升序, 女生身高降序.

2. 多表查詢: 多張表的結構是完全一樣的,儲存的資料(結構)也是一樣的.

a)  Union/Union All

## 將多條select語句使用Union /Union All 拼接 ,但語句欄位得相同 ;

## All: 保留所有資料 ; Distinct:去重(預設);

如:select 欄位1,欄位2, from 表1 Union /Union All select欄位1,欄位2, from 表1/2

b)  order by (limit

## 使用時需對 select語句使用括號,且 必須使用limit:限定的最大數量;

(select … from 表1 where 條件 order by 欄位 limit 99999) union (select … from 表2 where 條件 order by 欄位 desc limit 99999)   // 正逆序排列

5)子查詢:

##子查詢有兩種分類方式: 按位置分類;和按結果分類

  • 按位置分類: 子查詢(select語句)在外部查詢(select語句)中出現的位置
  1. From子查詢: 子查詢跟在from之後
  2. Where子查詢: 子查詢出現where條件中
  3. Exists子查詢: 子查詢出現在exists裡面
  • 按結果分類: 根據子查詢得到的資料進行分類(理論上講任何一個查詢得到的結果都可以理解為二維表)
  1. 標量子查詢: 子查詢得到的結果是一行一列
  2. 列子查詢: 子查詢得到的結果是一列多行
  3. 行子查詢: 子查詢得到的結果是多列一行(多行多列) (1,2,3出現的位置都是在where之後)
  4. 表子查詢: 子查詢得到的結果是多行多列(出現的位置是在from之後)

 

例如:標量子查詢

select 欄位1 from table 1 where 條件(id)= (select 欄位1(外來鍵) from table_2 where 條件2 = 值)

3. 修改

update 表名 set 欄位 = 新值 where 欄位 = 值 ;

4. 刪除

delete from 表名 where 欄位 = 值 ;


附錄

 

模糊查詢:Concat函式

 

用法: 字串拼接 ;CONCAT(str1,str2,…) 

當Concat中某個值為NULL時,返回NULL;

m.table_Name like concat(concat('%',#{tableName}),'%')----------------------就是拼接成% 變數值%

select * from m where m.name like concat(concat('%','#tableName'),'%');

 

CONCAT_WS()函式

用法:concat_ws(separator,str,str2,...); 字面意思:concat with separator,合併和分隔符

即:第一個引數是其它引數的分隔符。分隔符的位置放在要連線的兩個字串之間。分隔符可以是一個字串,也可以是其它引數。如果分隔符為 NULL,則結果為 NULL。函式會忽略任何分隔符引數後的 NULL 值。

mysql> SELECT CONCAT_WS(’,',’First name’,'Second name’,'Last Name’);
-> ‘First name,Second name,Last Name’

 

Group_concat函式

 

型別轉換:Cast()函式

用法:Cast(欄位名 as 轉換的型別)。其中型別為:

CHAR[(N)] 字元型
DATE 日期型
DATETIME 日期和時間型
DECIMAL float型
SIGNED int
TIME 時間型