首页 > 代码库 > 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常用函数以及如何操作数据