1. 程式人生 > > Mysql資料操作語句整理

Mysql資料操作語句整理

文章目錄

.

Mysql資料操作語句整理

1.使用者管理操作

新建使用者:

CREATE USER yourname IDENTIFIED BY 'yourpasswd';

更改密碼:

SET PASSWORD FOR yourname=PASSWORD('newpasswd');

許可權管理:

SHOW GRANTS FOR yourname;   		  	 --檢視yourname使用者許可權
GRANT SELECT ON db_name.* TO yourname; 	--給yourname使用者db_name資料庫的所有許可權
REVOKE SELECT ON db_name.* TO yourname;  --GRANT的反操作,去除許可權;

2.資料庫操作

2.1 檢視資料庫

SHOW DATABASES;

2.2 建立資料庫

CREATE DATABASE db_name;  --db_name為資料庫名

2.3 使用資料庫

USE db_name;

2.4 刪除資料庫

DROP DATABASE db_name;

3.表操作

表的儲存引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支援事務。MyISAM高效不支援全文檢索。設定預設的編碼,防止資料庫中文亂碼。

3.1 建立表

CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, --id值,無符號、非空、遞增——唯一性,可做主鍵。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0,  --設定預設列值
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT charset=utf8;

有時建立的表在資料庫中已經存在了,使用條件判斷來建立資料表

CREATE TABLE IF NOT EXISTS tb_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, --id值,無符號、非空、遞增——唯一性,可做主鍵。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0,  --設定預設列值
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT charset=utf8;

3.2 複製表

CREATE TABLE tb_name2 SELECT * FROM tb_name;

部分複製:

CREATE TABLE tb_name2 SELECT id,name FROM tb_name;

3.3 建立臨時表

CREATE TEMPORARY TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, --id值,無符號、非空、遞增——唯一性,可做主鍵。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0,  --設定預設列值
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT charset=utf8;

3.4 檢視資料庫中可用的表

SHOW TABLES;

3.5 查看錶的結構

DESCRIBE tb_name;

也可以使用:

SHOW COLUMNS in tb_name;
SHOW COLUMNS from tb_name;

3.6 刪除表

DROP [ TEMPORARY ] TABLE [ IF EXISTS ] tb_name[ ,tb_name2……];
DROP TABLE IF EXISTS tb_name;

3.7 表重新命名

RENAME TABLE name_old TO name_new;
ALTER TABLE name_old RENAME name_new;

3.8 更改表結構

ALTER TABLE tb_name ADD[CHANGE,RENAME,DROP] change_content
ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
ALTER TABLE tb_name DROP address;
ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;
ALTER TABLE tb_name MODIFY score CHAR(10);

4.插入資料

4.1 插入資料

INSERT INTO tb_name(id,name,score) VALUES(NULL,'張三',140),(NULL,'張四',178),(NULL,'張五',134);

這裡的插入多條資料直接在後邊加上逗號,直接寫入插入的資料即可;主鍵id是自增的列,可以不用寫。

4.2 插入檢索出來的資料

INSERT INTO tb_name(name,score) SELECT name,score FROM tb_name2;

5.更新資料

5.1 指定更新資料

UPDATE tablename SET columnName=NewValue [ WHERE condition ]
UPDATE tb_name SET score=189 WHERE id=2;

6.刪除資料

6.1 刪除資料

DELETE FROM tb_name WHERE id=3;

7.條件控制

  • 你可以在 WHERE 子句中指定任何條件。
  • 你可以在 WHERE 子句中使用LIKE子句。
  • 你可以使用LIKE子句代替等號 =。
  • LIKE 通常與 % 一同使用,類似於一個元字元的搜尋。
  • 你可以使用 AND 或者 OR 指定一個或多個條件。
  • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句來指定條件。

7.1 WHERE 語句

SELECT * FROM tb_name WHERE id=3;

7.2 HAVING 語句

SELECT * FROM tb_name GROUP BY score HAVING count(*)>2

7.3 模糊查詢

SELECT * from tb_name  WHERE author LIKE '%COM';

7.3 相關條件控制符

=><<>IN(1,2,3……)BETWEEN a AND b、NOT
ANDOR
Linke()用法中 % 為匹配任意、_ 匹配一個字元(可以是漢字)
IS NULL 空值檢測

8.MySQL的正則表示式

8.1 REGEXP正則表示式

SELECT * FROM tb_name WHERE name REGEXP^[A-D]--找出以A-D 為開頭的name

9.MySQL的一些函式

9.1 字串連結

函式 描述 例項
ASCII(s) 返回字串 s 的第一個字元的 ASCII 碼。 返回 CustomerName 欄位第一個字母的 ASCII 碼: SELECT ASCII(CustomerName) AS NumCodeOfFirstChar FROM Customers;
CHAR_LENGTH(s) 返回字串 s 的字元數 返回字串 RUNOOB 的字元數 SELECT CHAR_LENGTH("RUNOOB") AS LengthOfString;
CHARACTER_LENGTH(s) 返回字串 s 的字元數 返回字串 RUNOOB 的字元數 SELECT CHARACTER_LENGTH("RUNOOB") AS LengthOfString;
CONCAT(s1,s2…sn) 字串 s1,s2 等多個字串合併為一個字串 合併多個字串 SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString;
CONCAT_WS(x, s1,s2…sn) 同 CONCAT(s1,s2,…) 函式,但是每個字串直接要加上 x,x 可以是分隔符 合併多個字串,並新增分隔符: SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;
FIELD(s,s1,s2…) 返回第一個字串 s 在字串列表(s1,s2…)中的位置 返回字串 c 在列表值中的位置: SELECT FIELD("c", "a", "b", "c", "d", "e");
FIND_IN_SET(s1,s2) 返回在字串s2中與s1匹配的字串的位置 返回字串 c 在指定字串中的位置: SELECT FIND_IN_SET("c", "a,b,c,d,e");
FORMAT(x,n) 函式可以將數字 x 進行格式化 “#,###.##”, 將 x 保留到小數點後 n 位,最後一位四捨五入。 格式化數字 “#,###.##” 形式: SELECT FORMAT(250500.5634, 2); -- 輸出 250,500.56
INSERT(s1,x,len,s2) 字串 s2 替換 s1 的 x 位置開始長度為 len 的字串 從字串第一個位置開始的 6 個字元替換為 runoob: SELECT INSERT("google.com", 1, 6, "runnob"); -- 輸出:runoob.com
LOCATE(s1,s) 從字串 s 中獲取 s1 的開始位置 獲取 b 在字串 abc 中的位置: SELECT LOCATE('st','myteststring'); -- 5
LCASE(s) 將字串 s 的所有字母變成小寫字母 字串 RUNOOB 轉換為小寫: SELECT LOWER('RUNOOB') -- runoob
LEFT(s,n) 返回字串 s 的前 n 個字元 返回字串 runoob 中的前兩個字元: SELECT LEFT('runoob',2) -- ru
LEFT(s,n) 返回字串 s 的前 n 個字元 返回字串 abcde 的前兩個字元: SELECT LEFT('abcde',2) -- ab
LOCATE(s1,s) 從字串 s 中獲取 s1 的開始位置 返回字串 abc 中 b 的位置: SELECT LOCATE('b', 'abc') -- 2
LOWER(s) 將字串 s 的所有字母變成小寫字母 字串 RUNOOB 轉換為小寫: SELECT LOWER('RUNOOB') -- runoob
LPAD(s1,len,s2) 在字串 s1 的開始處填充字串 s2,使字串長度達到 len 將字串 xx 填充到 abc 字串的開始處: SELECT LPAD('abc',5,'xx') -- xxabc
LTRIM(s) 去掉字串 s 開始處的空格 去掉字串 RUNOOB開始處的空格: SELECT LTRIM(" RUNOOB") AS LeftTrimmedString;-- RUNOOB
MID(s,n,len) 從字串 s 的 start 位置擷取長度為 length 的子字串,同 SUBSTRING(s,n,len) 從字串 RUNOOB 中的第 2 個位置擷取 3個 字元: SELECT MID("RUNOOB", 2, 3) AS ExtractString; -- UNO
POSITION(s1 IN s) 從字串 s 中獲取 s1 的開始位置 返回字串 abc 中 b 的位置: SELECT POSITION('b' in 'abc') -- 2
REPEAT(s,n) 將字串 s 重複 n 次 將字串 runoob 重複三次: SELECT REPEAT('runoob',3) -- runoobrunoobrunoob
REPLACE(s,s1,s2) 將字串 s2 替代字串 s 中的字串 s1 將字串 abc 中的字元 a 替換為字元 x: SELECT REPLACE('abc','a','x') --xbc
REVERSE(s) 將字串s的順序反過來 將字串 abc 的順序反過來: SELECT REVERSE('abc') -- cba
RIGHT(s,n) 返回字串 s 的後 n 個字元 返回字串 runoob 的後兩個字元: SELECT RIGHT('runoob',2) -- ob
RPAD(s1,len,s2) 在字串 s1 的結尾處新增字串 s1,使字串的長度達到 len 將字串 xx 填充到 abc 字串的結尾處: SELECT RPAD('abc',5,'xx') -- abcxx
RTRIM(s) 去掉字串 s 結尾處的空格 去掉字串 RUNOOB 的末尾空格: SELECT RTRIM("RUNOOB ") AS RightTrimmedString; -- RUNOOB
SPACE(n) 返回 n 個空格 返回 10 個空格: SELECT SPACE(10);
STRCMP(s1,s2) 比較字串 s1 和 s2,如果 s1 與 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1 比較字串: SELECT STRCMP("runoob", "runoob"); -- 0
SUBSTR(s, start, length) 從字串 s 的 start 位置擷取長度為 length 的子字串 從字串 RUNOOB 中的第 2 個位置擷取 3個 字元: SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
SUBSTRING(s, start, length) 從字串 s 的 start 位置擷取長度為 length 的子字串 從字串 RUNOOB 中的第 2 個位置擷取 3個 字元: SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO
SUBSTRING_INDEX(s, delimiter, number) 返回從字串 s 的第 number 個出現的分隔符 delimiter 之後的子串。 如果 number 是正數,返回第 number 個字元左邊的字串。 如果 number 是負數,返回第(number 的絕對值(從右邊數))個字元右邊的字串。 SELECT SUBSTRING_INDEX('a*b','*',1) -- a SELECT SUBSTRING_INDEX('a*b','*',-1) -- b SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1) -- c
TRIM(s) 去掉字串 s 開始和結尾處的空格 去掉字串 RUNOOB 的首尾空格: SELECT TRIM(' RUNOOB ') AS TrimmedString;
UCASE(s) 將字串轉換為大寫 將字串 runoob 轉換為大寫: SELECT UCASE("runoob"); -- RUNOOB
UPPER(s) 將字串轉換為大寫 將字串 runoob 轉換為大寫: SELECT UPPER("runoob"); -- RUNOOB

9.2 數學函式

AVG、SUM、MAX、MIN、COUNT;
函式名 描述 例項
ABS(x) 返回 x 的絕對值 返回 -1 的絕對值: SELECT ABS(-1) -- 返回1
ACOS(x) 求 x 的反餘弦值(引數是弧度) SELECT ACOS(0.25);
ASIN(x) 求反正弦值(引數是弧度) SELECT ASIN(0.25);
ATAN(x) 求反正切值(引數是弧度) SELECT ATAN(2.5);
ATAN2(n, m) 求反正切值(引數是弧度) SELECT ATAN2(-0.8, 2);
AVG(expression) 返回一個表示式的平均值,expression 是一個欄位 返回 Products 表中Price 欄位的平均值: SELECT AVG(Price) AS AveragePrice FROM Products;
CEIL(x) 返回大於或等於 x 的最小整數 SELECT CEIL(1.5) -- 返回2
CEILING(x) 返回大於或等於 x 的最小整數 SELECT CEIL(1.5) -- 返回2
COS(x) 求餘弦值(引數是弧度) SELECT COS(2);
COT(x) 求餘切值(引數是弧度) SELECT COT(6);
COUNT(expression) 返回查詢的記錄總數,expression 引數是一個欄位或者 * 號 返回 Products 表中 products 欄位總共有多少條記錄: SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;
DEGREES(x) 將弧度轉換為角度 SELECT DEGREES(3.1415926535898) -- 180
n DIV m 整除,n 為被除數,m 為除數 計算 10 除於 5: SELECT 10 DIV 5; -- 2
EXP(x) 返回 e 的 x 次方 計算 e 的三次方: SELECT EXP(3) -- 20.085536923188
FLOOR(x) 返回小於或等於 x 的最大整數 小於或等於 1.5 的整數: SELECT FLOOR(1.5) -- 返回1
GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值 返回以下數字列表中的最大值: SELECT GREATEST(3, 12, 34, 8, 25); -- 34 返回以下字串列表中的最大值:SELECT GREATEST("Google", "Runoob", "Apple"); -- Runoob
LEAST(expr1, expr2, expr3, …) 返回列表中的最小值 返回以下數字列表中的最小值: SELECT LEAST(3, 12, 34, 8, 25); -- 3 返回以下字串列表中的最小值:SELECT LEAST("Google", "Runoob", "Apple"); -- Apple
LN 返回數字的自然對數 返回 2 的自然對數: SELECT LN(2); -- 0.6931471805599453
LOG(x) 返回自然對數(以 e 為底的對數) SELECT LOG(20.085536923188) -- 3
LOG10(x) 返回以 10 為底的對數 SELECT LOG10(100) -- 2
LOG2(x) 返回以 2 為底的對數 返回以 2 為底 6 的對數: SELECT LOG2(6); -- 2.584962500721156
MAX(expression) 返回欄位 expression 中的最大值 返回資料表 Products 中欄位 Price 的最大值: SELECT MAX(Price) AS LargestPrice FROM Products;
MIN(expression) 返回欄位 expression 中的最小值 返回資料表 Products 中欄位 Price 的最小值: SELECT MIN(Price) AS LargestPrice FROM Products;
MOD(x,y) 返回 x 除以 y 以後的餘數 5 除於 2 的餘數: SELECT MOD(5,2) -- 1
PI() 返回圓周率(3.141593) SELECT PI() --3.141593
POW(x,y) 返回 x 的 y 次方 2 的 3 次方: SELECT POW(2,3) -- 8
POWER(x,y) 返回 x 的 y 次方 2 的 3 次方: SELECT POWER(2,3) -- 8
RADIANS(x) 將角度轉換為弧度 180 度轉換為弧度: SELECT RADIANS(180) -- 3.1415926535898
RAND() 返回 0 到 1 的隨機數 SELECT RAND() --0.93099315644334
ROUND(x) 返回離 x 最近的整數 SELECT ROUND(1.23456) --1
SIGN(x) 返回 x 的符號,x 是負數、0、正數分別返回 -1、0 和 1 SELECT SIGN(-10) -- (-1)
SIN(x) 求正弦值(引數是弧度) SELECT SIN(RADIANS(30)) -- 0.5
SQRT(x) 返回x的平方根 25 的平方根: SELECT SQRT(25) -- 5
SUM(expression) 返回指定欄位的總和 計算 OrderDetails 表中欄位 Quantity 的總和: SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
TAN(x) 求正切值(引數是弧度) SELECT TAN(1.75); -- -5.52037992250933
TRUNCATE(x,y) 返回數值 x 保留到小數點後 y 位的值(與 ROUND 最大的區別是不會進行四捨五入) SELECT TRUNCATE(1.23456,3) -- 1.234

9.3 高階函式

函式名 描述 例項
BIN(x) 返回 x 的二進位制編碼 15 的 2 進位制編碼: SELECT BIN(15); -- 1111
BINARY(s) 將字串 s 轉換為二進位制字串 SELECT BINARY "RUNOOB"; -> RUNOOB
CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END CASE 表示函式開始,END 表示函式結束。如果 condition1 成立,則返回 result1, 如果 condition2 成立,則返回 result2,當全部不成立則返回 result,而當有一個成立之後,後面的就不執行了。 SELECT CASE   WHEN 1 > 0   THEN '1 > 0'   WHEN 2 > 0   THEN '2 > 0'   ELSE '3 > 0'   END ->1 > 0
CAST(x AS type) 轉換資料型別 字串日期轉換為日期: SELECT CAST("2017-08-29" AS DATE); -> 2017-08-29
COALESCE(expr1, expr2, …, expr_n) 返回引數中的第一個非空表示式(從左向右) SELECT COALESCE(NULL, NULL, NULL, 'runoob.com', NULL, 'google.com'); -> runoob.com
CONNECTION_ID() 返回伺服器的連線數 SELECT CONNECTION_ID(); -> 4292835
CONV(x,f1,f2) 返回 f1 進位制數變成 f2 進位制數 SELECT CONV(15, 10, 2); -> 1111
CONVERT(s USING cs) 函式將字串 s 的字符集變成 cs SELECT CHARSET('ABC') ->utf-8 SELECT CHARSET(CONVERT('ABC' USING gbk)) ->gbk
CURRENT_USER() 返回當前使用者 SELECT CURRENT_USER(); -> [email protected]%
DATABASE() 返回當前資料庫名 SELECT DATABASE(); -> runoob
IF(expr,v1,v2) 如果表示式 expr 成立,返回結果 v1;否則,返回結果 v2。 SELECT IF(1 > 0,'正確','錯誤') ->正確
IFNULL(v1,v2) 如果 v1 的值不為 NULL,則返回 v1,否則返回 v2。 SELECT IFNULL(null,'Hello Word') ->Hello Word
ISNULL(expression) 判斷表示式是否為 NULL SELECT ISNULL(NULL); ->1
LAST_INSERT_ID() 返回最近生成的 AUTO_INCREMENT 值 SELECT LAST_INSERT_ID(); ->6
NULLIF(expr1, expr2) 比較兩個字串,如果字串 expr1 與 expr2 相等 返回 NULL,否則返回 expr1 SELECT NULLIF(25, 25); ->
SESSION_USER() 返回當前使用者 SELECT SESSION_USER(); -> [email protected]%
SYSTEM_USER() 返回當前使用者 SELECT SYSTEM_USER(); -> [email protected]%
USER() 返回當前使用者 SELECT USER(); -> [email protected]%
VERSION() 返回資料庫的版本號 SELECT VERSION() -> 5.6.34

9.4 運算子

+、-、*、\

9.5 時間函式

函式名 描述 例項
ADDDATE(d,n) 計算其實日期 d 加上 n 天的日期 SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY); ->2017-06-25
ADDTIME(t,n) 時間 t 加上 n 秒的時間 SELECT ADDTIME('2011-11-11 11:11:11', 5) ->2011-11-11 11:11:16 (秒)
CURDATE() 返回當前日期 SELECT CURDATE(); -> 2018-09-19
CURRENT_DATE() 返回當前日期 SELECT CURRENT_DATE(); -> 2018-09-19
CURRENT_TIME 返回當前時間 SELECT CURRENT_TIME(); -> 19:59:02
CURRENT_TIMESTAMP() 返回當前日期和時間 SELECT CURRENT_TIMESTAMP() -> 2018-09-19 20:57:43
CURTIME() 返回當前時間 SELECT CURTIME(); -> 19:59:02
DATE() 從日期或日期時間表達式中提取日期值 SELECT DATE("2017-06-15"); -> 2017-06-15
DATEDIFF(d1,d2) 計算日期 d1->d2 之間相隔的天數 SELECT DATEDIFF('2001-01-01','2001-02-02') -> -32
DATE_ADD(d,INTERVAL expr type) 計算起始日期 d 加上一個時間段後的日期 SELECT ADDDATE('2011-11-11 11:11:11',1) -> 2011-11-12 11:11:11 (預設是天) SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE) -> 2011-11-11 11:16:11 (TYPE的取值與上面那個列出來的函式類似)
DATE_FORMAT(d,f) 按表示式 f的要求顯示日期 d SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r') -> 2011-11-11 11:11:11 AM
DATE_SUB(date,INTERVAL expr type) 函式從日期減去指定的時間間隔。 Orders 表中 OrderDate 欄位減去 2 天: SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders
DAY(d) 返回日期值 d 的日期部分 SELECT DAY("2017-06-15"); -> 15
DAYNAME(d) 返回日期 d 是星期幾,如 Monday,Tuesday SELECT DAYNAME('2011-11-11 11:11:11') ->Friday
DAYOFMONTH(d) 計算日期 d 是本月的第幾天 SELECT DAYOFMONTH('2011-11-11 11:11:11') ->11
DAYOFWEEK(d) 日期 d 今天是星期幾,1 星期日,2 星期一,以此類推 SELECT DAYOFWEEK('2011-11-11 11:11:11') ->6
DAYOFYEAR(d) 計算日期 d 是本年的第幾天 SELECT DAYOFYEAR('2011-11-11 11:11:11') ->315
EXTRACT(type FROM d) 從日期 d 中獲取指定的值,type 指定返回的值。 type可取值為: MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11') -> 11
FROM_DAYS(n) 計算從 0000 年 1 月 1 日開始 n 天后的日期 SELECT FROM_DAYS(1111) -> 0003-01-16
HOUR(t) 返回 t 中的小時值 SELECT HOUR('1:2:3') -> 1
LAST_DAY(d) 返回給給定日期的那一月份的最後一天 SELECT LAST_DAY("2017-06-20"); -> 2017-06-30
LOCALTIME() 返回當前日期和時間 SELECT LOCALTIME() -> 2018-09-19 20:57:43
LOCALTIMESTAMP() 返回當前日期和時間 SELECT LOCALTIMESTAMP() -> 2018-09-19 20:57:43
MAKEDATE(year, day-of-year) 基於給定引數年份 year 和所在年中的天數序號 day-of-year 返回一個日期 SELECT MAKEDATE(2017, 3); -> 2017-01-03
MAKETIME(hour, minute, second) 組合時間,引數分別為小時、分鐘、秒 SELECT MAKETIME(11, 35, 4); -> 11:35:04
MICROSECOND(date) 返回日期引數所對應的毫秒數 SELECT MICROSECOND("2017-06-20 09:34:00.000023"); -> 23
MINUTE(t) 返回 t 中的分鐘值 SELECT MINUTE('1:2:3') -> 2
MONTHNAME(d) 返回日期當中的月份名稱,如 Janyary SELECT MONTHNAME('2011-11-11 11:11:11') -> November
MONTH(d) 返回日期d中的月份值,1 到 12 SELECT MONTH('2011-11-11 11:11:11') ->11
NOW() 返回當前日期和時間 SELECT NOW() -> 2018-09-19 20:57:43
PERIOD_ADD(period, number) 為 年-月 組合日期新增一個時段 SELECT PERIOD_ADD(201703, 5); -> 201708
PERIOD_DIFF(period1, period2) 返回兩個時段之間的月份差值 SELECT PERIOD_DIFF(201710, 201703); -> 7
QUARTER(d) 返回日期d是第幾季節,返回 1 到 4 SELECT QUARTER('2011-11-11 11:11:11') -> 4
SECOND(t) 返回 t 中的秒鐘值 SELECT SECOND('1:2:3') -> 3
SEC_TO_TIME(s) 將以秒為單位的時間 s 轉換為時分秒的格式 SELECT SEC_TO_TIME(4320) -> 01:12:00
STR_TO_DATE(string, format_mask) 將字串轉變為日期 SELECT STR_TO_DATE("August 10 2017", "%M %d %Y"); -> 2017-08-10
SUBDATE(d,n) 日期 d 減去 n 天后的日期 SELECT SUBDATE('2011-11-11 11:11:11', 1) ->2011-11-10 11:11:11 (預設是天)
SUBTIME(t,n) 時間 t 減去 n 秒的時間 SELECT SUBTIME('2011-11-11 11:11:11', 5) ->2011-11-11 11:11:06 (秒)
SYSDATE() 返回當前日期和時間 SELECT SYSDATE() -> 2018-09-19 20:57:43
TIME(expression) 提取傳入表示式的時間部分 SELECT TIME("19:30:10"); -> 19:30:10
TIME_FORMAT(t,f) 按表示式 f 的要求顯示時間 t SELECT TIME_FORMAT('11:11:11','%r') 11:11:11 AM
TIME_TO_SEC(t) 將時間 t 轉換為秒 SELECT TIME_TO_SEC('1:12:00') -> 4320
TIMEDIFF(time1, time2) 計算時間差值 SELECT TIMEDIFF("13:10:11", "13:10:10"); -> 00:00:01
TIMESTAMP(expression, interval) 單個引數時,函式返回日期或日期時間表達式;有2個引數時,將引數加和 SELECT TIMESTAMP("2017-07-23", "13:10:11"); -> 2017-07-23 13:10:11
TO_DAYS(d) 計算日期 d 距離 0000 年 1 月 1 日的天數 SELECT TO_DAYS('0001-01-01 01:01:01') -> 366
WEEK(d) 計算日期 d 是本年的第幾個星期,範圍是 0 到 53 SELECT WEEK('2011-11-11 11:11:11') -> 45
WEEKDAY(d) 日期 d 是星期幾,0 表示星期一,1 表示星期二 SELECT WEEKDAY("2017-06-15"); -> 3
WEEKOFYEAR(d) 計算日期 d 是本年的第幾個星期,範圍是 0 到 53 SELECT WEEKOFYEAR('2011-11-11 11:11:11') -> 45
YEAR(d) 返回年份 SELECT YEAR("2017-06-15"); -> 2017
YEARWEEK(date, mode) 返回年份及第幾周(0到53),mode 中 0 表示周天,1表示週一,以此類推 SELECT YEARWEEK("2017-06-15"); -> 201724

10.分組查詢

10.1 指定列進行分組

SELECT COUNT(*) FROM tb_name GROUP BY score HAVING COUNT(*)>1;

10.2 條件使用Having

分組後的條件使用 HAVING 來限定,WHERE 是對原始資料進行條件限制。幾個關鍵字的使用順序為 where 、group by 、having、order by

SELECT name ,sum(*)  FROM tb_name WHERE id<>1 GROUP BY name  HAVING sum(*)>5 ORDER BY sum(*) DESC;

10.3 ORDER BY 排序

SELECT name, COUNT(*) FROM tb_name GROUP BY name DESC; --DESC|ASC=>降序和升序排列

11.UNION規則

11.1 UNION 語句

用於將不同表中相同列中查詢的資料展示出來(不包括重複資料)

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country; 

11.2 UNION ALL 語句

用於將不同表中相同列中查詢的資料展示出來(包括重複資料)

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country; 

12.全文檢索

SELECT MATCH(note_text)AGAINST('PICASO') FROM tb_name;

InnoDB引擎不支援全文檢索,MyISAM可以。

13.檢視

檢視只是用來查詢資料並不能用來儲存資料資訊。對檢視中的資料進行增加或刪除操作和基本表操作是一樣的。

13.1 建立檢視