MySQL 快速入门(下篇)

7.MySQL数据操作

  • 添加记录
    1. INSERT [INTO] tbl_name[(col_name,…)] {VALUE|VALUES}(VALUES…);
    2. 不指定字段名称
    INSERT tbl_name VALUE(value…)
    需要按照建表时的字段顺序给每一个字段赋值
    3. 列出指定字段:INSERT tbl_name(字段名称,…) VALUES(值,…)
    4. INSERT … SET的形式:INSERT tbl_name SET 字段名称=值,…;
    5. INSERT … SELECT:INSERT tbl_name[(字段名称…)] SELECT 字段名称,… FROM tbl_name [WHERE 条件]
    6. 一次添加多条记录:INSERT tbl_name[(字段名称,…)] VALUES(值,…),(值,…),(值,…)

举例:

-- 不指定字段名称
INSERT user VALUE(1,'king',24,'382771946@qq.com');
INSERT user VALUES(NULL,'queen',25,'queen@qq.com');
INSERT user VALUES(DEFAULT,'lily',26,'lily@qq.com');

-- 列出指定字段形式
INSERT user(username,email) VALUES('rose','rose@qq.com');

-- 一次插入3条记录
INSERT user VALUES(NULL,'a',DEFAULT,DEFAULT),
(NULL,'b',56,'b@qq.com'),
(NULL,'c',14,'c@qq.com');
  • 修改记录
    1. UPDATE tbl_name SET 字段名称=值,字段名称=值 [WHERE 条件]
    2. 如果不添加条件,整个表中的记录都会被更新

举例:

-- 修改user表中id=3的用户,username age email字段,数据自定义sql语句:
UPDATE user SET age=47,email='lily@qq.com',username='lily' WHERE id=3;

-- user表中所有用户的年龄加10
UPDATE user SET age=age+10;

-- 将user表中id<=5的用户年龄减20,邮箱改为默认邮箱
UPDATE user SET age=age-20,email=DEFAULT WHERE id<=5;
  • 删除记录
    1. DELETE FROM tbl_name [WHERE 条件]
    2. 如果不添加条件,表中所有记录都会被删除
    3. DELETE 清空数据表的时候不会重置AUTO_INCREMENT的值,可以通过ALTER 语句将其重置为1
    4. 彻底清空数据表彻底清空数据表:TRUNCATE [TABLE] tbl_name;
    清除表中所有记录,会重置AUTO_INCREMENT的值

举例:

-- 删除用户名为King
DELETE FROM user WHERE username='king';

-- 删除表中的所有记录
DELETE FROM user;

-- DELETE 清空数据表的时候不会重置AUTO_INCREMENT的值,可以通过ALTER 语句将其重置为1
ALTER TABLE user AUTO_INCREMENT=1;

-- 彻底清空数据表
TRUNCATE user;
  • 查询记录
SELECT select_expr,... FROM tbl_name
[WHERE 条件]
[GROUP BY {col_name|position} HAVING 二次筛选]
[ORDER BY {col_name|position|expr} [ASC|DESC]]
[LIMIT 限制结果集的显示条数] 
  1. 查询表中所有记录
    SELECT * FROM tbl_name; *所有字段

  2. 指定字段的信息
    SELECT 字段名称,... FROM tbl_name;

  3. 库名.表名
    SELECT 字段名称,... FROM db_name.tbl_name;

  4. 给字段起别名
    SELECT 字段名称 [AS] 别名名称,... FROM db_name.tbl_name;

  5. 给数据表起别名
    SELECT 字段名称 ,... FROM tbl_name [AS] 别名;

  6. 表名.字段名的
    SELECT tbl_name.col_name,... FROM tbl_name;

  7. WHERE 条件
    会筛选出符合条件的记录

    • 比较运算符:> >= < <= != <> <=> ; <=> 和 =的区别;<=>可以检测NULL值
    • IS [NOT] NULL:检测值是否为NULL或者NOT NULL
    • 指定范围:[NOT] BETWEEN … AND
    • 指定集合:[NOT] IN(值,…)
    • 逻辑运算符:AND 逻辑与 OR 逻辑或
    • 匹配字符:[NOT] LIKE ; % 任意长度的字符串 ; _任意一个字符
  8. GROUP BY 分组

    • 把值相同放到一个组中,最终查询出的结果只会显示组中一条记录
    • 分组配合GROUP_CONCAT()查看组中某个字段的详细信息
    • 配合聚合函数使用
      COUNT():统计记录总数;如果写的是COUNT(字段名称),字段中的值为NULL,不统计进来;写COUNT(*)会统计NULL值
      SUM() :求和
      MAX():求最大值
      MIN():求最小值
      AVG():求平均值
    • 配合WITH ROLLUP关键使用:会在记录末尾添加一条记录,是上面所有记录的总和
    • HAVING子句对分组结果进行二次筛选
  9. ORDER BY 排序
    ORDER BY 字段名称 ASC|DESC

  10. LIMIT 限制结果集显示条数
    LIMIT 值:显示结果集的前几条记录
    LIMIT offset,row_count:从offset开始,显示几条记录,offset从0开始

举例:

-- 测试查询操作
CREATE TABLE user1(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20) NOT NULL UNIQUE COMMENT '编号',
	age TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄',
	sex ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别',
	addr VARCHAR(50) NOT NULL DEFAULT '北京' COMMENT '地址',
	married TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0代表未婚,1代表已婚',
	salary FLOAT(8,2) NOT NULL DEFAULT 0 COMMENT '薪水'
)ENGINE=INNODB CHARSET=UTF8;

INSERT user1 VALUES(1,'king',23,'男','北京',1,50000);
INSERT user1(username,age,sex,addr,married,salary) VALUES('queen',27,'女','上海',0,25000);
INSERT user1 SET username='imooc', age=31, sex='女', addr='北京', salary=40000;
INSERT user1 VALUES(NULL,'张三',38,'男','上海',0,15000),
(NULL,'张三丰',38,'男','上海',0,15000),
(NULL,'章子怡',39,'女','北京',1,85000),
(NULL,'汪峰',42,'男','深圳',1,95000),
(NULL,'刘德华',58,'男','广州',0,115000),
(NULL,'吴亦凡',28,'男','北京',0,75000),
(NULL,'奶茶妹',18,'女','北京',1,65000),
(NULL,'刘嘉玲',36,'女','广州',0,15000);

-- 查询表中所有记录
SELECT * FROM user1;

-- username,addr,age
SELECT username,addr,age FROM user1;

-- 查询King数据库下user1表中的所有记录
SELECT * FROM king.user1;

-- 查询user1表中的id编号username用户名 sex性别
SELECT id AS '编号',username AS '用户名', sex AS '性别'
FROM user1;

SELECT id age,age id,username FROM user1;

--给表起别名
SELECT id,username FROM user1 AS u;

--测试表名.字段名
SELECT user1.id,user1.username,user1.age FROM user1;

SELECT u.id,u.username,u.addr,u.sex FROM user1 AS u;

--测试WHERE条件的比较运算符
--查询id,username,age id=5的用户名
SELECT id,username,age FROM user1 
WHERE id=5;

SELECT id,username,age FROM user1
WHERE id=50;

--添加userDesc字段 VARCHAR(100)
ALTER TABLE user1
ADD userDesc VARCHAR(100);

--更新id<=9的用户名 userDesc='this is a test'
UPDATE user1 SET userDesc='this is a test'
WHERE id<=9;

--检测NULL值
SELECT id,username,age,userDesc FROM user1
WHERE userDesc<=>NULL;

--IS[NOT]NULL检测NULL值
SELECT id,username,age,userDesc FROM user1
WHERE userDesc IS NULL;

--查询薪水在10000~50000之间的用户
SELECT id,username,age,salary FROM user1
WHERE salary BETWEEN 10000 AND 50000;

--查询薪水不在10000~50000之间的用户
SELECT id,username,age,salary FROM user1
WHERE salary NOT BETWEEN 10000 AND 50000;

--查询user1表中id,username,age,sex字段,条件为id大于等于5,age小于等于30,sex为男
SELECT id,username,age,sex FROM user1 WHERE id>=5 AND age<=30 AND sex='男';

--查询以'丰'结尾的用户
SELECT id,username,age FROM user1 WHERE username LIKE '%丰';

--用户名长度为三位的用户
SELECT id,username,age,sex FROM user1
WHERE username LIKE '___';

SELECT id,username,age,sex FROM user1
WHERE username LIKE '张_%';


--按照addr分组
SELECT username,age,sex,addr FROM user1
GROUP BY addr;

--按照性别分组,查询组中的用户名和地址有哪些
SELECT GROUP_CONCAT(username),age,sex,GROUP_CONCAT(addr) FROM user1 GROUP BY sex;

--按照sex分组,得到用户名详情,并且分别统计组中的总人数
SELECT sex,GROUP_CONCAT(username) AS usersDetail,COUNT(*) AS totalUsers FROM user1 
GROUP BY sex;

--按照addr分组,得到用户名的详情,总人数,得到组中年龄的总和,年龄的最大值、最小值、平均值和
SELECT addr,GROUP_CONCAT(username) AS usersDetail,
COUNT(*) AS totalUsers,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age
FROM user1 GROUP BY addr;

--按照sex分组,统计组中总人数、用户详情,得到薪水总和,薪水最大值、最小值、平均值
SELECT sex,GROUP_CONCAT(username) AS usersDetail,
COUNT(*) AS totalUsers,
SUM(salary) AS sum_salary,
MAX(salary) AS max_salary,
MIN(salary) AS min_salary,
AVG(salary) AS avg_salary
FROM user1 GROUP BY sex;

--按照addr分组,得到用户名的详情,总人数,薪水的总和,以及薪水的最大值,最小值,平均值,

--并且薪水的平均值大于等于40000。(用到HAVING子句的二次筛选)
SELECT addr,GROUP_CONCAT(username) AS usersDetail,
COUNT(*) AS totalUsers,
SUM(salary) AS sum_salary,
MAX(salary) AS max_salary,
MIN(salary) AS min_salary,
AVG(salary) AS avg_salary
FROM user1 
GROUP BY addr
HAVING AVG(salary)>=40000;

--对年龄大于30的按照降序排序
SELECT id,username,age
FROM user1
WHERE age>=30
ORDER BY age DESC;

--更新user1表中的前3条记录,将age加5
UPDATE user1 SET age=age+5 LIMIT 3;

--将user1表中id字段降序排列,更新前三条记录,将age减10
UPDATE user1 SET age=age-10 ORDER BY id DESC LIMIT 3;

--删除user1表中的前三条记录
DELETE FROM user1 
LIMIT 3;

--删除user1表中id字段降序排列的前三条记录
DELETE FROM user1 
ORDER BY id DESC 
LIMIT 3;


--测试完整SELECT 语句的形式
SELECT addr,
GROUP_CONCAT(username) AS usersDetail,
COUNT(*) AS totalUsers,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age
FROM user1 
WHERE id>=2
GROUP BY addr;

SELECT addr,
GROUP_CONCAT(username) AS usersDetail,
COUNT(*) AS totalUsers,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age
FROM user1 
WHERE id>=2
GROUP BY addr;
HAVING totalUsers>=2;

SELECT addr,
GROUP_CONCAT(username) AS usersDetail,
COUNT(*) AS totalUsers,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age
FROM user1 
WHERE id>=2
GROUP BY addr
HAVING totalUsers>=2
ORDER BY totalUsers ASC
LIMIT 0,2;
  • 多表查询
  1. 笛卡尔积的形式

  2. 内连接的形式
    查询两个表中符合连接条件的记录
    SELECT 字段名称,... FROM tbl_name1 INNER JOIN tbl_name2 ON 连接条件

  3. 外连接的形式

    • 左外连接
      SELECT 字段名称,... FROM tbl_name1 LEFT [OUTER] JOIN tbl_name2 ON 条件;
      先显示左表中的全部记录,再去右表中查询复合条件的记录,不符合的以NULL代替
    • 右外连接
      SELECT 字段名称,... FROM tbl_name1 RIGHT [OUTER] JOIN tbl_name2 ON 条件;
      先显示右表中的全部记录,再去左表中查询复合条件的记录,不符合的以NULL代替

举例:

---------------------------------------------创建四张表进行查询:

--创建省份表
CREATE TABLE provinces(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	proName VARCHAR(10) NOT NULL UNIQUE
)ENGINE=INNODB CHARSET=UTF8;

--修改表中字段的内容
UPDATE provinces SET proName='首都' WHERE id=1INSERT provinces(proName) VALUES('首都'),
('上海'),
('深圳');



--创建管理员表
CREATE TABLE admin(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20) NOT NULL UNIQUE,
	email VARCHAR(50) NOT NULL DEFAULT '382771946@qq.com',
	proId TINYINT UNSIGNED NOT NULL
);
INSERT admin(username,proId) VALUES('king',1),
('queen',2);


--创建商品分类表 id cateName cateDesc
CREATE TABLE cate(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	cateName VARCHAR(50) NOT NULL UNIQUE,
	cateDesc VARCHAR(100) NOT NULL DEFAULT ''
);

INSERT cate(cateName) VALUES('母婴');
INSERT cate(cateName) VALUES('服装');
INSERT cate(cateName) VALUES('电子');


--创建商品表
CREATE TABLE products(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	productName VARCHAR(50) NOT NULL UNIQUE,
	price FLOAT(8,2) NOT NULL DEFAULT 0,
	cateId TINYINT UNSIGNED NOT NULL,
	adminId TINYINT UNSIGNED NOT NULL
);

INSERT products(productName,price,cateId,adminId) VALUES('iphone9',9888,3,1),
('adidas',388,2,2),
('nike',888,2,2),
('奶瓶',288,1,1);



-- 查询products id productName price
-- cate cateName
-- admin username email
SELECT p.id,p.productName,p.price,c.cateName,a.username,a.email
FROM products AS p
JOIN admin AS a
ON p.adminId = a.id
JOIN cate AS c
ON p.cateId = c.id
WHERE p.price<1000
ORDER BY p.price DESC
LIMIT 0,2;

(四表查询)
-- products id productName price
-- cate cateName
-- admin username email
-- provinces proName
SELECT p.id,p.productName,p.price,c.cateName,a.username,a.email,pro.proName
FROM products AS p
JOIN admin AS a
ON p.adminId = a.id
JOIN cate AS c
ON p.cateId = c.id
JOIN provinces AS pro
ON a.proId = pro.id
WHERE p.price<1000
ORDER BY p.price DESC
LIMIT 0,2;
  • 外键约束
  1. 只有InnoDB存储引擎支持外键
  2. 创建外键
    • 建表时指定外键
      (1) [CONSTRAINT 外键名称 ]FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)
      (2) 子表的外键字段和主表的主键字段类型要相似;如果是数值型要求一致,并且无符号也要一致;如果是字符型,要求类型一致,长度可以不同
      (3) 如果外键字段没有创建索引,MySQL会自动帮我们添加索引
      子表的外键关联的必须是父表的主键
      (4) 外键约束的参照操作:
      CASCADE从父表删除或更新,子表也跟着删除或者更新,级联的操作
      SET NULL从父表删除或者更新记录,并设置子表的外键列为NULL。
      NO ACTION | RESTRICT拒绝对父表做更新或者删除操作
    • 动态添加外键
      (1)动态添加外键ALTER TABLE tbl_name ADD [CONSTRAINT 外键名称] FOREIGN KEY(外键字段) REFERENCES 主表(主键字段);
      (2)动态添加外键之前表中的记录一定合法的记录,没有脏值,否则外键添加不成功
    • 动态删除外键
      ALTER TABLE tbl_name DROP FOREIGN KEY fk_name;

举例:

--新闻分类表news_cate
CREATE TABLE news_cate(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	cateName VARCHAR(50) NOT NULL UNIQUE,
	cateDesc VARCHAR(100) NOT NULL DEFAULT ''
);

INSERT news_cate(cateName) VALUES('国内新闻'),
('国际新闻'),
('娱乐新闻'),
('体育新闻');


--新闻表 news
CREATE TABLE news(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	title VARCHAR(100) NOT NULL UNIQUE,
	content VARCHAR(1000) NOT NULL,
	cateId TINYINT NOT NULL
);

INSERT news(title,content,cateId) VALUES('a1','aaaa1',1),
('a2','aaaaa2',1),
('a3','aaaaa3',4),
('a4','aaaaa4',2),
('a5','aaaaa5',3);

--添加外键名称
CREATE TABLE news_cate(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	cateName VARCHAR(50) NOT NULL UNIQUE,
	cateDesc VARCHAR(100) NOT NULL DEFAULT ''
)ENGINE=INNODB;

INSERT news_cate(cateName) VALUES('国内新闻'),
('国际新闻'),
('娱乐新闻'),
('体育新闻');

CREATE TABLE news(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	title VARCHAR(100) NOT NULL UNIQUE,
	content VARCHAR(1000) NOT NULL,
	cateId TINYINT UNSIGNED NOT NULL,
	CONSTRAINT cateID_fk_newsCate FOREIGN KEY(cateId) REFERENCES news_cate(id)
)ENGINE=INNODB;

INSERT news(title,content,cateId) VALUES('a1','aaaa1',1),
('a2','aaaaa2',1),
('a3','aaaaa3',4),
('a4','aaaaa4',2),
('a5','aaaaa5',3);



--动态删除外键
ALTER TABLE news
DROP FOREIGN KEY cateID_fk_newsCate;

--动态添加外键
ALTER TABLE news
ADD CONSTRAINT cateID_fk_newsCate FOREIGN KEY(cateId) REFERENCES news_cate(id);

 
--指定级联操作DELETE CASCADE UPDATE CASCADE
ALTER TABLE news
ADD FOREIGN KEY(cateId) REFERENCES news_cate(id)
ON DELETE CASCADE ON UPDATE CASCADE;


--测试子查询
--测试由IN引发的子查询
SELECT * FROM emp
WHERE depId IN(SELECT id FROM dep);

SELECT * FROM emp
WHERE depId NOT IN(SELECT id FROM dep);
  • 特殊形式的查询
  1. 子查询
    (1) SELECT 字段名称 FROM tbl_name WHERE col_name=(SELECT col_name FROM tbl_name)
    (2) 内层语句查询的结果可以做为外层语句查询的条件
    (4) 由IN引发的子查询
    (5) 由比较运算符引出子查询
    (6) 由EXISTS引发的子查询
    (7) ANY SOME ALL
    在这里插入图片描述
    (8)INSERT ... SELECT
    (9)CREATE ... SELECT
    (10)CREATE TABLE tbl_name LIKE tbl_name;

举例:


--由比较运算符引发的子查询

--创建学员表(stu):
CREATE TABLE stu(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20) NOT NULL UNIQUE,
	score TINYINT UNSIGNED NOT NULL
);
INSERT stu(username,score) VALUES('king',95),
('queen',75),
('zhangsan',69),
('lisi',78),
('wangwu',87),
('zhaoliu',88),
('tianqi',98),
('ceshi',99),
('tiancai',50);

--创建分数级别表(level)
CREATE TABLE level(
	id TINYINT UNSIGNED AUTO_INCREMENT KEY,
	score TINYINT UNSIGNED COMMENT '分数'
);
INSERT level(score) VALUES(90),(80),(70);


--查询出成绩优秀的学员
SELECT score FROM level WHERE id=1;

SELECT id,username,score FROM stu
WHERE score >= (SELECT score FROM level WHERE id=1);


--由EXISTS引发的子查询
SELECT * FROM emp WHERE EXISTS (SELECT depName FROM dep WHERE id=10);
SELECT * FROM emp WHERE EXISTS (SELECT depName FROM dep WHERE id=1);


--带有ANY SOME ALL关键字的子查询
SELECT * FROM stu
WHERE score >= ANY(SELECT score FROM level);

SELECT * FROM stu
WHERE score >= ALL(SELECT score FROM level);

-- 创建一个user1表,id username
CREATE TABLE user1(
	id int UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20)
)SELECT id,username FROM emp;

--将user表中的用户名写到user1表中
INSERT user1(username) SELECT username FROM user;

--创建一张跟user1表一样的user2表
CREATE TABLE user2 LIKE user1;

--将stu表中的tiancai用户名添加到user2表中
INSERT user2 SET username=(SELECT username FROM stu WHERE id=9);

--去掉字段的重复值
SELECT DISTINCT(username) FROM user2;
  1. 联合查询
    (1) UNION
    SELECT 字段名称,... FROM tbl_name1 UNION
    SELECT 字段名称... FROM tbl_name2;
    (2)UNION ALL
    SELECT 字段名称,... FROM tbl_name1 UNION ALL
    SELECT 字段名称... FROM tbl_name2;
    (3)UNION ALL 是简单的合并,UNION会去掉表中重复记录

  2. 自身连接查询:无限级分类的实现形式

举例:

--无限级分类
--测试自身连接
CREATE TABLE cate(
	id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
	cateName VARCHAR(100) NOT NULL UNIQUE,
	pId SMALLINT NOT NULL DEFAULT 0
);

--插入顶级分类
INSERT cate(cateName,pId) VALUES('服装',0);
INSERT cate(cateName,pId) VALUES('数码',0);
INSERT cate(cateName,pId) VALUES('玩具',0);

--插入服装的子分类
INSERT cate(cateName,pId) VALUES('男装',1);
INSERT cate(cateName,pId) VALUES('女装',1);
INSERT cate(cateName,pId) VALUES('内衣',1);

--插入数码的子分类
INSERT cate(cateName,pId) VALUES('电视',2);
INSERT cate(cateName,pId) VALUES('冰箱',2);
INSERT cate(cateName,pId) VALUES('洗衣机',2);

--插入玩具的子分类
INSERT cate(cateName,pId) VALUES('爱马仕',3);
INSERT cate(cateName,pId) VALUES('LV',3);
INSERT cate(cateName,pId) VALUES('GUCCI',3);

--插入男装的子分类
INSERT cate(cateName,pId) VALUES('夹克',4);
INSERT cate(cateName,pId) VALUES('衬衫',4);
INSERT cate(cateName,pId) VALUES('裤子',4);

--插入电视的子分类
INSERT cate(cateName,pId) VALUES('液晶电视',10);
INSERT cate(cateName,pId) VALUES('等离子电视',10);
INSERT cate(cateName,pId) VALUES('背投电视',10);

--查询所有的分类信息,且得到其父分类
SELECT s.id,s.cateName AS sCateName,p.cateName AS pCateName
FROM cate AS s
LEFT JOIN cate AS p
ON s.pId = p.id;

--查询所有的分类信息,且得到其子分类
SELECT p.id,p.cateName AS pCateName,s.cateName AS sCateName
FROM cate AS s
RIGHT JOIN cate AS p
ON s.pId = p.id

-- 查询所有的分类 得到子分类的数目
SELECT p.id,p.cateName AS pCateName,COUNT(s.cateName) AS count
FROM cate AS s
RIGHT JOIN cate AS p
ON s.pId = p.id
GROUP BY p.cateName
ORDER BY id ASC;

8.MYSQL常用函数

  • 数学函数
    CEIL():进一取整
    FLOOR():舍掉小数部分
    ROUND():四舍五入
    TRUNCATE():截取小数点后几位
    MOD():取余数
    ABS():取绝对值
    POWER():幂运算
    PI():圆周率
    RAND()或者RAND(X):0~1之间的随机数
    SIGN(X):得到数字符号
    EXP(X):计算e的x次方

  • 字符串函数
    CHAR_LENGTH():得到是字符串的字符数
    LENGTH():得到字符串长度
    CONCAT(s1,s2,......):将字符串合并成一个字符串字符串中包含NULL,返回拼接结果就是NULL
    CONCAT_WS(x,s1,s2,s3,....):以指定分隔符拼接字符串;如果null在拼接的内容中,则转化为空字符串;如果分隔符为null,拼接的结果为null
    UPPER() | UCASE() LOWER() | LCASE():将字符串转换为大写或者小写
    REVERSE():字符串的反转
    LEFT()|RIGHT():返回字符串的前几个字符或者后几个字符:SELECT LEFT('hello',2),RIGHT('hello',2);
    LPAD()|RPAD():字符串填充到指定长度
    SELECT LPAD('abc',10,'?');
    SELECT RPAD('abc',10,'!');
    去掉字符串两端的空格()|LTRIM|RTRIM()
    SELECT CONCAT('*',TRIM(' abc '),'*'),CONCAT('*',LTRIM(' abc '),'*'),CONCAT('*',RTRIM(' abc '),'*');
    截取字符串SUBSTRINGSELECT SUBSTRING('abcdef',1,3);
    比较字符串:SELECT STRCMP('a','b');

  • 日期时间函数
    返回当前日期:SELECT CURDATE(),CURRENT_DATE();
    返回当前时间:SELECT CURTIME(),CURRENT_TIME();
    返回当前的日期时间:SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE();
    返回日期中的月份和月份的名称:SELECT MONTH('2017-02-19');
    SELECT MONTH(CURDATE()),MONTHNAME(CURDATE());
    返回星期几:SELECT DAYOFWEEK(NOW());
    SELECTWEEK(NOW());SELECTYEAR(NOW()),MONTH(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
    DATEDIFF():计算两个日期相差的天数
    SELECT DATEDIFF('2017-1-2','2017-1-1');

  • 其它常用函数
    SELECT VERSION(),CONNECTION_ID();
    得到上一步插入操作产生AUTO_INCREMENT的值
    SELECT LAST_INSERT_ID();
    MD5加密算法:SELECT MD5('king');
    PASSWORD():密码加密算法,添加用户用的加密算法
    SELECT PASSWORD('root');

举例:

--测试字符串函数
--CHAR_LENGTH():得到是字符串的字符数
SELECT CHAR_LENGTH('abc');

--LENGTH():得到字符串长度
SELECT LENGTH('abc');

--CONCAT(s1,s2,......):将字符串合并成一个字符串
SELECT CONCAT('a','b','c');

--字符串中包含NULL,返回拼接结果就是NULL
SELECT CONCAT('a','b','c',null);

--CONCAT_WS(x,s1,s2,s3,....):以指定分隔符拼接字符串
SELECT CONCAT_WS('-','a','b','c');

--如果null在拼接的内容中,则转化为空字符串
SELECT CONCAT_WS('-','a','b','c',null);

--如果分隔符为null,拼接的结果为null
SELECT CONCAT_WS(null,'a','b','c');

--将字符串转换为大写或者小写UPPER() | UCASE() LOWER() | LCASE()
SELECT UPPER('hello king'),UCASE('hello imooc'),LOWER('HELLO ADMIN'),LCASE('HELLO ADMIN');

--字符串的反转REVERSE()
SELECT REVERSE('abc');

--LEFT()|RIGHT():返回字符串的前几个字符或者后几个字符
SELECT LEFT('hello',2),RIGHT('hello',2);

--LPAD()|RPAD():字符串填充到指定长度
SELECT LPAD('abc',10,'?');
SELECT RPAD('abc',10,'!');

--去掉字符串两端的空格TRIM()|LTRIM|RTRIM():
SELECT CONCAT('*',TRIM(' abc '),'*'),CONCAT('*',LTRIM(' abc '),'*'),CONCAT('*',RTRIM(' abc '),'*');

--截取字符串SUBSTRING
SELECT SUBSTRING('abcdef',1,3);

--比较字符串
SELECT STRCMP('a','b');
-------------------------------------分割线---------------------------------------------
--测试日期时间函数
--返回当前日期
SELECT CURDATE(),CURRENT_DATE();

--返回当前时间
SELECT CURTIME(),CURRENT_TIME();

--返回当前的日期时间
SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE();

--返回日期中的月份和月份的名称
SELECT MONTH('2017-02-19');
SELECT MONTH(CURDATE()),MONTHNAME(CURDATE());

--返回星期几
SELECT DAYOFWEEK(NOW());

--返回一年中的第几个星期
SELECT WEEK(NOW());
SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());

-- DATEDIFF()计算两个日期相差的天数
SELECT DATEDIFF('2017-1-2','2017-1-1');

--测试其他常用函数
SELECT VERSION(),CONNECTION_ID();

--得到上一步插入操作产生AUTO_INCREMENT的值
SELECT LAST_INSERT_ID();

--MD5加密算法
SELECT MD5('king');

--PASSWORD():密码加密算法,添加用户用的加密算法
SELECT PASSWORD('root');
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值