資料庫語句收藏(MySQL)
概覽
=> MySQL是一種關係資料庫管理系統,關係資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
=>關鍵字不區分大小寫
=> SQL語句中,表名/欄位名不需要單雙引號擴起,欄位值根據其資料型別確定。如:數字則不需要單雙引號也可,但char等型別就需要單雙引號擴起
常用欄位型別
【int】 整數型別,範圍:(-2 147 483 648,2 147 483 647)
【char(n)】固定字串型別,n表示固定長度,可變,如果資料長度達不到則自動空格佔位,超出後則擷取超出部分,檢索速度較varchar快,範圍:(0-255)
【varchar(n)】可變字串型別,n表示最大長度,可變,中英文均佔一位,資料長度達不到自動縮小,超出後則擷取超出部分,範圍(0-65535),如果值的長度大於 255,則被轉換為 TEXT 型別。。
【text】不可指定長度的字串型別,範圍(0-65535)。
【date】日期值YYYY-MM-DD,範圍(1000-01-01~9999-12-31)
【datetime】 日期時間值YYYY-MM-DD HH:MM:SS,範圍(1000-01-01 00:00:00~9999-12-31 23:59:59)
基礎增刪改查
增
其中into單詞一般可以省略
全部欄位自定義值
insert into 表名 values("欄位1值","欄位2值","欄位3值","欄位4值")
確定欄位
insert 表名(欄位1,欄位2) values("欄位1值","欄位2值")
確定欄位2
insert into 表名 set 欄位1="欄位1值",欄位2="欄位2值"
一次性插入多行
insert 表名 values(欄位1值,"欄位2值","欄位3值","欄位4值"),(欄位1值,"欄位2值","欄位3值","欄位4值")
刪
刪除欄位值
delete from 表名 where 欄位=值
清空表全部內容
delete * from 表名
改
單個欄位
update 表名 set 欄位1="欄位1值" where 條件欄位名=欄位值
多個欄位
update 表名 set 欄位1="欄位1值",欄位2="欄位2值" where 條件欄位=值
自增1
update 表名 set 欄位=欄位+1 where id=2
自減3
update 表名 set 欄位=欄位-3 where id=2
查
查詢表中所有資料
select * from 表名
查詢部分欄位,並重命名欄位名
select 欄位1,欄位2 as 欄位2新名字 from 表名
條件查詢
select * from 表名 where 欄位="值"
查詢無重複結果資料
select distinct * from 表名
排序(降序desc、預設升序asc)
select * from 表名 order by 排序欄位desc
二級排序
order by 欄位1 asc,欄位2 desc
limit類似分頁查詢
select * from 表名 limit 跳過行,需要的行數
分組統計
select 欄位,count(欄位) from 表名 group by 欄位
欄位值處理
值的大小寫轉換
全部轉為大寫
ucase(欄位)
全部轉為小寫
lcase(text3)
提取欄位的部分字元
中文佔一位,起點為1,範圍為閉區間[1,3]
mid(欄位,1,3)
統計欄位長度
長度根據編碼不同而不同,如中文的utf-8編碼下長度為3
length(欄位)
count資料統計
統計欄位的非空數
統計總行數:一般欄位為主鍵,就可以實現統計表的行數,或者count(*)統計總行數
統計不重複的行數:count(distinct 欄位)
select count(欄位) as dongcount from 表名
計算函式相關
其它有:平均值【avg】、最大值【max】、最小值【min】
select sum(欄位) as dongsum from 表名 where id<5
where條件補充
like模糊查詢(【%】匹配任意數量的任意字元,【_】僅代替一個字元)
像(like)
where 欄位 like "%東%"
不像(not like)
where id not like "4%"
大小判斷( >、=、< 可組合作用),其中【<>】和【!=】均表示不等於
where id>=2
區間:
區間內取值([2,3] 閉區間)
where id between 2 and 3
區間之外
where id not between 2 and 3
確定多個存在值
where id in(2,3,46)
確定多個不存在值
where id not in(2,3,46)
and,條件(與)
where id=2 and text2="1234"
or,條件(或)
where id=2 or id=3
and和or綜合使用
where (id=2 and text2="1234") or id=3
是否為空
不為空
where 欄位 is not null
為空
where 欄位 is null
邏輯處理,判斷欄位是否為空,是空則替換為引數2
ifnull (欄位,"替換空值")
連表操作
連表查詢
【表名.列名】即可確定對應表
select 表名1.* from 表名1,表名2 where 表名1.id=表名2.id
查詢兩個表的所有資料符合
on條件的資料,此時表1的資料欄位在前面,表2出現表1的欄位時會重新命名,如【id1】
select * from 表1 join 表2 on 表1.id=表二.id
using確定欄位相同值
select * from 表1 join 表2 using(id)
其他連線查詢
left join ... on ... 以表1為主,表2無資料則補空 right join ... on ... 以表2為主,表1無資料則補空 full join ... on ... 結合,無則補空,mysql不支援
日期相關函式
curdate(),當前日期,格式為:2019-03-05
curtime(),當前時間,格式為:01:39:54
now (),當前時間,格式為:2019-03-05 01:40:45
date(日期時間欄位),返回欄位中的日期,2019-03-05
to_days(now()) 得到現在距離0000-00-00的天數
year(now()) 得到當前年份
yearweek("2019-01-01") 返回日期所屬年和周,如(2019-01-01 =>201852)(2019-01-08=> 201901)
period_diff("201905","201901") 得到月間隔,輸出4,其格式必須為:YYYYMM
datediff("2019-10-02","2019-10-01 01:10:10") AS dayx; 忽略時間的間隔天數(1),值有可能為負數
now()時間函式
設定當前資料,欄位型別必須是datetime,顯示效果為2019-03-05 01:04:06
update 表名 set 欄位=now();
新增顯示當前時間
select id,now() as dnow from tb_test
新增/減去時間
新增兩天
其中day可以換成:【week】、【year】、【month】、【hour】、【minute】、【second】
對應的減去時間函式為:date_sub ()
date_add(now(),interval 2 day)
提取時間的部分值:
提取到幾號
其中day可以換成:【week】、【year】、【month】、【hour】、【minute】、【second】
extract(day from now())
格式化時間函式:
date_format(now(),"%Y-%m-%d %H:%i:%s")
格式化有:
格式 |
描述 |
%a |
縮寫星期名 |
%b |
縮寫月名 |
%c |
月,數值 |
%D |
帶有英文字首的月中的天 |
%d |
月的天,數值(00-31) |
%e |
月的天,數值(0-31) |
%f |
微秒 |
%H |
小時 (00-23) |
%h |
小時 (01-12) |
%I |
小時 (01-12) |
%i |
分鐘,數值(00-59) |
%j |
年的天 (001-366) |
%k |
小時 (0-23) |
%l |
小時 (1-12) |
%M |
月名 |
%m |
月,數值(00-12) |
%p |
AM 或 PM |
%r |
時間,12-小時(hh:mm:ss AM 或 PM) |
%S |
秒(00-59) |
%s |
秒(00-59) |
%T |
時間, 24-小時 (hh:mm:ss) |
%U |
周 (00-53) 星期日是一週的第一天 |
%u |
周 (00-53) 星期一是一週的第一天 |
%V |
周 (01-53) 星期日是一週的第一天,與 %X 使用 |
%v |
周 (01-53) 星期一是一週的第一天,與 %x 使用 |
%W |
星期名 |
%w |
周的天 (0=星期日, 6=星期六) |
%X |
年,其中的星期日是周的第一天,4 位,與 %V 使用 |
%x |
年,其中的星期一是周的第一天,4 位,與 %v 使用 |
%Y |
年,4 位 |
%y |
年,2 位 |
表格來源W3Cschool