首页 > 代码库 > MYSQL常用函数以及如何操作数据

MYSQL常用函数以及如何操作数据

-- 【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常用函数以及如何操作数据