1. 程式人生 > >MYSQL常用函數以及如何操作數據

MYSQL常用函數以及如何操作數據

decode let 開始 其中 like ase 時間 名稱 bstr

-- 【SQL語句的組成】

-- DML數據操作語言 (插入、修改和刪除數據庫中的數據) INSERT UPDATE DELETE

-- DQL數據查詢語言 (用來查詢數據庫中的數據) SELECT

-- DCL數據控制語言 (用來控制存取許可、存取權限等) GRANT REVOKE

-- DDL數據定義語言 (用來建立數據庫、數據庫對象和定義表的列) CREATE DROP

USE mydb;

CREATE TABLE IF NOT EXISTS tb2( id INT UNSIGNED PRIMARY KEY auto_increment,

username VARCHAR(255) NOT NULL,

age INT DEFAULT 0,

sex enum("男","女") DEFAULT "男"

);

SHOW COLUMNS FROM tb2;

-- 數據插入語句 INSERT -- INSERT[INTO] 表名 (列名) VALUES (列值)[,(列值),……];

-- ①如果省略列名,則後面的列值必須為所有的列賦值,包括自增列和默認列。

-- ②如果不省略列名,則後面的列值需要與前面的列名一一對應;並且需要給所有非null列賦值 INSERT INTO tb2(username,age,sex) VALUES ("張三",12,"女"); INSERT tb2 VALUES (7,"張三",12,"女"); INSERT INTO tb2(username,age,sex) VALUES ("張三",12,"女"),("張三",12,"女"),("張三",12,"女"),("張三",12,"女");

-- 數據更新語句

-- UPDATE 表名 SET 列名=列值[,列名=列值,……] [WHERE 條件]

-- ① WHERE條件可以省略,但是表示修改表中所有的行 UPDATE tb2 SET sex="男"; UPDATE tb2 SET username="李小二",age=18,sex="女" WHERE id=8

/*[常用where條件判斷]

1、關系運算 > < = != <> >= <=

2、邏輯運算 NOT AND OR

3、 ISNULL(字段)檢測是否為空 SELECT * FROM tb2 WHERE NOT ISNULL(age);

-- 所有年齡為空的用戶

4、BETWEEN……AND……介於兩個值之間 SELECT * FROM tb2 WHERE age BETWEEN 10 AND 14;

-- 相當於 age>=10 and age<=14

5、in 在某些值之間的數據 SELECT * FROM tb2 WHERE id in(1,3,5,7,9);

6、LIKE 相似匹配

①相似匹配時,使用%表示任意字符個數(0到多個);

SELECT * FROM tb2 WHERE username LIKE "%張%"; -- "張%"->用"張"開頭 ("%張"->用"張"結尾 "%張%"->任意位置包含"張")

②相似匹配時,使用_表示一個字符的個數;

SELECT * FROM tb2 WHERE username LIKE "_二%"; -- 第二個子是"二"的

7、EXISTS(子查詢語句):

如果子查詢與返回數據>=1行,則EXISTS返回true,否則返回false,

SELECT * FROM tb2 WHERE EXISTS(SELECT * FROM tb3);

-- 如果tb3返回至少一行數據,則條件成立

8、ALL(子查詢):子查詢返回的數據,需要全部滿足,才能成立:

SELECT * FROM tb1 WHERE username !=ALL (SELECT username FROM tb1 WHERE id>7);

-- 用戶名 不能等於 子查詢返回用戶名列表中的任意一個;

9、ANY(子查詢):子查詢返回的數組,滿足其中一個,即可成立:

SELECT * FROM tb1 WHERE username =ANY (SELECT username FROM tb1 WHERE id>7);

-- 用戶名 等於 子查詢返回用戶名列表中的任意一個; */

-- 刪除表中數據

-- DELETE [FROM] 表名 [WHERE 條件] DELETE FROM tb1 WHERE id>11;

SELECT * FROM tb2 WHERE EXISTS(SELECT * FROM tb2 WHERE username="李小二");

SELECT * FROM tb2 WHERE username LIKE "__二";

SELECT * FROM tb2 WHERE username LIKE "%張%";

SELECT * FROM tb2 WHERE id in(1,3,5,7,9);

SELECT * FROM tb2 WHERE age BETWEEN 10 AND 14;

SELECT * FROM tb2 WHERE NOT ISNULL(age);

SELECT * FROM tb2;

-- 數據查詢語句

-- SELECT 列名,[列名,……] FROM 表名 WHERE 條件 ORDER BY 排序的列名 ASC/DESC

-- ①SELECT * 表示查詢所有字段;

-- ② ORDER BY 表示對查出的數據進行排序,必須在where後面;

-- ASC 表示升序排列 DESC 表示降序排列 SELECT * FROM tb2 ORDER BY id DESC

-- 列表達式

-- 根據已有的列,查詢出來的結果,我們使用case結構虛擬出來的列,稱為列表達式

-- AS 關鍵字

-- 用於給列名起別名,AS關鍵字還可以省略。 SELECT username as ‘名字‘,sex ‘性別‘,age,

-- 給username列起別名"名字",sex起別名"性別"

( CASE -- 表示判斷的開始 WHEN sex="男"

THEN 1 -- 如果查詢出sex是男,則虛擬的列表達式的值就是1

WHEN sex="女" THEN 2 ELSE 3 -- 上面所有的when都不成立時,列表達式的值為3

END -- 表示判斷的結束 )

as sexno -- 給虛擬出的這一列,起別名叫sexno

FROM tb2;

-- DISTINCT 對查詢之後的結果去重。

* ABS(X) 返回X的絕對值

CEIL(X) 向上取整 1.5->2

FLOOR(X) 向下取整 -1.5->-2 1.5->1

ROUND(X) 四舍五入取整 ROUND(X,D) 將X保留D位小數,進行四舍五入

TRUNCATE`(X,D) 將X保留D位小數,不進行四舍五入

SIGN(X) x是負數返回-1 正數返回1,0返回0

POW(X,Y) 返回X的Y次冪 PI() 返回圓周率 */

SELECT CEIL(1.5) SELECT ABS(-1)

SELECT * FROM tb1

/* LENGTH(str):返回字符串的長度。其中一個中文占3個長度;

CHAR_LENGTH(str): 返回字符串的字符數。其中一個中文只占一個字符;

CONCAT(str1,str2,...) 拼接多個字符串

UPPER(str):將字符串全部轉為大寫;

LOWER(str):將字符串全部轉為小寫;

LEFT(str,n): 返回字符串的前n個字符;

RIGHT(str,n):返回字符串的後n個字符;

TRIM(str):去掉str左右兩邊的空格

REPLACE(str,s1,s2): 將字符串str中所有的s1換成s2

SUBSTRING(str,pos,len):截取字符串str,從pos個字符開始,截取len個。如果省略len,則從position開始截取到最後

INSTR(str,s1):返回s1在str的下標

INSTR("12-23","-")-->3 下標從1開始

【字符串轉數字格式】

SELECT CAST("-123" AS SIGNED);

SELECT CONVERT("123",SIGNED);

SELECT "123"+0; */

SELECT CONCAT("123","456","789");

/*[常用日期函數]

CURDATE():返回當前日期。2016-06-20

CURTIME():返回當前時間。09:52:52

NOW():返回當前的日期和時間

DATEDIFF(date1,date2):返回date1與date2之間的間隔天數

ADDDATE(dateTime1,days):返回dateTime1加上days天後的日期

YEAR(date):返回日期中的年份

MONTH(date):返回日期中的月份

DAY(date):返回日期中一個月中的第幾天

WEEK(date[,mode]):返回一個周中的第幾天 0->周一

HOUR(time):返回小時數

MINUTE(time): 返回分鐘數

SECOND(time):返回秒數

DATE_FORMAT(date1,format): 將date1使用format要求的格式顯示。

format中可用的占位符格式:

%Y年份, 數字形式,4位數

%y年份, 數字形式 (2位數)

%M月份名稱 (January..December)

%m月份, 數字形式 (00..12)

%b月份的縮寫名稱 (Jan..Dec)

%c月份,數字形式(0..12)

%D帶有英語後綴的該月日期 (0th, 1st, 2nd, 3rd, ...)

%d該月日期, 數字形式 (00..31)

%e該月日期, 數字形式(0..31)

%H小時(00..23)

%h小時(01..12)

%k小時(0..23)

%l小時(1..12)

%i分鐘,數字形式 (00..59)

%S秒 (00..59)

%s秒 (00..59)

%W工作日名稱 (周日..周六)

%w一周中的每日 (0=周日..6=周六)

*/ SELECT CURDATE();

SELECT

/*[系統信息函數]

VERSION(): 取到當前數據庫的版本號

DATABASE(): 返回當前數據庫的名字

USER():返回當前數據庫的用戶

CHARSET(str):返回字符串的字符集

LAST_INSERT_ID():返回最後一個auto_increment的值

*/

/*[加密函數]

1、PASSWORD(str):對字符串進行加密,常用於加密密碼;

2、MD5(str):對字符串進行MD5散列加密,常用於不需要解密的數據;

3、ENCODE(str,pwd):使用加密密碼pwd對字符串str進行加密; 加密之後的結果是二進制,該字段需要使用BLOB類型保存。

DECODE(mistr,pwd):將ENCODE加密的二進制進行解密,解密密碼需與ENCODE的加密密碼一致。 */

SELECT PASSWORD("lalalal");

/*[多行函數]

1、SUM():求和 SELECT SUM(age) FROM tb2;

2、AVG(): 求平均值 SELECT AVG(age) FROM tb2;

3、MIN():求最小值

4、MAX():求最大值

5、COUNT():求總個數

SELECT COUNT(username) FROM tb2;

MYSQL常用函數以及如何操作數據