MySQL数据库查询

准备工作:脚本文件xkgl.sql下载:xkgl脚本.sql

1、执行脚本xkgl.sql (创建xkgl库、表及插入数据),观察有无错误,如有记录错误信息,并解决。

(1) 执行脚本

执行代码:

source+xkgl.sql文件所放的位置;(要用反斜杠);

(2)检查创建表的情况

代码:

show tables;

检查结果截图:

(3)检查七张表的数据记录数

代码:

select c1.class_count,c2.course_count,d.department_count,

g.grade_count,s1.schedule_count,s2.student_count,

t.teacher_count from

(select count(*) class_count from class) c1,

(select count(*) course_count from course) c2,

(select count(*) department_count from department) d,

(select count(*) grade_count from grade) g,

(select count(*) schedule_count from schedule) s1,

(select count(*) student_count from student) s2,

(select count(*) teacher_count from teacher) t;

检查结果截图:

2、在xkgl数据库中进行如下的单表查询

(1)查询teacher表中所有教师的姓名和年龄:

代码:

select Teachername,year(now())-year(Brith) as age from teacher;

查询结果截图:

(2)查询所有系的信息:

代码:

select * from department;

查询结果截图:

(3)查询学分值大于等于4的课程的名称:

代码:

select * from course where credit>=4;

查询结果截图:

(4)查询Cs010901班的女生信息:

代码:

select * from student where Sex='女' and ClassID='Cs010901';

检查结果截图:

(5)查询学生姓名中第2个字为“丽”的学生信息:

代码:

select * from student where StudentName like '_丽%';

检查结果截图:

(6)查询选修了Dp010001号课程的学生中成绩位于4到8名的学生学号和成绩:

代码:

select StudentID,Grade from grade where CourseID='Dp010001' order by Grade desc limit 3,5;

检查结果截图:

(7)查询schedule表中学年和课程号的组合,去掉重复:

代码:

select distinct SchoolYear,CourseID from schedule;

查询结果截图:

(8)查询年龄大于40岁的教授和副教授的姓名和性别:

代码:

select Teachername,Sex from teacher where Profession='教授' or Profession = '副教授' and year(now())-year(Brith)>40;

查询结果截图:

(9)查询course表中前5行数据:

代码:

select * from course limit 0,5;

查询结果截图:

3、在xkgl数据库中进行如下的分类汇总。

(1)查询course表中的最大学分和最小学分的课程:

代码:

select max(credit)最高分,min(credit)最低分 from course;

查询结果截图:

(2)查询不同职称的教师人数:

代码:

select Profession,count(Profession) 人数 from teacher group by Profession;

查询结果截图:

(3)查询grade表中选修了3门以上课程的学生学号:

代码:

select StudentID,count(CourseID) 选修课程数 from grade group by StudentID having count(CourseID)>=3;

查询结果截图:

(4)统计各个班的男生和女生人数:

代码:

select ClassID,count(Sex='男') 男生人数,count(Sex='女') 女生人数 from student group by ClassID;

查询结果截图:

4、在xkgl数据库中进行如下的连接查询。

(1)查询课程名及该课程的得分情况:

代码:

select CourseName,StudentID,Grade from grade join course on grade.CourseID=course.CourseID;

查询结果截图:

(2)查询教师姓名及其所教授的课程名:

代码:

select distinct teacher.Teachername,course.CourseName from teacher inner join schedule on teacher.TeacherID=schedule.TeacherID inner join course on schedule.CourseID=course.CourseID;

查询结果截图:

(3)查询比‘刘芳’老师年龄小的教师信息:

代码:

select t2.* from teacher t1,teacher t2 where t1.Brith

查询结果截图:

(4)查询全部教师的授课情况,包括没有授课的老师:

代码:

select t.Teachername,CourseID,ClassID from schedule sc right join teacher t on sc.TeacherID=t.TeacherID;

查询结果截图:

(5)查询既选修了Dp010001又选修了Dp010004号课程的学生的学号、姓名:

代码:

select s.StudentID,s.StudentName from student s,schedule sc1,schedule sc2 where s.ClassID=sc1.ClassID and s.ClassID=sc2.ClassID and sc1.CourseID='Dp010001' and sc2.CourseID='Dp010004';

查询结果截图:

5、在xkgl数据库中进行如下的嵌套查询。

(1)查询“计算机系”的全部学生信息:

代码:

select student.* from student join class on student.ClassID=class.ClassID join department on department.DepartmentID=class.DepartmentID and department.DepartmentName='计算机系';

查询结果截图:

(2)查询Dp010001课程中最低分的学生信息:

代码:

select s.* from student s join grade g on s.StudentID=g.StudentID where g.CourseID='Dp010001' order by g.Grade asc limit 0,1;

检查结果截图:

(3)查询Dp010001课程中成绩未达到该门课程平均分的选课信息:

代码:

select * from grade g where g.Grade

查询结果截图:

(4)查询Cs010901班比Cs010902班年龄都大的学生信息:

代码:

select * from student where birth < all(select birth from student where ClassID='Cs010902') and ClassID='Cs010901';

查询结果截图:

(5)查询选修了Dp010001课程而没有选修Dp010002号课程的学生学号:

代码:

select StudentID from grade where CourseID='Dp010001' and studentid not in (select studentid from grade where courseid='Dp010002');

查询结果截图:

(6)查询“大学英语”成绩不及格的学生人数是多少?

代码:

select count(*) 不及格人数 from grade,course where grade.CourseID=course.CourseID and CourseName='大学英语(一)' and grade.Grade<60;

查询结果截图:

(7)查询选修了Dp010001号课程的学生的学号和成绩

代码:

select StudentID,Grade from grade where CourseID='Dp010001';

检查结果截图:

(8)查询结果按成绩降序排序,成绩相同按学号升序排序。

代码:

select * from grade order by Grade desc,StudentID asc;

检查结果截图:

(9)查询course表中的最大学分和最小学分的课程名。(用order by子句)

代码:

select (select coursename from course order by credit desc limit 1) as 最高学分课程名 ,(select coursename from course order by credit asc limit 1) as 最低学分课程名 from course limit 1;

检查结果截图:

(11)统计各个班的学生人数。

代码:

select s.ClassID,(select count(student.StudentID) from student where student.ClassID=s.ClassID) as 人数 from class s;

检查结果截图:

(12)查询不同职称不同性别教师人数。

代码:

select distinct t.Profession,(select count(TeacherID) from teacher where Profession=t.Profession and Sex='男') as 男教师人数,(select count(TeacherID) from teacher where Profession=t.Profession and Sex='女') as 女教师人数 from teacher t;

检查结果截图:

(13)查询和‘刘芳’老师同职称的教师信息。

代码:

select t1.* from teacher t1,teacher t2 where t1.Profession=t2.Profession and t2.Teachername='刘芳';

检查结果截图:

(14)合并显示学生人数及选课学生人数。

代码:

select '学生人数',count(s.StudentID) 人数 from student s

UNION

select '选修人数',count(b.StudentID) 人数 from (select StudentID from grade g group by StudentID)

检查结果截图:

(15)合并显示教师中的男性教师和有教授职称的教师。

代码:

select count(t.TeacherID) from teacher t where Sex='男'

union

select count(te.TeacherID) from teacher te where Profession='教授';

检查结果截图:

(16)计算机系的平均成绩为多少?

代码:

select avg(g.Grade) 计算机系平均分 from grade g,student s,class c1,department d where d.DepartmentID=c1.DepartmentID and s.StudentID=g.StudentID and c1.ClassID=s.ClassID and d.DepartmentName='计算机系';

检查结果截图:

(17)查询 “计算机系”的班级信息。

代码:

select c.* from class c where c.DepartmentID=(select d.DepartmentID from department d where d.departmentname='计 算机系');

检查结果截图:

(18)用EXISTS方式查询选修了Dp010001的学生学号和姓名

代码:

select s.StudentID,s.StudentName from student s where exists(select * from grade g where g.courseid='Dp010001' and g.studentid=s.studentid);

检查结果截图:

(19)查询计算机系选修了5门以上课程的学生的学号和姓名。

代码:

select s.StudentID,s.StudentName from department d join class c on d.DepartmentID=c.DepartmentID join student s on s.ClassID=c.ClassID join grade g on g.StudentID=s.StudentID where d.DepartmentName='计算机系' group by s.StudentID having count(g.CourseID)>5;

检查结果截图:

【分析与思考】

(1) LIKE的通配符有哪些?分别代表什么含义?

通配符

功能

%

匹配零个或多个字符组成的任意字符串

_(下划线)

匹配任意一个字符

(2)知道学生的出生日期,如何求出其年龄?

答:代码:year(now())-year(brith);

(3) IS能用“=”来代替吗?如何周全地考虑“空数据”的情况?

答:不可以的,is是用来判断null的,比如 remark is null 或者remark is not null,=是用来直接比较值的;= 用在2种情况下:一是判断值是否相等 where id=1;二是用于赋值set id=1;用 is null去判断是否真的是空;

(4)关键字ALL和DISTINCT有什么不同的含义?关键字ALL是否可以省略不写?

答:ALL表示所有的字段,有重复的2条,2 条都显示DISTINCT表示如果有重复的,只取一条;All关键字是可以省略,但是省略all关键字在select子句和union子句会产生很不一样的效果

(5)聚集函数能否直接使用在SELECT子句、HAVING子句、WHERE子句、GROUP BY子句中?

答:聚集函数 可用于 select和having by中,where 是在 聚集函数计算前 筛选数据,having by 是在聚集函数计算后筛选数据;

(6) WHERE子句与HAVING子句有何不同?

答:1、作用对象不同:where子句作用于表(或视图)中得行,而having子句作用于形成的组;where子句限定查找的行,having子句限定查找的组;

2、执行顺序不同:若查询语句中同时有where子句和Having子句,执行时先去掉不满足where条件的行,然后分组,分组后再去掉不满足having条件的组;

3、where自居不能直接使用聚合函数,having子句条件中可以包含聚合函数

(7) count(*)、count(列名)、count(distinct 列名)三者的区别是什么?通过一个实例说明。

答:count(*):是统计所有的个数不管是否重复,是否为空值;

count(列名):不统计为空值的行;

count(distinct 列名):统计不重复的行数为多少;

比如:

Num1

1

2

null

2

Count(*)=4;

Count(Num1)=3;

Count(distinct Num1)=3;

(8)内连接与外连接有什么区别?

答:内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

全外连接:左外连接 union 右外连接。

(9) “=”与IN在什么情况下作用相同?

答:当in的候选值只有一个的时候;

如有什么问题欢迎下方留言讨论!!

MySQL实验四数据库的查询_MySQL数据库查询(实验四)相关推荐

  1. mysql数据库实验查询_MySQL数据库表数据的查询操作实验

    实验3.MySQL数据库表数据的查询操作实验(1) 一.实验目的 掌握SELECT 语句的基本语法格式. 掌握SELECT 语句的执行方法. 掌握SELECT 语句的 GROUP BY 和 ORDER ...

  2. mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计[实训目的与要求][实训原理][实训步骤]一.简单查询二.按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWE ...

  3. mysql数据库实验3查询_mysql数据库(3)-查询

    数据库设计规范 查询 创建数据库.数据表 -- 创建数据库 create database python_test_1 charset=utf8; -- 使用数据库 use python_test_1 ...

  4. mysql数据库的查询_mysql数据库查询

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

  5. mysql数据库操作多表查询_MySQL数据库查询操作进阶——多表查询

    多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...

  6. mysql所有班级名称和人数_mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...

    mysql数据库优化课程---12.mysql嵌套和链接查询(查询user表中存在的所有班级的信息?) 一.总结 一句话总结: in:distinct:select * from class wher ...

  7. mysql客户端查询_MySQL数据库之利用mysql客户端查询UCSC数据库

    本文主要向大家介绍了MySQL数据库之利用mysql客户端查询UCSC数据库 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. UCSC Genome Browser是由Unive ...

  8. mysql 关联查询_mysql数据库调优(二)

    第五.查询优化 1.查询慢的原因:网络因素.CPU.IO.上下文切换.系统调用.生成统计信息.锁等待时间等 2.优化数据库访问:查询性能地下的原因是访问的数据太多,某些查询不可避免的需要筛选大量的数据 ...

  9. mysql 脏数据查询_MySQL数据库02

    MySQL数据库 前言: 前面我们了解了什么是数据库,什么是MySQL数据库以及如何运用,接下来我们接着深入学习MySQL. (提前声明,以下所提供的事例不标准,仅供参考) 数据库的备份与还原: 备份 ...

最新文章

  1. ajax请求后台表格数据,商品后台表格数据的展现方式
  2. SAP Spartacus批量读取产品的逻辑
  3. 关于Android studio3.0的坑之butterknife 8.4.0
  4. 日常问题——初始化Hive仓库报错com.google.common.base.Preconditions.checkArgument
  5. python单元测试mock_单元测试-具有多次调用方法的Python Mock对象
  6. NB-IoT终端进网检测介绍
  7. Sentinel热点Key降级下_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0043
  8. 数据挖掘原理与算法_古今争翘,一首机器学习与数据挖掘神曲,共11.99G送你直上云霄...
  9. 深度学习入门(鱼书)学习笔记
  10. 高通8953 Android9.0修改设备节点权限问题
  11. 【DNS区域传输测试/子域暴力破解/横幅版本检测/生成映射】
  12. Spring的运行原理
  13. Linux新建分区值超出范围,关于安装Linux (FC6)频率超出范围与显卡驱动
  14. 艾美捷胆固醇肉豆蔻酸酯说明书和相关研究
  15. cts测试如何跳过某个模块不测过
  16. Linux资源控制-使用cgroup控制CPU和内存
  17. python读取文本并且替换_python 读取文件并替换字段的实例
  18. 数学模型课程期末复习提纲(上)
  19. PS吸管工具用不了?
  20. 2022-2028全球及中国免下车洗车系统行业研究及十四五规划分析报告

热门文章

  1. 使用jQuery实现echars智能图表面板(附代码)
  2. Android 动画详尽教程 [详尽!详尽!]
  3. Linux 文件系统层级标准
  4. 短时记忆想要变成长时记忆,是需要专门付出努力的,关联越多,越能记住
  5. “Hack DHS”漏洞猎人在 DHS 系统中发现 122 个安全漏洞
  6. 基于无向图的城市间快递派送算法
  7. 【githubshare】国外工程师 Neil 在 GitHub 上开源了任天堂 64 模拟器
  8. [P4V]Perforce常用命令总结
  9. USB Server应用于网银U盾
  10. 【GNN应用】一文详解欺诈检测在GNN上应用(窦英通)