MySQL常用语句总结
建表语句在最下方




1. 常用查询语句
- 查询students表的所有记录
select * from students; - 查询students表中所有记录的sname、ssex和class列
select sname,ssex,class from students; - 查询teachers表中的系(去重)
# 方法一:disinct去重 select DISTINCT depart from teachers; # 方法二:group by分组 select depart from teachers group by depart; - 查询scores表中成绩在60到80之间的所有记录
# 方法一:between...and select * from scores where degree between 60 and 80; # 方法二:and条件连接 select * from scores where degree>=60 and degree<=80; - 查询scores表中成绩为85,86或88的记录
# in 的多值查询 select * from scores where degree in (85,86,88); - 查询students表中“95031”班或性别为“女”的同学记录
# or 的使用 select * from students where class='95031' or ssex='女'; - 以cno升序、degree降序查询scores表的所有记录
# order by用于排序,desc降序,asc升序,rand()随机排序 select * from scores order by cno asc,degree desc; - 查询“95031”班的学生人数
# 聚合函数的 count()--记录总条数 select COUNT(*) from students where class='95031'; - 查询至少有2名男生的班号
# as为给该字段起名,当条件为聚合函数时,不能用where而用having select class,COUNT(*) as num from students where ssex='男' GROUP BY class HAVING COUNT(*)>=2; - 查询最高分
# 聚合函数 MAX()--最大值 select MAX(degree) from scores; - 查询最低分
# 聚合函数 MIN()--最小值 select MIN(degree) from scores; - 查询scores表中的最高分的学生学号和课程号
select sno,cno from scores where degree=( select MAX(degree) from scores ); - 查询‘3-105’号课程的平均分
# 聚合函数 AVG()--平均值 select AVG(degree) from scores where cno='3-105'; - 查询各科的平均分除不尽的保留两位小数
select cno,ROUND(AVG(degree),2) from scores group by cno; - 查询最低分大于70,最高分小于90的sno列
select sno from scores group by sno having MIN(degree)>70 and MAX(degree)<90; - 查询每个学生的总成绩
# 聚合函数 SUM()--求和 select sno,SUM(degree) from scores GROUP BY sno; - 查询所有教师和同学的name、sex和birthday
# UNION 操作符用于合并两个或多个 SELECT 语句的结果集 # 注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。 # UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。 select tname as name,tsex as sex,tbirthday as birthday from teachers UNION select sname,ssex,sbirthday from students;
- 查询所有未任课教师的tname和depart
# 多表联查 select tname,depart from teachers where tno not in ( select DISTINCT tno from courses ); - 查询姓“王”的同学记录
select * from students where sname like '王%'; - 查询“王某”的同学记录
select * from students where sname like '王_'; - 查询同名的同学记录
# 同名则说明count计数大于1 select * from students where sname=( select sname from students group by sname having COUNT(sname)>1 ); - 查询学生的姓名和年龄
# YEAR(date)函数返回的年份值范围为 1000 到 9999,如果日期为零,YEAR() 函数返回 0 # NOW()函数为此时的时间 select sname,YEAR(NOW())-YEAR(sbirthday) as age from students; - 查询男教师及其所上的课程
# 左连接 left join,on之后写条件 select t.tname,c.cname from (select * from teachers where tsex='男')t left join (select * from courses)c on t.tno=c.tno; - 查询各门课程的最高分同学的信息
#多表查询,一个字段用in,多个字段用left join SELECT * FROM students WHERE sno IN ( SELECT a.sno FROM ( SELECT max( degree ) degree, cno FROM scores GROUP BY cno ) b LEFT JOIN ( SELECT * FROM scores ) a ON a.cno = b.cno AND a.degree = b.degree ) - 查询学生表中的前两个男同学信息
# limit 分页查询,第一个参数0指的是从第一条数据开始,第二个参数2表示查询两条数据 select * from students where ssex='男' limit 0,2;
2.常用的一些函数整理
2.1 五大聚合函数
- 统计记录条数:count()
- 求和:sum()
- 求平均值:avg()
- 求最大值:max()
- 求最小值:min()
2.2 保留小数位数的函数
- round(x,d):用于数据的四舍五入(小数最后一位为0时不会强制保留小数),round(x)默认为round(x,0),参数d可以是负数。
# 举几个例子
select round(11.049,1); #结果为 11.1
select round(11.03,1); #结果为 11,不会强制保留小数
select round(11.05,0); #结果为 11
select round(14.95,-1); #结果为 10
select round(15.05,-1); #结果为 20
select round(44.95,-2); #结果为 0
select round(54.95,-2); #结果为 100
- truncate(x,d):d为正数时,保留d位小数(小数最后一位为0时不会强制保留小数),之后的小数直接舍弃;
select truncate(11.155,2); # 11.15
select truncate(11.15,-1); # 10
select truncate(11.15,-2); # 0
- format(x,d):强制保留d位小数,四舍五入,d取负数时相当于0,返回结果为string类型,整数部分超过3位时以逗号分隔。
select format(11.155,2); # 11.16
select format(12345.15,-1); # 12,345
select format(12345,2); # 12,345.00
2.3 用于处理数值的函数
- 绝对值的函数:abs(x)
select abs(-1); # 1
- 向上取整的函数:ceil(x)
select ceil(1.1); # 2
select ceil(-1.1); # -1
- 向下取整的函数:floor(x)
select floor(1.9); # 1
select floor(-1.1); # -2
- 取模的函数:mod(x,y) 【mod(x,y)=x-y*INT(x/y)】
select mod(-3,2); # -1
select mod(3,-2); # 1
select mod(-12,23); # -12
- 随机数的函数:rand()
# 当rand()无参时,随机生成0-1的数
select rand(); # 0.6553694872701257 0.8951968177176982
# 当rand()有参时,生成重复的0-1的随机数
select rand(1); # 0.40540353712197724 0.40540353712197724
# 使用 order by rand() 查询的结果随机排列
select * from students order by rand();
2.4 用于处理字符串的函数
- 大小写转换的函数:转大写upper(str) 或者 ucase(str),转小写:lower(str) 或者 lcase(str)
select upper('aBc'),ucase('dEf'); # ABC DEF
select lower('AbC'),lcase('DeF'); # abc def
- 合并字符串的函数:concat(str1,str2,str3…)
select concat('a','bc','d'); # abcd
- 比较字符串大小的函数:strcmp(str1,str2)
# 参数1相对参数2靠字典序前返回-1.靠字典序后返回1,相同返回0
select strcmp('aa','cc'); # -1
select strcmp('aa','aa'); # 0
select strcmp('cc','aa'); # 1
- 获取字符串字节数的函数:length(str)
select length('abcd9'); # 5
select length('我'); # 3
- 获取字符串字符数的函数:char_length(str)
select char_length('abcd9'); # 5
select char_length('我'); # 1
2.5 用于处理时间日期的函数
- 获取当前日期:curdate(),current_date()
select curdate(); # 2021-01-20
select current_date(); # 2021-01-20
- 获取当前时间:curtime(),current_time()
select curtime(); # 01:21:51
select current_time(); # 01:21:51
- 获取当前日期时间:now()
select now(); # 2021-01-20 01:22:55
- 获取date日期中的月份:month(date),monthname(date)
select month(now()); # 1
select month(curdate()); # 1
- 获取date日期中的今年的第几周:week(date,mode)
# mod为可选参数,用于确定周数计算的逻辑。它允许您指定本周是从星期一还是星期日开始,返回的周数应在0到52之间或0到53之间。
- 获取date日期中的今天周几:weekday(date),dayname(date)
# weekday() 返回星期的索引值,及周一0,周二1...
select weekday(now()); # 2
select dayname(now()); # Wednesday
- 获取date日期中的年份:year(date)
- 获取time时间中的小时数:hour(time)
- 获取time时间中的分钟数:minute(time)
3. 复制表结构和表数据
- 仅复制表结构
# 新建表t_tb,复制teachers表的结构
create table t_tb like teachers;
- 仅复制表数据
# 已有表t_tb,复制teachers表的数据
insert into t_tb select * from teachers;
- 复制表结构和表数据
# 新建表t1_tb,复制teachers表的结构和表数据
create table t1_tb select * from teachers;
建表语句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for courses
-- ----------------------------
DROP TABLE IF EXISTS `courses`;
CREATE TABLE `courses` (
`cno` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`cname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`tno` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`cno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of courses
-- ----------------------------
INSERT INTO `courses` VALUES ('3-105', '计算机导论', '825');
INSERT INTO `courses` VALUES ('3-245', '操作系统', '804');
INSERT INTO `courses` VALUES ('6-106', '概率论', '831');
INSERT INTO `courses` VALUES ('6-166', '模拟电路', '856');
INSERT INTO `courses` VALUES ('9-888', '高等数学', '831');
INSERT INTO `courses` VALUES ('9-999', '语文', '000');
-- ----------------------------
-- Table structure for scores
-- ----------------------------
DROP TABLE IF EXISTS `scores`;
CREATE TABLE `scores` (
`sno` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`cno` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`degree` decimal(10, 1) NOT NULL,
PRIMARY KEY (`sno`, `cno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of scores
-- ----------------------------
INSERT INTO `scores` VALUES ('101', '3-105', 64.0);
INSERT INTO `scores` VALUES ('101', '6-166', 85.0);
INSERT INTO `scores` VALUES ('103', '3-105', 92.0);
INSERT INTO `scores` VALUES ('103', '3-245', 86.0);
INSERT INTO `scores` VALUES ('105', '3-105', 88.0);
INSERT INTO `scores` VALUES ('105', '3-245', 75.0);
INSERT INTO `scores` VALUES ('107', '3-105', 91.0);
INSERT INTO `scores` VALUES ('107', '6-106', 79.0);
INSERT INTO `scores` VALUES ('108', '3-105', 78.0);
INSERT INTO `scores` VALUES ('108', '6-166', 81.0);
INSERT INTO `scores` VALUES ('109', '3-105', 76.0);
INSERT INTO `scores` VALUES ('109', '3-245', 68.0);
-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`sno` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`sname` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`ssex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`sbirthday` datetime(0) NULL DEFAULT NULL,
`class` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`sno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES ('101', '李军', '男', '1976-02-20 00:00:00', '95033');
INSERT INTO `students` VALUES ('103', '陆君', '男', '1974-06-03 00:00:00', '95031');
INSERT INTO `students` VALUES ('105', '匡明', '男', '1975-10-02 00:00:00', '95031');
INSERT INTO `students` VALUES ('107', '王丽', '女', '1976-01-23 00:00:00', '95033');
INSERT INTO `students` VALUES ('108', '曾华', '男', '1977-09-01 00:00:00', '95033');
INSERT INTO `students` VALUES ('109', '王芳', '女', '1975-02-10 00:00:00', '95031');
INSERT INTO `students` VALUES ('110', '王芳', '女', '1990-09-08 11:42:06', '95033');
-- ----------------------------
-- Table structure for teachers
-- ----------------------------
DROP TABLE IF EXISTS `teachers`;
CREATE TABLE `teachers` (
`tno` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`tname` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`tsex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`tbirthday` datetime(0) NULL,
`prof` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`depart` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`tno`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of teachers
-- ----------------------------
INSERT INTO `teachers` VALUES ('804', '易天', '男', '1958-12-02 00:00:00', '副教授', '计算机系');
INSERT INTO `teachers` VALUES ('825', '李萍', '女', '1972-05-05 00:00:00', '助教', '计算机系');
INSERT INTO `teachers` VALUES ('831', '陈冰', '女', '1977-08-14 00:00:00', '助教', '电子工程系');
INSERT INTO `teachers` VALUES ('856', '王旭', '男', '1969-03-12 00:00:00', '讲师', '电子工程系');
SET FOREIGN_KEY_CHECKS = 1;
这篇博客详细总结了MySQL中的常见查询语句和函数应用,包括选择特定列、聚合函数、排序、分组、联查等操作,以及字符串处理、日期时间函数等。还介绍了如何复制表结构和数据,提供了丰富的示例来帮助理解。
1121

被折叠的 条评论
为什么被折叠?



