35.数据库的DQL的查询数据补充(二)

一、查询的稳固和学习
下方所有的代码的查询语句,[ ]表示可选择的语句,{ }表示必须写的 | 表示或者的意思
1.查询的先后顺序:
select
[all默认 | distanct 去重]
{* | table_name.* | field | table_name.filed as 别名…}
from
table_name as 别名
[inner | right | left join table_name2 as 别名…]
[on 关联的条件]
[where 添加的条件]
[group by 根据字段名进行分组]
[having 分组的筛选条件]
[order by 排序的字段 ,asc是升序,默认的是升序,desc 是降序]
[limit 起始索引,每页显示的数据条数]

二、新的SQL语句
首先创建几个表
#1.创建学生表

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `studentNo` int(11) NOT NULL COMMENT '学生编号',
  `studentName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
  `sex` tinyint(255) NULL DEFAULT NULL COMMENT '学生性别',
  `gradeid` int(11) NULL DEFAULT NULL COMMENT '年级编号',
  `phone` int(255) NULL DEFAULT NULL COMMENT '手机号',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生地址',
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生邮箱',
  `bornDate` datetime NULL DEFAULT NULL COMMENT '出生日期',
  PRIMARY KEY (`studentNo`) USING BTREE,
  INDEX `student_studentname_index`(`studentName`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '小猪佩奇', 0, 1, 4561324, '山上', '[email protected]', '2019-03-08 23:18:17');
INSERT INTO `student` VALUES (2, '小猪乔治', 1, 2, 4561324, '山上', '[email protected]', '2019-04-02 23:19:56');
INSERT INTO `student` VALUES (3, '苏溪', 0, 2, 132456, '斜坡下', '[email protected]', '2019-03-08 23:21:36');
INSERT INTO `student` VALUES (4, '姆巴佩', 1, 4, NULL, '斜坡下', NULL, NULL);

SET FOREIGN_KEY_CHECKS = 1;

#2.创建结果表

DROP TABLE IF EXISTS `result`;
CREATE TABLE `result`  (
  `studentNo` int(11) NULL DEFAULT NULL COMMENT '学生编号',
  `subjectNo` int(11) NULL DEFAULT NULL COMMENT '课程编号',
  `examDate` datetime NULL DEFAULT NULL COMMENT '考试时间',
  `studentResult` double(10, 0) NULL DEFAULT NULL COMMENT ' '
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of result
-- ----------------------------
INSERT INTO `result` VALUES (1, 3, '2019-03-20 23:29:49', 50);
INSERT INTO `result` VALUES (3, 3, '2019-03-19 23:30:30', 70);
INSERT INTO `result` VALUES (2, 1, '2019-03-29 23:31:06', 100);
INSERT INTO `result` VALUES (4, 1, '2019-03-13 12:12:30', 30);
INSERT INTO `result` VALUES (5, 1, '2019-03-05 12:12:45', 90);

#3.创建科目表

DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject`  (
  `subjectNo` int(11) NOT NULL COMMENT '课程编号',
  `subjectName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程名称',
  `classHour` int(255) NULL DEFAULT NULL COMMENT '课时',
  `gradeID` int(255) NULL DEFAULT NULL COMMENT '年级编号',
  PRIMARY KEY (`subjectNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of subject
-- ----------------------------
INSERT INTO `subject` VALUES (1, 'java基础语法', 120, 1);
INSERT INTO `subject` VALUES (2, 'java面向对象', 180, 2);
INSERT INTO `subject` VALUES (3, 'MySQL数据库', 200, 2);
INSERT INTO `subject` VALUES (4, 'Web前段', 180, 2);
INSERT INTO `subject` VALUES (5, '人工智能', 130, 3);

#4.创建category表

DROP TABLE IF EXISTS `category`;
CREATE TABLE `category`  (
  `id` int(11) NOT NULL COMMENT '栏目id',
  `categoryName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '栏目名称',
  `pid` int(11) NULL DEFAULT NULL COMMENT '栏目父id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of category
-- ----------------------------
INSERT INTO `category` VALUES (1, '射击游戏', NULL);
INSERT INTO `category` VALUES (2, '角色扮演', NULL);
INSERT INTO `category` VALUES (3, '益智游戏', NULL);
INSERT INTO `category` VALUES (4, '穿越火线', 1);
INSERT INTO `category` VALUES (5, '吃鸡', 1);
INSERT INTO `category` VALUES (6, '连连看', 3);
INSERT INTO `category` VALUES (7, '2048', 3);

1.掌握排序order by 的使用
#练习1:将学生信息以成绩的升序展示 asc表示升序 desc表示降序

select 
*
from
result
order  by 
studentResult   DESC;

#练习2:将学生信息通过链表查询查询出来,并且按照降序展示

select
	stu.studentName '姓名' ,sub.subjectName  '科目',
	r.studentResult  '成绩',  r.examDate  '考试时间'
from
	result r  ,  student  stu,  subject   sub
where
	r.studentNo = stu.studentNo  and
	r.subjectNo = sub.subjectNo
order by 
	r.studentResult      desc;		

#练习3:将学生信息以成绩的升序展示 asc表示升序 desc表示降序
然后再添加时间降序
#注意,如果涉及多个字段,每个字段都必须进行排序的指定,多个字段的排序会按照字段的优先顺序,进行相应的排序

SELECT
	stu.studentName '姓名',sub.subjectName '科目',
	r.studentResult '成绩',r.examDate '考试时间' 
FROM 
	result r,student stu,`subject` sub
WHERE
	r.studentNo = stu.studentNo
	AND r.subjectNo = sub.subjectNo
order  by 
	r.studentResult  DESC,  r.examDate  asc;	

2.掌握Limit的分页使用,仅仅在MySQLzhong 存在
#Limit 数据的起始索引,数据显示的条数
#查询第一页的数据,每一页显示2条信息
#limit 0,2
#练习1:

select
	*
from 
 category
 limit 0,2;

#查询第三页的数据,每一页的显示的数据条数为2条
#起始索引和页的数的公式:(当前页-1)*每页显示条数
#练习2

select
	* 
from 
	category
limit 4,2;
	

#练习3查询学生学号,姓名,成绩,时间,按照成绩和时间进行排序降序,分页进行查询,每页显示一条信息

SELECT
	r.studentNo '学号',stu.studentName '姓名',
	sub.subjectName '科目',r.studentResult '成绩',
	r.examDate '时间'
FROM	
	result r,student stu,`subject` sub
WHERE
	r.studentNo = stu.studentNo
	AND
	r.subjectNo = sub.subjectNo
order  by   r.studentResult   desc,  r.examDate   desc
limit  2,1

#采用子查询进行连接查询,子查询可以放在查询语句的任何地方

select
sub.subjectName '科目',
(select  g.gradeName  from  frade  g  where g.gradeId = sub.gradeId)'年级'
from
	subject  sub;

#采用子查询作为多查询语句的联合
#练习:查询高等数学成绩比贾斯文高的学生信息
#1.查询高等数学对应的编号

SELECT
	  sub.subjectNo
 FROM
 	 `subject` sub
  WHERE
  	 sub.subjectName = '高等数学';

#2.查询贾斯文对应的学生编号

SELECT 
	stu.studentNo
 FROM
 	 student stu 
  WHERE
  	 stu.studentName = '贾斯文';

#3.查询贾斯文的成绩

SELECT
	 r.studentResult 
FROM 
	result r
 WHERE r.studentNo = 1003;

#4.``组合信息进行(子查询的使用)
#查询高等数学成绩比贾斯文高的学生信息

select
		(SELECT stu.studentName FROM student stu WHERE r1.studentNo = stu.studentNo) '姓名'
from
	result  r1
where
	r1.studentResult>(
		select 
			r.studentResult
		from
			result  r
		where
			r.studentNo =(select  stu.studentNo from student stu  where  stu.studentName='贾斯文') 
			)
			   and   r1.subjectNo = (select  sub.subject from subject  sub  where  sub.subjectName = '高等数学');

4.掌握MySQL的常用的常用函数
##字符串函数
#1.替换字符串 replace(str,from_str,to_str)

select  replace ('MySQL数据库','MySQL','Oracle');

#2.拼接字符串
#concact(str1,str2…)

select concat  ('MySQL','数据库');

#3.截取字符串
#substr(str,pos)位置是1开始
#substr(str,pos,len)从pos开始截取指定len的长度

select   substr('这是MySQL数据库',3);
select  substr('这是MySQL数据库',3,5);

#4.去空格
#LTRIM();去除左边的空格
#RTRIM();去除右边的空格

select   ltrim('    yiyang ');
select RTRIM('kmmmm      ');

#5.首字母大写

select  concat(upper(substr('hehe',1,1)),substr('hehe',2))

#6.全部字母大写

select  upper('hhee');

#7.全部小写

select  lower('HH');

#8.时间函数

select  now();#获取当前系统的时间
select  dayofweek(now());#获取当前时间的星期数
select  dayofmonth(now());#获取当前时间的月份数
select  dayofyear(now ());获取当前时间的年份数
select  hour(now());#获取当前的小时数

#9.四舍五入

select  round (3.1);
SELECT  ROUND(3.14,2);#对小数点后的第二位进行四舍五

#10.向上取整和想下取整

select  ceil(3.2);#向上取整
select  floor(3.6);#向下取整

#11.获取随机整数
#公式(int)(math.random()(max-min))+min
#floor(rand()
(max-min))+min
#[2,6)

select  floor(rand()*(6-2))+2

#12.掌握统计函数

select max(studentResult)   from  result;#求最大值
select  min(studentResult)  from result#求最小值
select  sum(studentResult)   from result#求和
select  avg(studentRsult)   from   result#求平均值
select  count(studentNo)  from  result#求某个字段的个数

#13.掌握MySQL的分组查询 group by
#计算各个科目的考试成绩的平均成绩,并且求出大于60分的科目名称和编号

 select
 	subjectNo  '科目编号',(select  sub.subjectName  from  subject  sub   where  sub.subjectNo = r.subjectNo)  '科目名称'
 	avg(studentResult)  '平均分',
 from 
 	result  r
 group  by 
 	subjectNo
 having 
 avg(studentResult)>60;			

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88830401