⒈常見命令
命令 | 說明 |
show databases; | 顯示數據庫列表 |
use DataBaseName; | 打開指定的數據庫 |
show tables; | 顯示當前打開數據庫的表列表 |
show tables from DataBaseName; | 顯示指定數據庫的表列表 |
select database(); | 顯示當前命令指向的數據庫 |
create table TableName(id int,name varchar(50)); | 創建表 |
desc TableName; | 查看表結構 |
show index from TableName | 查看表索引 |
select * from TableName; | 查詢表數據 |
insert into TableName(id,name) values(1,'fanqi'),(2,'gaoxing'); | 插入數據 |
SET SQL_SAFE_UPDATES = 0; | 禁用MySql安全更新模式 |
update TableName set name='fanqi' where id = 1; | 更新數據 |
delete from TableName where id = 2; | 刪除數據 |
select version(); | 查詢當前MySql版本 |
*如果某些字段名與MySql保留關鍵字一致,則加上`字段名`着重號即可。
*MySql有兩種通配符
1.% 代表任意多個字符,包括0個字符
2._ 代表任意單個字符
MySql必要時需要使用'\'轉義符,也可以使用escape聲明特定的轉義符
*is null 和<=>(安全等於)的區別
is null | 僅僅可以判斷null值,可讀性較高,建議使用 |
<=> | 既可以判斷null值,也可以判斷普通數值,可讀性較低 |
*排序中,asc代表升序,desc代表降序,默認asc升序。
⒉常見函數
1.字符串類
命令 | 說明 |
select concat('fan','_','qi'); | 字符串連接 |
select ifnull(null,10); | 判斷是否為空,參數1是判斷的表達式或值 參數2是如果為空返回的值 |
select length('fanqi'); | 顯示長度 *UTF-8編碼一個漢字3個字節 *GBK編碼一個漢字2個字節 |
select upper('fanqi'); | 將參數轉化為大寫 |
select lower('FANQI'); | 將參數轉化為小寫 |
select substr('fanqi is very good',6); select substring('fanqi is very good',6); |
功能一樣,另一個為簡寫,截取字符串 *SQL中索引從1開始 |
select instr('fanqi is very good','fanqi'); |
返回指定字符第一次出現的索引,如果找不到 則返回0 |
select trim('a' from 'aaaaaa樊奇aaaaa'); |
去除字符串中指定字符,如未指定則默認空格 |
select lpad('fanqi',2,'*'); |
用指定的字符實現左填充指定長度 *原字符已超出指定長度,則會自動從左截取 |
select rpad('fanqi',2,'*'); |
用指定的字符實現右填充指定長度 |
select replace('fanqi is very good','fanqi','樊奇'); |
替換指定的字符串 |
2.數學函數
select round(1.1923,2); | 四舍五入,如果不指定保留的小數位數 則默認只保留整數 |
select ceil(1.1923); | 向上取整,返回>=該參數的最小整數 |
select floor(1.1923); | 向下取整,返回<=該參數的最大整數 |
select truncate(1.1923,1); | 截斷,后面有什么都不要了 第二個參數是保留的小數位 |
select mod(10,3); | 取余,mod(a,b) 計算機內部取余公式 a-a/b*b 若a為正,則取余結果為正 若a為負,則取余結果為負 |
3.日期函數
select now(); | 返回當前系統日期+時間 |
select curdate(); | 返回當前系統日期,不包含時間 |
select curtime(); | 返回當前系統時間,不包含日期 |
select year(now()); |
可以獲取日期中指定的部分 年、月、日、時、分、秒 |
select str_to_date('1994-06-24','%Y-%c-%d'); | 將字符串通過指定的格式轉換成日期 格式符詳見下表 |
select date_format(now(),'%Y年%c月%d日'); | 將日期通過指定的合適轉換成字符串 格式符詳見下表 |
select datediff(now(),'1994-06-24'); | 計算兩個日期之間相差的天數 |
附加:
序號 | 格式符 | 含義 |
1 | %Y | 4位的年份 |
2 | %y | 2位的年份 |
3 | %m | 月份(01,02,... 12) |
4 | %c | 月份(1,2,... 12) |
5 | %d | 日(01,02,...) |
6 | %H | 小時(24小時制) |
7 | %h | 小時(12小時制) |
8 | %i | 分鍾(00,01,02,... 59) |
9 | %s | 秒(00,01,02,... 59) |
4.其它函數
select version(); | 查看當前MySql版本 |
select database(); | 查看當前打開的庫 |
select user(); | 查看當前用戶 |
select md5('fanqi'); | 返回當前字符串的md5加密形式 |
5.流程控制函數
①if函數,提供類似於if elst的效果,三目運算符。
1 select if(10<5,'大','小');
②case函數,有兩種用法
Ⅰ類似於switch case的效果(既可以當表達式又可以單獨出來作為語句)
語法:
case 要判斷的字段或表達式
when 常量1 then 要顯示的值1或語句1; //如果為值得話此處不加分號
when 常量2 then 要顯示的值2或語句2; //
........
else 默認要顯示的值n或語句n
end
案例:查詢員工的工資,要求
部門號=30,顯示的工資為1.1倍
部門號=40,顯示的工資為1.2倍
部門號=50,顯示的工資為1.3倍
其它部門,顯示的工資為原工資
1 select salary 原始工資,department_id, 2 case department_id 3 when 30 then salary * 1.1 4 when 40 then salary * 1.2 5 when 50 then salary * 1.3 6 else salary 7 end as 新工資 8 from employees;
Ⅱ類似於多重if
語法:
case
when 條件1 then 要顯示的值1或語句1
when 條件2 then 要顯示的值2或語句2
.......
else 默認要顯示的值n或語句n
end
案例:查詢員工的工資情況
如果工資>20000,顯示A級別
如果工資>15000,顯示B級別
如果工資>10000,顯示C級別
否則,顯示D級別
1 select salary 原始工資 2 case 3 when salary > 20000 then 'A' 4 when salary > 15000 then 'B' 5 when salary > 10000 then 'C' 6 else 'D' 7 end as 工資級別 8 from employees;
6.分組函數
用於統計使用,又稱之為聚合函數或統計函數或組函數
sum | 求和 |
avg | 求平均值 |
max | 最大值 |
min | 最小值 |
count | 計算個數 |
sum、avg一般用於處理數值型,max、min、count可以處理任何類型
以上分組函數全部忽略null值,null不參與它們的運算
可以和distinct搭配實現去重的運算
select count(字段) from 表名; //計算非null的行數
select count(*) from 表名; //一般用於統計表的行數(帶null)
select count(7) from 表名; //相當於在表中加了一列常量值,一般用於統計行數