數(shù)據(jù)庫排名:
Oracle(關(guān)系型)
MySQL(關(guān)系型)
SQLServer(關(guān)系型)
PostgreSQL(關(guān)系型)
MongoDB(非關(guān)系數(shù)據(jù)庫)
DB2(關(guān)系型)
Redis(非關(guān)系數(shù)據(jù)庫)
ElasticSearch(非關(guān)系數(shù)據(jù)庫)
SQL語句(結(jié)構(gòu)化查詢語言)
DDL(數(shù)據(jù)定義語言):create / drop / alter
DML(數(shù)據(jù)操作語言):insert / delete / update / select
DCL(數(shù)據(jù)控制語言):grant / revoke
<font size="4">前言:SQL中大小寫不敏感(大寫和小寫是一樣的); 每條SQL語句必須以分號結(jié)束</font>
一、DDL(數(shù)據(jù)定義語言)
主要提供數(shù)據(jù)庫和表的創(chuàng)建泳炉、刪除和修改
1. 創(chuàng)建數(shù)據(jù)庫
語法 |
功能 |
create database 數(shù)據(jù)庫名; |
直接創(chuàng)建指定數(shù)據(jù)庫 |
create database if not exists 數(shù)據(jù)庫; |
當(dāng)指定數(shù)據(jù)庫不存在的時候才創(chuàng)建數(shù)據(jù)庫 |
create database if not exists 數(shù)據(jù)庫 default charset utf8; |
創(chuàng)建數(shù)據(jù)庫時設(shè)置字符集編碼方式為utf8,讓數(shù)據(jù)庫支持中文數(shù)據(jù)存儲 |
2.刪除數(shù)據(jù)庫
語法 |
功能 |
drop database 數(shù)據(jù)庫; |
直接刪除指定數(shù)據(jù)庫 |
drop database if exists 數(shù)據(jù)庫; |
如果指定的數(shù)據(jù)庫存在就刪除數(shù)據(jù)庫 |
3. 使用/切換數(shù)據(jù)庫
語法 |
功能 |
use 數(shù)據(jù)庫; |
使用/切換指定數(shù)據(jù)庫 |
4. 新建表
語法 |
功能 |
create table if not exists 表(字段1 類型1, 字段2 類型2,...); |
新建表憾筏,表名一般加前綴't'或'tb',字段名不能是關(guān)鍵字 |
create table if not exists 表(字段1 類型1 約束1, 字段2 類型2 約束2,...); |
新建表并且添加約束 |
5. 刪除表
語法 |
功能 |
drop table if exists 表; |
刪除指定表 |
truncate table 表; |
清空指定表 |
6. 修改表
語法 |
功能 |
alter table 表 add column 字段 類型 約束; |
添加列 |
alter table 表 drop column 字段; |
刪除列 |
二花鹅、DML(數(shù)據(jù)操作語言)
主要針對數(shù)據(jù)庫中數(shù)據(jù)的增氧腰、刪、改、查
1. 增
語法 |
功能 |
insert into 表 values(值1, 值2, 值3,...); |
插入數(shù)據(jù)古拴,依次給指定表中的字段賦值 |
insert into 表(字段1, 字段2,...) values(值1, 值2,...); |
插入數(shù)據(jù)箩帚,以指定順序給指定字段賦值,可一次插入多條數(shù)據(jù)黄痪,用逗號分開 |
(注)時間函數(shù):now() - 當(dāng)前時間紧帕;date(now()) - 當(dāng)前日期;year(now()) - 當(dāng)前年桅打;month(now()) - 當(dāng)前月
2. 刪
語法 |
功能 |
delete from 表; |
刪除指定表中所有記錄 |
delete from 表 where 條件語句; |
刪除滿足條件的記錄 |
3. 改
語法 |
功能 |
update 表 set 字段1=新值1, 字段2=新值2,...; |
將指定表中所有行的指定列/字段的值賦值為新值 |
update 表 set 字段1=新值1, 字段2=新值2,... where 條件語句; |
將表中滿足條件的行中指定列/字段的值賦值為新值 |
4. 查
語法 |
功能 |
select * from 表; |
獲取指定表中所有行和所有的列(所有數(shù)據(jù)) |
select 字段1,字段2,... from 表; |
獲取指定表中所有行指定的列 |
select * from 表 where 條件; |
獲取指定表中所有滿足條件的行所有列的數(shù)據(jù) |
select 字段1 as 新字段1, 字段2 as 新字段2,... from 表; |
列重命名(as可以省略) |
select if(字段,值1,值2) from 表; |
(MySQL寫法)查詢指定字段是嗜,字段真則結(jié)果為值1,假則結(jié)果為值2 |
select case 字段 when 值 then 新值1 else 新值2 end; |
(通用寫法)查詢指定字段并將結(jié)果重新賦值 |
select concat(字段1,字段2,...) from 表; |
對列進(jìn)行合并挺尾,數(shù)字和字符串?dāng)?shù)據(jù)可合并鹅搪,bit類型數(shù)據(jù)不可合并 |
排序:(先按之前的任何語法進(jìn)行查詢再排序) |
select * from 表 order by 字段; |
對查詢結(jié)果按照指定字段的值進(jìn)行升序排序 |
select * from 表 order by 字段 asc; |
對查詢結(jié)果按照指定字段的值進(jìn)行升序排序 |
select * from 表 order by 字段 desc; |
對查詢結(jié)果按照指定字段的值進(jìn)行降序排序 |
注:多個字段排序,寫在前面的優(yōu)先級高 |
限制: |
select * from 表 limit N; |
獲取查詢結(jié)果的前N條記錄 |
select * from 表 limit M offset N; |
對查詢結(jié)果跳過前N條數(shù)據(jù)遭铺,取M條數(shù)據(jù)出來 |
去重: |
select distinct 字段 from 表; |
查詢結(jié)果去重 |
5. 條件語句
在SQL中可以通過 where 條件語句
丽柿,來對操作對象進(jìn)行篩選
條件語句:
語法 |
功能 |
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
is/is not |
判斷是否等于null空時使用 |
and |
邏輯與運算 |
or |
邏輯或運算 |
not |
邏輯非 |
in |
集合中是否包含 |
like |
模糊查詢 |
% |
表示0個或多個的任意字符 |
_ |
表示一個任意字符 |
between 值1 and 值2 |
篩選指定字段的值在值1和值2之間 |
6. 數(shù)據(jù)類型
名稱 |
功能 |
int/tinyint(-128~127) |
整數(shù) |
float(size,d)/double(size,d) |
浮點數(shù),這兒的size和d的值都有約束效果 |
char(size) |
定長字符 |
varchar(size) |
不定長字符串魂挂,size決定的是最大長度 |
text |
不限長度(最大是255個字符) |
bit |
布爾甫题,只有0和1兩個值 |
date/datetime/time |
值可以是時間函數(shù)的結(jié)果,也可以是時間字符串锰蓬;計算或者是比較的時候內(nèi)部是按時間處理的 |
7. 約束
創(chuàng)建表的時候可以添加約束
約束索引:
語法 |
功能 |
alter table 表 add constraint 索引 約束(字段); |
添加約束幔睬,索引(自己命名),約束(支持唯一約束芹扭、主鍵約束和外鍵約束) |
alter table 表 drop index 約束索引; |
刪除約束 |
常見約束:
語法 |
功能 |
not null |
不為空 |
default 值 |
設(shè)置默認(rèn)值 |
unique |
值唯一 |
primary key(字段) |
主鍵約束(唯一記錄) |
auto_increment |
主鍵自動增長 |
8. 外鍵
添加外鍵:
語法 |
功能 |
alter table 表1 add constraint 索引 foreign key (字段1) references 表2 (字段2); |
將表1中字段1設(shè)為外鍵麻顶,讓其參照表2中字段2 |
刪除外鍵:
語法 |
功能 |
alter table 表 drop foreign key 外鍵索引; |
先,刪除外鍵約束 |
alter table 表 drop index 外鍵索引; |
后舱卡,刪除約束的索引 |
9. 聚合
max() min() sum() avg() count()
語法 |
功能 |
select 聚合函數(shù)(字段) from 表 [where 條件]; |
[按條件]查詢后將結(jié)果做相應(yīng)的聚合運算 |
10. 分組
語法 |
select 字段操作 from 表 [where 條件] group by(字段); |
先篩選在分組 |
select 字段操作 from 表 group by(字段) [having 條件]; |
先分組在篩選 |
where和having可同時使用
功能:將表中[滿足條件]的記錄按照字段分組, 再將每個分組作為整體做聚合操作辅肾,字段操作的位置除了分組字段不用聚合,其他字段都必須聚合
11. 子查詢
將一個查詢操作的結(jié)果作為另外一個查詢的數(shù)據(jù)源
12. 連接查詢
語法 |
功能 |
select * from 表1轮锥,表2,...where 表1表2連接條件...; |
普通連接 |
select * from 表1 inner join 表2 on 表1表2連接條件 inner join 表3 on 表1表3連接條件...; |
內(nèi)連接 |
select * from 表1 left join 表2 on 表1表2連接條件...[where 條件]; |
左外連接矫钓,右表值不存在則為null |
select * from 表1 right join 表2 on 表1表2連接條件...[where 條件]; |
右外連接,左表值不存在則為null |
13. 字段索引
字段索引相當(dāng)于目錄舍杜,作用為快速對此字段進(jìn)行查找
只針對某個查詢很頻繁的字段新娜,建議添加對應(yīng)索引
語法 |
功能 |
create index 索引 on 表 (字段); |
添加索引 |
alter table 表 drop index 索引; |
刪除索引 |
三、DCL(數(shù)據(jù)控制語言)
1. 創(chuàng)建用戶
create user '用戶名'@'登錄地址' identified by '密碼';
登錄地址 |
作用 |
localhost |
數(shù)據(jù)庫本機 |
ip地址 |
指定地址 |
% |
任何位置 |
2. 刪除用戶
drop user 用戶名;
3. 授權(quán)
語法 |
功能 |
grant 權(quán)限類型 on 數(shù)據(jù)庫.對象 to '用戶'; |
為指定用戶添加指定數(shù)據(jù)庫指定對象的指定權(quán)限 |
grant 權(quán)限類型 on 數(shù)據(jù)庫.對象 to '用戶' with grant option; |
添加權(quán)限既绩,并且可以將自己的權(quán)限再授權(quán)給別人 |
revoke 權(quán)限類型 on 數(shù)據(jù)庫.對象 from 用戶名; |
撤銷/召回權(quán)限 |
權(quán)限類型 |
功能 |
select |
查看 |
insert |
添加 |
delete |
刪除 |
update |
更新 |
create |
創(chuàng)建 |
drop |
刪除 |
alter |
更改 |
all privileges |
所有權(quán)限 |
4. 事務(wù)
語法 |
功能 |
begin; |
開啟事務(wù)環(huán)境 |
commit; |
事務(wù)提交 |
rollback; |
事務(wù)回滾 |
只有begin;
到commit;
之間的所有的sql都執(zhí)行成功概龄,才會執(zhí)行commit;
否則執(zhí)行rollback;