目录
记录mysql自身数据的数据库
信息数据库,保存mysql所维护的其他数据库信息,例如:数据库名,数据库的表,表栏的数据类型与访问权 限等
核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息
用于mysql的监控数据的存放
use 数据库名 示例: use mysql其实不使用代码可以,手动即可,如图所示(右上角直接切换或者左边选择也可以)
- 命令格式:create user 用户名 identified by ‘密码’
- 说明:identified by会将纯文本密码加密作为散列值存储
- 示例:CREATE USER test IDENTIFIED BY '123456';
命令格式:select host,user,password from user; host列说明:% 匹配所有主机
localhost localhost不会被解析成IP地址,直接通过UNIXsocket连接 同一主机通讯,不经过网络协议栈,不用打包拆包,计算校验和、维护序列号应答等。只是将应用层数据从一个进程拷贝到另一个进程127.0.0.1 会通过TCP/IP协议连接,并且只能在本机访问
::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1
- 命令格式:drop user 用户名
- 示例:DROP USER test;--test是上面创建的
- 一般不用,用时需谨慎
- 命令格式:set password for 用户名=password('新密码')
- 示例:SET PASSWORD FOR test=PASSWORD('123456');
命令格式:flush privileges
也就是光标所指处(F5):
show grants 查看当前用户(自己)权限
show grants for dba@localhost; 查看其他 MySQL 用户权限
命令格式 revoke privileges on databasename.tablename from username@'host'
示例 REVOKE UPDATE ON bookshop.t_book FROM test@'%'; 收回test用户对于bookshop库中t_book表的update权限(ip不限)
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据, 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能
命令 show engines
Support字段说明: DEFAULT的为默认的引擎 为YES表示可以使用 为NO表示不能使用
MYISAM强调了快速读取操作
使用场景: 大量查询,很少修改的场景
所有的数据都保存在内存中,一旦服务器重启,所有Memory存储引擎的表数据会消失但是表结构会保存下来
使用场景:由于易失性,可以用于存储在分析中产生的中间表
后者修改快,支持事务
使用场景:一般事务性,均使用该引擎,用途最广,如果把握不准使用何种引擎,就使用该引擎
只允许插入和查询,不允许修改和删除,压缩存储,节约空间,可以实现高并发的插入,支持在自增id上建立索引
使用场景:在日志和数据采集的时候可以使用
- 命令格式:create database 数据库名
-
- create database if not exists 数据库名 default charset utf8 collate utf8_general_cs;
-
- 默认的数据库编码集:utf8
-
- collate表示排序规则为utf8_general_ci
show databases
drop database 数据库名
危险操作,先备份
- 命令格式:
- CREATE TABLE 表名称(
- 列名称1 数据类型 NOT NULL,
- 列名称2 数据类型,
- 列名称3 数据类型,
- unique(列名称1[,列名称2,...,列名称N])
- )
- 示例(主表):
- create table t_student
- (
- sid int not null comment '学号',
- sname varchar(60) not null comment '姓名',
- sex tinyint not null default 1 comment '性别:1男, 2女',
- age tinyint not null comment ' 年龄',
- icard varchar(18) not null comment '身份证,唯一约束',
- primary key (sid),
- unique key AK_Key_2 (icard)
- ) comment '学生信息表';
- 一、表结构要求:
-
- -- 1.学生表-t_student
- -- sid 学生编号,sname 学生姓名,sage 学生年龄,ssex 学生性别
-
- -- 2.教师表-t_teacher
- -- tid 教师编号,tname 教师名称
-
- -- 3.课程表-t_course
- -- cid 课程编号,cname 课程名称,tid 教师名称
-
- -- 4.成绩表-t_score
- -- sid 学生编号,cid 课程编号,score 成绩
-
-
-
-
- 二、表数据:
-
- -- 学生表
- INSERT INTO t_student VALUES(1, '赵雷' , '1990-01-01' , 1);
- INSERT INTO t_student VALUES(2 , '钱电' , '1990-12-21' , 1);
- INSERT INTO t_student VALUES(3 , '孙风' , '1990-12-20' , 1);
- INSERT INTO t_student VALUES(4 , '李云' , '1990-12-06' , 1);
- INSERT INTO t_student VALUES(5 , '周梅' , '1991-12-01' , 2);
- INSERT INTO t_student VALUES(6 , '吴兰' , '1992-01-01' , 2);
- INSERT INTO t_student VALUES(7 , '郑竹' , '1989-01-01' , 2);
- INSERT INTO t_student VALUES(9 , '张三' , '2017-12-20' , 2);
- INSERT INTO t_student VALUES(10 , '李四' , '2017-12-25' , 2);
- INSERT INTO t_student VALUES(11 , '李四' , '2012-06-06' , 2);
- INSERT INTO t_student VALUES(12 , '赵六' , '2013-06-13' , 2);
- INSERT INTO t_student VALUES(13 , '孙七' , '2014-06-01' , 2);
-
- -- 教师表
- INSERT INTO t_teacher VALUES(1 , '张五哥');
- INSERT INTO t_teacher VALUES(2 , '李卫');
- INSERT INTO t_teacher VALUES(3 , '年羹尧');
-
- -- 课程表
- INSERT INTO t_course VALUES(1 , '语文' , 2);
- INSERT INTO t_course VALUES(2 , '数学' , 1);
- INSERT INTO t_course VALUES(3 , '英语' , 3);
-
- -- 成绩表
- INSERT INTO t_score VALUES(1 , 1 , 80);
- INSERT INTO t_score VALUES(1 , 2 , 90);
- INSERT INTO t_score VALUES(1 , 3 , 99);
- INSERT INTO t_score VALUES(2 , 1 , 70);
- INSERT INTO t_score VALUES(2 , 2 , 60);
- INSERT INTO t_score VALUES(2 , 3 , 80);
- INSERT INTO t_score VALUES(3 , 1 , 80);
- INSERT INTO t_score VALUES(3 , 2 , 80);
- INSERT INTO t_score VALUES(3 , 3 , 80);
- INSERT INTO t_score VALUES(4 , 1 , 50);
- INSERT INTO t_score VALUES(4 , 2 , 30);
- INSERT INTO t_score VALUES(4 , 3 , 20);
- INSERT INTO t_score VALUES(5 , 1 , 76);
- INSERT INTO t_score VALUES(5 , 2 , 87);
- INSERT INTO t_score VALUES(6 , 1 , 31);
- INSERT INTO t_score VALUES(6 , 3 , 34);
- INSERT INTO t_score VALUES(7 , 2 , 89);
- INSERT INTO t_score VALUES(7 , 3 , 98);
- -- 测试库建库脚本
- DROP TABLE IF EXISTS t_student;
- CREATE TABLE t_student
- (
- sid INT NOT NULL AUTO_INCREMENT COMMENT '学号',
- sname VARCHAR(40) NOT NULL COMMENT '名称',
- birthday DATE NOT NULL COMMENT '年龄',
- ssex TINYINT NOT NULL DEFAULT 1 COMMENT '1男,2女',
- PRIMARY KEY (sid)
- );
-
- DROP TABLE IF EXISTS t_teacher;
- CREATE TABLE t_teacher
- (
- tid INT NOT NULL AUTO_INCREMENT COMMENT '教师ID',
- tname VARCHAR(40) NOT NULL COMMENT '教师名称',
- PRIMARY KEY (tid)
- );
-
- DROP TABLE IF EXISTS t_course;
- CREATE TABLE t_course
- (
- cid INT NOT NULL COMMENT '课程ID',
- cname VARCHAR(50) COMMENT '课+ 程名称',
- tid INT COMMENT '教师id',
- PRIMARY KEY (cid)
- );
-
- ALTER TABLE t_course ADD CONSTRAINT fk_ref_cou_tea_tid FOREIGN KEY (tid) REFERENCES t_teacher (tid) ON DELETE RESTRICT ON UPDATE RESTRICT;
-
- DROP TABLE IF EXISTS t_score;
- CREATE TABLE t_score
- (
- sid INT NOT NULL COMMENT '学号,外键',
- cid INT NOT NULL COMMENT '课程id',
- score decimal(5,2) COMMENT '成绩',
- UNIQUE KEY ak_key_sid_cid (sid, cid)
- );
-
- ALTER TABLE t_score ADD CONSTRAINT fk_ref_sco_stu_sid FOREIGN KEY (sid) REFERENCES t_student (sid) ON DELETE RESTRICT ON UPDATE RESTRICT;
- ALTER TABLE t_score ADD CONSTRAINT fk_ref_sco_tea_cid FOREIGN KEY (cid) REFERENCES t_course (cid) ON DELETE RESTRICT ON UPDATE RESTRICT;
-
01)查询" 1 "课程比" 2 "课程成绩高的学生的信息及课程分数
SELECT stu.sid,stu.sname,stu.ssex,c1.cid, c1.score, c2.cid, c2.score FROM t_student stu INNER JOIN (SELECT t1.sid, t1.cid, t1.score FROM t_score t1 WHERE t1.cid = 1 ) c1 ON stu.sid = c1.sid INNER JOIN (SELECT t2.sid, t2.cid, t2.score FROM t_score t2 WHERE t2.cid = 2) c2 ON stu.sid = c2.sid WHERE c1.score > c2.score
02)查询同时存在" 01 "课程和" 02 "课程的情况
03)查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
04)查询不存在" 01 "课程但存在" 02 "课程的情况
05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
06)查询在t_score表存在成绩的学生信息
07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
08)查询「李」姓老师的数量
09)查询学过「张三」老师授课的同学的信息
10)查询没有学全所有课程的同学的信息
11)查询没学过"张三"老师讲授的任一门课程的学生姓名
12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息
14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
15)查询各科成绩最高分、最低分和平均分:
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
- -- 01)查询" 1 "课程比" 2 "课程成绩高的学生的信息及课程分数
- SELECT stu.sid,stu.sname,stu.ssex,stu.birthday,c2.score s2 ,c1.score s1
- FROM t_student stu
- INNER JOIN
- (SELECT sid,score FROM t_score WHERE cid = 1) c1 ON stu.sid = c1.sid
- INNER JOIN
- (SELECT sid,score FROM t_score WHERE cid = 2) c2 ON stu.sid = c2.sid
- WHERE c1.score > c2.score;
-
- -- 02)查询同时选修" 1 "课程和" 2 "课程的学生信息
- -- 方法一
- SELECT stu.sid,stu.ssex,stu.sname,c2.score s2 ,c1.score s1
- FROM t_student stu
- INNER JOIN
- (SELECT sid.cid FROM t_score WHERE cid = 1) c1 ON stu.sid = c1.sid
- INNER JOIN
- (SELECT sid.cid FROM t_score WHERE cid = 2) c2 ON stu.sid = c2.sid
- -- 方法二
- -- 通过stu.sid 与 成绩表中的sid相连,查他们的课程id.....
- SELECT * FROM t_student stu
- WHERE stu.sid IN (SELECT s1.sid FROM t_score s1 WHERE s1.cid = 1)
- AND stu.sid IN (SELECT s2.sid FROM t_score s2 WHERE s2.cid = 2)
- -- 方法三
- SELECT stu.sid,stu.sname,stu.ssex,stu.birthday,tmp.s1num,tmp.s2num FROM t_student stu
- INNER JOIN
- (SELECT s.`sid`,
- SUM(CASE WHEN s.`cid`=1 THEN s.`score` ELSE 0 END)s1num,
- SUM(CASE WHEN s.`cid`=2 THEN s.`score` ELSE 0 END)s2num
- FROM t_score s GROUP BY s.`sid`)tmp
- ON stu.`sid` = tmp.sid AND tmp.s1num>0 AND tmp.s2num>0;
-
- -- 03)查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
- -- 方法一(not可以加到随便一个in前面)
- SELECT * FROM t_student stu
- WHERE stu.sid IN (SELECT s1.sid FROM t_score s1 WHERE s1.cid = 1)
- AND stu.sid NOT IN (SELECT s2.sid FROM t_score s2 WHERE s2.cid = 2)
- -- 方法二(换个等号就行了)
- SELECT stu.sid,stu.sname,stu.ssex,stu.birthday,tmp.s1num,tmp.s2num FROM t_student stu
- INNER JOIN
- (SELECT s.`sid`,
- SUM(CASE WHEN s.`cid`=1 THEN 1 ELSE 0 END)s1num,
- SUM(CASE WHEN s.`cid`=2 THEN 1 ELSE 0 END)s2num
- FROM t_score s GROUP BY s.`sid`)tmp
- ON stu.`sid` = tmp.sid AND tmp.s1num=0 AND tmp.s2num>0;
- -- 方法三(换个等号就行了)
- SELECT stu.sid,stu.sname,stu.ssex,stu.birthday,tmp.s1num,tmp.s2num FROM t_student stu
- INNER JOIN
- (SELECT s.`sid`,
- SUM(CASE WHEN s.`cid`=1 THEN s.`score` ELSE -1 END)s1num,
- SUM(CASE WHEN s.`cid`=2 THEN s.`score` ELSE -1 END)s2num
- FROM t_score s GROUP BY s.`sid`)tmp
- ON stu.`sid` = tmp.sid AND tmp.s1num>=0 AND tmp.s2num<0;
-
- -- 04)查询不存在" 01 "课程但存在" 02 "课程的情况
- -- 方法一
- SELECT * FROM t_student stu
- WHERE stu.sid NOT IN (SELECT s1.sid FROM t_score s1 WHERE s1.cid = 1)
- AND stu.sid IN (SELECT s2.sid FROM t_score s2 WHERE s2.cid = 2)
- -- 方法二(换个等号就行了)
- SELECT stu.sid,stu.sname,stu.ssex,stu.birthday,tmp.s1num,tmp.s2num FROM t_student stu
- INNER JOIN
- (SELECT s.`sid`,
- SUM(CASE WHEN s.`cid`=1 THEN 1 ELSE 0 END)s1num,
- SUM(CASE WHEN s.`cid`=2 THEN 1 ELSE 0 END)s2num
- FROM t_score s GROUP BY s.`sid`)tmp
- ON stu.`sid` = tmp.sid AND tmp.s1num>0 AND tmp.s2num=0;
- -- 方法三(换个等号就行了)
- SELECT stu.sid,stu.sname,stu.ssex,stu.birthday,tmp.s1num,tmp.s2num FROM t_student stu
- INNER JOIN
- (SELECT s.`sid`,
- SUM(CASE WHEN s.`cid`=1 THEN s.`score` ELSE -1 END)s1num,
- SUM(CASE WHEN s.`cid`=2 THEN s.`score` ELSE -1 END)s2num
- FROM t_score s GROUP BY s.`sid`)tmp
- ON stu.`sid` = tmp.sid AND tmp.s1num<0 AND tmp.s2num>=0;
- -- 05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
- SELECT stu.`sid`,stu.`sname`,tmp.avgscore FROM t_student stu
- INNER JOIN (SELECT sid,ROUND(AVG(score),1)avgscore FROM t_score GROUP BY sid HAVING avgscore>=60)tmp
- ON stu.`sid` = tmp.sid
-
- -- 06)查询在t_score表存在成绩的学生信息数量(存在可以用in)
- -- 方法一
- SELECT COUNT(*)
- FROM t_student stu
- WHERE stu.`sid`
- IN (SELECT s.sid FROM t_score s);
- -- 方法二
- SELECT COUNT(*)
- FROM t_student stu
- WHERE EXISTS(SELECT * FROM t_score s WHERE s.`sid`=stu.sid);
-
- -- 07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
- -- (没成绩的显示为 null )
- -- 多表可以使用左关联
- -- 方法一
- SELECT stu.`sid`,stu.`sname`,stu.`ssex`,stu.`birthday`,s1.courses,s2.total
- FROM t_student stu
- LEFT JOIN(SELECT sid,COUNT(*)courses
- FROM t_score
- GROUP BY sid)s1
- ON stu.`sid`=s1.sid
- LEFT JOIN(SELECT sid,SUM(score)total
- FROM t_score
- GROUP BY sid)s2
- ON stu.`sid` = s2.sid
- -- 方法二
- SELECT stu.sid,stu.sname, stu.ssex, tmp.courses, tmp.totalScore
- FROM t_student stu
- LEFT JOIN (
- SELECT sid, COUNT(*) courses, SUM(score) totalScore FROM t_score GROUP BY sid
- ) tmp ON stu.`sid` = tmp.sid;
-
- -- 08)查询「李」姓老师的数量
- SELECT COUNT(*) FROM t_teacher WHERE tname LIKE '李%';
-
- -- 09)查询学过「张三」老师授课的同学的信息
- -- 三表通过sid,cid,tid三表的连接才能得到信息
- -- sid是学生表和成绩表才有,cid是成绩表和课程表才有
- -- tid是课程表和教师表才有
- SELECT * FROM t_student stu
- INNER JOIN t_score s1
- ON stu.`sid` = s1.sid
- INNER JOIN t_course c1
- ON s1.`cid`= c1.`cid`
- INNER JOIN t_teacher t1
- ON c1.`tid`= t1.`tid`
- WHERE t1.`tname` = '张三';
-
- -- 10)查询没有学全所有课程的同学的信息
- SELECT t1.`sid`,t1.`sname`,t1.`ssex`, t2.courses
- FROM t_student t1
- LEFT JOIN (SELECT sid,COUNT(*) courses
- FROM t_score
- GROUP BY sid) t2
- ON t1.sid = t2.sid
- WHERE t2.courses < (SELECT COUNT(*) FROM t_course) OR t2.courses IS NULL;
-
- -- 11)查询没学过"张三"老师讲授的任一门课程的学生姓名
- SELECT t1.sid, t1.sname,t4.tname
- FROM t_student t1
- LEFT JOIN t_score t2 ON t1.sid=t2.sid
- LEFT JOIN t_course t3 ON t2.cid=t3.cid
- LEFT JOIN t_teacher t4 ON t3.tid = t4.tid
- WHERE t4.tname != '李卫' OR t4.tname IS NULL;
-
- -- 12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
- SELECT t3.sid, t3.sname, ROUND(AVG(t1.score), 2) scoreavg
- FROM t_score t1
- INNER JOIN (
- -- 统计两门以上不及格的学生id
- SELECT t.sid, COUNT(*) num FROM (SELECT sid, cid FROM t_score WHERE score < 60) t GROUP BY t.sid HAVING num >= 2
- ) t2 ON t1.sid = t2.sid
- INNER JOIN t_student t3 ON t1.sid = t3.sid
- GROUP BY t3.sid, t3.sname
-
- -- 13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息
- SELECT stu.`sid`,stu.`sname`,t3.score
- FROM t_student stu
- INNER JOIN (SELECT sid,score FROM t_score WHERE cid = 1 AND score < 60) t3
- ON stu.`sid` = t3.sid
- ORDER BY stu.score DESC;
-
- -- 14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
- SELECT t2.sid,t2.sname ,
- SUM(CASE WHEN t1.cid = 1 THEN t1.score ELSE 0 END) '语文',
- SUM(CASE WHEN t1.cid = 2 THEN t1.score ELSE 0 END) '数学',
- SUM(CASE WHEN t1.cid = 3 THEN t1.score ELSE 0 END) '英语',
- ROUND(AVG(t1.`score`), 2) avgscore
- FROM t_score t1
- INNER JOIN t_student t2 ON t1.sid = t2.sid
- GROUP BY t2.sid, t2.sname
- ORDER BY avgscore DESC;
-
- -- 15)查询各科成绩最高分、最低分和平均分:
- -- 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,
- -- 及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,
- -- 优良为:80-90,优秀为:>=90
- -- 要求输出课程号和选修人数,查询结果按人数降序排列,
- -- 若人数相同,按课程号升序排列
- SELECT t2.cid '课程ID',
- t2.cname '课程名称',
- MAX(t1.score) '最高分',
- MIN(t1.score) '最低分',
- ROUND(AVG(t1.score), 2) '平均分',
- COUNT(t1.sid) '选修人数',
- ROUND(SUM(CASE WHEN t1.score >= 60 THEN 1 ELSE 0 END) / COUNT(t1.sid), 2) '及格率',
- ROUND(SUM(CASE WHEN t1.score >=70 AND t1.score < 80 THEN 1 ELSE 0 END)/COUNT(t1.sid),2) '中等率',
- ROUND(SUM(CASE WHEN t1.score >=80 AND t1.score < 90 THEN 1 ELSE 0 END)/COUNT(t1.sid),2) '优良率',
- ROUND(SUM(CASE WHEN t1.score >= 90 THEN 1 ELSE 0 END)/COUNT(t1.sid), 2) '优秀率'
- FROM t_score t1
- INNER JOIN t_course t2 ON t1.cid = t2.cid
- GROUP BY t2.cid, t2.cname
- ORDER BY COUNT(t1.sid) DESC, t2.cid ASC;
1、ABS(x) 返回x的绝对值
- SELECT ABS(-1);
- ---- 返回1
2、AVG(price) 返回一个表达式的平均值,price是一个字段
SELECT AVG(age) FROM student;
3、CEIL(x)/CEILING(x) 返回大于或等于 x 的最小整数(向下取整)
- SELECT CEIL(1.5);
- SELECT CEILING(1.5);
- ---- 返回2
4、FLOOR(x) 返回小于或等于 x 的最大整数(向下取整)
- SELECT FLOOR(1.5);
- ---- 返回1
5、EXP(x) 返回 e 的 x 次方
- SELECT EXP(3);
- ---- 计算 e 的三次方,返回20.085536923188
6、GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值
- SELECT GREATEST(3, 12, 34, 8, 25);
- ---- 返回以下数字列表中的最大值34
7、LEAST(expr1, expr2, expr3, …) 返回列表中的最小值
- SELECT LEAST(3, 12, 34, 8, 25);
- ---- 返回以下数字列表中的最小值3
8、LN 返回数字的自然对数
- SELECT LN(2);
- ---- 返回 2 的自然对数:0.6931471805599453
9、LOG(x) 返回自然对数(以 e 为底的对数)
- SELECT LOG(20.085536923188);
- ---- 返回 3
10、MAX(expression)返回字段 expression 中的最大值
- SELECT MAX(age) AS maxAge FROM Student;
- ---- age最大值
11、MIN(expression)返回字段 expression 中的最大
- SELECT MIN(age) AS minAge FROM Student;
- ---- age最小值
12、POW(x,y)/POWER(x,y)返回 x 的 y 次方
- SELECT POW(2,3);
- SELECT POWER(2,3);
- ---- 返回2 的 3 次方:8
13、RAND()返回 0 到 1 的随机数
- SELECT RAND();
- ---- 返回 0 到 1 的随机数,若()里面有数字,RAND(x),x相同时,返回值相同
14、ROUND(x)返回离 x 最近的整数(四舍五入)
- SELECT ROUND(1.23456);
- ---- 返回 1
-
- SELECT ROUND((scroe),2);
- ---- 返回 表示返回的数字只能保留两个小数
15、SIGN(x)返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1
- SELECT SIGN(-10);
- ---- 返回 -1
16、SQRT(x)返回x的平方根
- SELECT SQRT(25);
- ---- 返回5
17、SUM(expression)返回指定字段的总和
- SELECT SUM(age) AS totalAage FROM Student;
- ---- 返回age的总和
18、TRUNCATE(x,y)返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)
- SELECT TRUNCATE(1.23456,3);
- ---- 返回1.234
1、返回字符串 s 的第一个字符的 ASCII 码
- SELECT ASCII('AB');
- ---- 返回A的ASCII码值:65
2、LENGTH/CHAR_LENGTH(s)/CHARACTER_LENGTH(s)返回字符串 s 的字符数
- SELECT LENGTH('1234');
- ---- 返回4
3、CONCAT(s1,s2…sn)字符串 s1,s2 等多个字符串合并为一个字符串
- SELECT CONCAT('hel','llo');
- ---- 返回hello
4、FIND_IN_SET(s1,s2)返回在字符串s2中与s1匹配的字符串的位置
- SELECT FIND_IN_SET("c", "a,b,c,d,e");
- ---- 返回3
5、FORMAT(x,n)函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入
- SELECT FORMAT(250500.5634, 2);
- ---- 返回250,500.56
6、INSERT(s1,x,len,s2)字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
- SELECT INSERT("google.com", 1, 6, "runnob");
- ---- 返回runoob.com
7、LOCATE(s1,s)从字符串 s 中获取 s1 的开始位置
- SELECT LOCATE('st','myteststring');
- ---- 返回5
8、LCASE(s)/LOWER(s)将字符串 s 的所有字母变成小写字母
- SELECT LOWER('RUNOOB');
- ---- 返回runoob
9、UCASE(s)/UPPER(s)将字符串 s 的所有字母变成大写字母
- SELECT UCASE('runoob');
- ---- 返回RUNOOB
10、TRIM(s)去掉字符串 s 开始和结尾处的空格
- SELECT TRIM(' RUNOOB ');
- ---- 返回RUNOOB
11、LTRIM(s)去掉字符串 s 开始处的空格
- SELECT LTRIM(' RUNOOB ');
- ---- 返回 ’RUNOOB ‘
12、RTRIM(s)去掉字符串 s 结尾处的空格
- SELECT RTRIM(' RUNOOB ');
- ---- 返回 ’ RUNOOB‘
13、SUBSTR(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串
- SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString;
- ---- 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符,返回UNO
14、SUBSTR/SUBSTRING(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串
- SELECT SUBSTR/SUBSTRING("RUNOOB", 2, 3);
- ---- 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符,返回UNO
15、POSITION(s1 IN s)从字符串 s 中获取 s1 的开始位置
- SELECT POSITION('b' in 'abc');
- ---- 返回2
16、REPEAT(s,n)将字符串 s 重复 n 次
- SELECT REPEAT('runoob',3);
- ---- 返回runoobrunoobrunoob
17、REVERSE(s)将字符串s的顺序反过来
- SELECT REVERSE('abc');
- ---- 返回cba
18、STRCMP(s1,s2)比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1 1、CURDATE()/CURRENT_DATE()返回当前日期 2、CURRENT_TIME()/CURTIME()返回当前时间 3、CURRENT_TIMESTAMP()返回当前日期和时间 4、ADDDATE(d,n)计算起始日期 d 加上 n 天的日期 5、ADDTIME(t,n)时间 t 加上 n 秒的时间 6、DATE()从日期或日期时间表达式中提取日期值 7、DAY(d)返回日期值 d 的日期部分 8、DATEDIFF(d1,d2)计算日期 d1->d2 之间相隔的天数 9、DATE_FORMAT按表达式 f的要求显示日期 d 10、DAYNAME(d)返回日期 d 是星期几,如 Monday,Tuesday 11、DAYOFMONTH(d)计算日期 d 是本月的第几天 12、DAYOFWEEK(d)日期 d 今天是星期几,1 星期日,2 星期一,以此类推 13、DAYOFYEAR(d)计算日期 d 是本年的第几天 14、EXTRACT(type FROM d)从日期 d 中获取指定的值,type 指定返回的值 15、DAYOFWEEK(d)日期 d 今天是星期几,1 星期日,2 星期一,以此类推 16、UNIX_TIMESTAMP()得到时间戳 17、FROM_UNIXTIME()时间戳转日期 1、IF(expr,v1,v2)如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2 2、CONV(x,f1,f2)返回 f1 进制数变成 f2 进制数 3、CURRENT_USER()/SESSION_USER()/SYSTEM_USER()/USER()返回当前用户
7.3日期函数
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_MONTH7.4MySQL高级函数
4、DATABASE()返回当前数据库名
5、VERSION()返回数据库的版本号