1.DDL(數(shù)據(jù)庫定義語言)
數(shù)據(jù)庫
查看所有數(shù)據(jù)庫:SHOW DATABASES;
選擇要操作的數(shù)據(jù)庫:USE 數(shù)據(jù)庫名;
創(chuàng)建數(shù)據(jù)庫:CREATE DATABASE 數(shù)據(jù)庫名 CHARACTER SET UTF8;
刪除數(shù)據(jù)庫:DROP DATABASE 數(shù)據(jù)庫名;
修改數(shù)據(jù)庫編碼格式:ALTER DATABASE 數(shù)據(jù)庫名 CHARACTER SET UTF8;
數(shù)據(jù)類型
int:整型
double:浮點(diǎn)型佣赖,如double(5,2)表示長度最多為5雀监,包括小數(shù)點(diǎn)后兩位
char:固定長度字符串镜豹,如char(24)
varchar:可變長度字符串
date:日期類型,格式y(tǒng)yyy-MM-dd
time:時間類型,格式HH:mm:ss
timestamp:時間戳類型
blob:二進(jìn)制形式的長文本數(shù)據(jù)
text:長文本數(shù)據(jù)
表
創(chuàng)建表:CREATE TABLE 表名(列名1 列類型1,列名2 列類型2,...);
查看當(dāng)前數(shù)據(jù)庫中所有表名稱:SHOW TABLES;
查看指定表的創(chuàng)建語句:SHOW CREATE TABLE 表名;
查看表結(jié)構(gòu):DESC 表名;
刪除表:DROP TABLE 表名;
修改表:
??添加列:ALTER TABLE 表名 ADD(列名 列類型);
??修改列類型:ALTER TABLE 表名 MODIFY 列名 列類型;
??修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列類型;
??刪除列:ALTER TABLE 表名 DROP 列名;
??修改表名稱:ALTER TABLE 原表名 RENAME TO 新表名;
2.DML(數(shù)據(jù)庫操作語言)
插入數(shù)據(jù)
INSERT INTO 表名(列名1,列名2,...) VALUES(列值1,列值2,...);
在表名后給出要插入的列名,其他沒有指定的列插入null值例诀,插入記錄只能插入一行,不可能插入部分裁着;
在values后給出列值繁涂,值的順序和個數(shù)必須與前面指定的列對應(yīng)
INSERT INTO 表名 VALUES(列值1,列值2,...);
沒有給出要出入的列,表示插入所有列二驰;
值的個數(shù)必須是該表列的個數(shù)扔罪;
值的順序,必須與表創(chuàng)建時給出的列的順序相同
修改數(shù)據(jù)
UPDATE 表名 SET 列名1=列值1,列名2=列值2,...[WHERE 條件]
條件必須是一個boolean類型的值或表達(dá)式桶雀,常用運(yùn)算符有:=,!=,<>,<,>,>=,<=,BETWEEN...AND,IN(...),IS NULL,NOT,OR,AND
刪除數(shù)據(jù)
DELETE FROM 表名 [WHERE 條件];
3.DCL(數(shù)據(jù)庫控制語言)
創(chuàng)建用戶
CREATE USER 用戶名@IP地址 IDENTIFIED BY '密碼';
??用戶只能在指定的IP地址上登錄
CREATE USET 用戶名@'%' IDENTIFIED BY '密碼';
??用戶可以在任意IP地址上登錄
給用戶授權(quán)
GRANT 權(quán)限1,...,權(quán)限n ON 數(shù)據(jù)庫.* TO 用戶名@IP地址;
??權(quán)限有:CREATE , ALTER , DROP , INSERT , UPDATE , DELETE , SELECT ...ALL
撤銷授權(quán)
REVOKE 權(quán)限1,..., 權(quán)限n ON 數(shù)據(jù)庫.* FROM 用戶名@IP地址;
查看權(quán)限
SHOW GRANTS FOR 用戶名@IP地址
刪除用戶
DROP USER 用戶名@IP地址
4.DQL(數(shù)據(jù)庫查詢語言)
字段(列)控制
查詢所有列:SELECT * FROM 表名;
查詢指定列:SELECT 列名 FROM 表名;
重復(fù)的出現(xiàn)一次:SELECT DISTINCT * FROM 表名;
列運(yùn)算:SELECT 列名 運(yùn)算符 FROM 表名;
??數(shù)量類型的運(yùn)算可以做加矿酵、減、乘矗积、除
??字符串類型列可以做連續(xù)運(yùn)算
SELECT CONCAT(字符串或者列名,字符串或者列名)FROM 表名;
如果存在null值全肮,做運(yùn)算時結(jié)果還是null,所以要使用
SELECT IFNULL(列名棘捣,0)+100 FROM 表名;
??IFNULL(列名辜腺,0):如果列中存在null值,那么當(dāng)成0來運(yùn)算
給列起別名:SELECT 列名 別名 FROM 表名;
條件控制
條件查詢:SELECT 列名1,類名2 FROM 表名 WHERE 條件
模糊查詢:SELECT * FROM 表名 WHERE 列名 like '張';
SELECT * FROM 表名 WHERE 列名 like '張%';
??只匹配一個字符乍恐,%可以匹配0-n個字符评疗;只用一個%,可以把出去null值的查詢出來
排序
升序:SELECT * FROM 表名 ORDER BY 列名 ASC;
降序:SELECT * FROM 表名 ORDER BY 列名 DESC;
多列作為排序條件:SELECT * FROM 表名 ORDER BY 列名1 ASC,列名2 ASC...;如果列1值相同茵烈,則按列2升序排列百匆,后可跟更多條件
聚合函數(shù)
COUNT:統(tǒng)計(jì)不為null的行數(shù)
計(jì)算表中所有列不為null的行數(shù):SELECT COUNT(*) FROM 表名;
計(jì)算表中指定列不為null的行數(shù):SELECT COUNT(列名) FROM 表名;
MAX:查詢最高值
SELECT MAX(列名) FROM 表名;
MIN:查詢最小值
SELECT MIN(列名) FROM 表名;
SUM:查詢總數(shù)
SELECT SUM(列名) FROM 表名;
AVG:查詢平均數(shù)
SELECT AVG(列名) FROM 表名;
分組查詢
查詢所有組的記錄數(shù)
SELECT 列名 ,COUNT() FROM 表名 GROUP BY 列名瞧毙;
組外查詢條件
SELECT 列名 胧华,COUNT() FROM 表名 WHERE 條件 GROUP BY 列名;
組內(nèi)查詢條件
SELECT 列名 , COUNT(*) FROM 表名 GROUP BY 列名 HAVING 條件(聚合函數(shù));
Limit子句(方言)*****
limit用來限定查詢結(jié)果的起始行,以及總行數(shù)宙彪。例如:查詢起始行為第五行,一共查詢3行記錄:
SELECT * FROM 表名 LIMIT 4有巧,3;
4表示從第五行開始释漆,3表示一共有3行記錄
多表查詢
內(nèi)連接
普通的內(nèi)連接
前提:要有外鍵
關(guān)鍵字: inner join A表.字段 on B表.字段
隱式的內(nèi)連接(用得最多)
不用inner join ... on 關(guān)鍵字
select * from dept d, emp e where d.did=e.dno;外連接
左外連接(把左表所有的數(shù)據(jù)查詢出來)
前提:要有外鍵
語法: left [outer] join A表.字段 on B表.字段
select * from dept t1 left join emp t2 on t1.did = t2.dno;右外連接
前提:要有外鍵
語法: right [outer] join A表.字段 on B表.字段
select * from dept t1 right join emp t2 on t1.did = t2.dno;子查詢
查詢的內(nèi)容要用另一個查詢的結(jié)果
select * from emp where ename > (select * from emp where 條件)