当前位置: 首页 > news >正文

实验三 数据查询

一、【实验教学

1、掌握单表查询。

2、掌握多表查询。

二、【实验教学的基本要求】

1、掌握SQL程序设计基本规范;

2、熟练运用SQL实现数据基本查询,包括单表查询、分组统计查询和连接查询;

3、理解和掌握SQL查询语句中各个子句的特点和作用,按照SQL程序设计规范,写出具体的SQL查询语句并调试通过。

三、【实验原理】

基本查询和统计查询都要用到SELECT语句,但根据不同的查询要求,会使用不同的关键字或集合函数。

(1)SELECT语句的基本语法格式如下:

SELECT [ALL|DISTINCT ] <目标列表达式> [别名] [,<目标列表达式> [别名] ] …

FROM <表名或视图名> [别名]  [,<表名或视图名> [别名] ] ] … | (<SELECT语句>) [ AS ] <别名>

[WHERE <条件表达式> ]

[GROUP BY <列名1> [ HAVING <条件表达式> ] ]

[ORDER BY <列名2> [ ASC|DESC]]

LIMIT <行数1>[ OFFSET <行数2>];

(2)聚集函数:

统计元组个数

COUNT(*)

统计一列中值的个数

COUNT([DISTINCT|ALL] <列名>)

计算一列值的总和(此列必须为数值型)

SUM([DISTINCT|ALL] <列名>)

计算一列值的平均值(此列必须为数值型)

AVG([DISTINCT|ALL] <列名>)

求一列中的最大值和最小值

MAX([DISTINCT|ALL] <列名>)

MIN([DISTINCT|ALL] <列名>)

四、【实验内容】

题目1:单表查询:——SELECT……FROM

(1) 查询全体学生的所有信息;

(2) 查询选修了课程的学生的学号;

(3) 查询考试成绩有不及格的学生的学号;

(4) 查询年龄在20-30岁直接的学生的姓名,性别,所在系;

(5) 查询 IS,CS,MA系的所有学生的姓名和性别;

(6) 查找所有姓‘李’的学生的姓名,学号和性别;

(7) 查询没有先行课的课程的课程号cno和课程名cname;

题目2:查询结果排序:——ORDER BY 子句

(1)查询全体学生的情况,查询结果按所在系号升序排列,同一系中的学生按年龄降序排列;

题目3:连接查询;——关系数据库中最主要的查询,WHERE子句

(1) 查询每一门课程的间接先修课(只求两层即先修课的先修课),并且间接先修课不为空;

(2) 列出所有学生的基本情况和选课情况,若没有选课,则只列出基本情况信息;

(3) 查询每个学生的学号,姓名,选修的课程名和成绩;

题目4:使用带IN谓词的子查询——适用于集合查询

(1)查询与‘刘晨’在同一个系学习的学生的信息;

(2)查询选修了课程名为‘信息系统’的学生的学号和姓名;

(3)查询选修了课程‘1001’和课程‘1002’的学生的学号;

题目5:使用带比较运算的子查询

(1)查询比‘刘晨’年龄小的所有学生的信息;

五、【主要实验仪器及设备】

计算机、

CREATE DATABASE XSGL;
USE XSGL;CREATE TABLE student(
sno CHAR(9) PRIMARY KEY,
sname CHAR(10) NOT NULL UNIQUE,
ssex CHAR(2),
sage INT,
sdept CHAR(5));CREATE TABLE course(
cno CHAR(4) PRIMARY KEY,
cname CHAR(40) NOT NULL,
cpno CHAR(4),
credit INT,
FOREIGN KEY(cpno)REFERENCES course(cno)
);CREATE TABLE sc(
sno CHAR(9),
cno CHAR(4), 
grade DECIMAL(5,1),
PRIMARY KEY(sno,cno),
FOREIGN KEY (cno) REFERENCES course(cno),
FOREIGN KEY (sno) REFERENCES student(sno) 
);INSERT INTO student(sno, sname, ssex, sage, sdept)
VALUES ('95001', '李勇', '男', 20, 'CS'),('95002', '刘晨', '女', 19, 'IS'),('95003', '王敏', '女', 18, 'MA'),('95004', '张立', '男', 19, 'IS'),('95005', '刘云', '女', 18, 'CS');INSERT INTO course(cno, cname, credit, cpno)
VALUES ('1006', '数据处理', 3, NULL),('1007', 'PASCAL语言', 4, '1006'),('1005', '数据结构', 4, '1007'),('1002', '数学', 6, NULL),('1001', '数据库', 4, '1005'),('1003', '信息系统', 3, '1001'),('1004', '操作系统', 4, '1006');		INSERT INTO sc(sno, cno, grade)
VALUES ('95001', '1001', 92.3),('95001', '1002', 85.0),('95001', '1003', 88.3),('95002', '1002', 90.5),('95002', '1003', 80.0),('95003', '1002', 85.6),('95004', '1001', 58.9),('95004', '1002', 85.7);	-- 	查询全体学生的所有信息;		 SELECT * from student;	
-- 	 查询选修了课程的学生的学号;	 SELECT sno from sc;	-- 查询考试成绩有不及格的学生的学号;SELECT sno from sc WHERE sc.grade<60;	 -- 查询年龄在20-30岁直接的学生的姓名,性别,所在系;
SELECT  sname, ssex,  sdept from student WHERE student.sage>20 and student.sage<30;	
-- 查询 IS,CS,MA系的所有学生的姓名和性别;			 SELECT  sname, ssex from student WHERE  sdept in('IS','CS','MS');--查找所有姓‘李’的学生的姓名,学号和性别;SELECT sno, sname, ssex from student WHERE sname LIKE'李%';-- 查询没有先行课的课程的课程号cno和课程名cname;		SELECT cno,cname from course WHERE cpno is NULL;
-- 查询全体学生的情况,查询结果按所在系号升序排列,同一系中的学生按年龄降序排列;			 
SELECT * from  student JOIN sc ON student.sno=sc.sno  ORDER BY sc.cno ASC,student.sage DESC;
-- 查询每一门课程的间接先修课(只求两层即先修课的先修课),并且间接先修课
SELECT cpon from(SELECT cpon FROM course WHERE course.cpon!=NULL);-- 列出所有学生的基本情况和选课情况,若没有选课,则只列出基本情况信息;
SELECT student.sno, student.sname, student.ssex, student.sage, student.sdept, sc.cno from  student JOIN sc ON student.sno=sc.sno;-- 查询每个学生的学号,姓名,选修的课程名和成绩;
SELECT student.sno, student.sname, student.sdept, sc.cno,sc.grade from  student JOIN sc ON student.sno=sc.sno;
-- 查询与‘刘晨’在同一个系学习的学生的信息;
SELECT s.* from  student s JOIN student  f ON s.sdept=f.sdept where f.sname='刘晨'AND s.sname!='刘晨';-- 查询选修了课程名为‘信息系统’的学生的学号和姓名;
SELECT s.* from  student s JOIN sc c ON s.sno=c.sno  WHERE c.cno=( SELECT cno FROM course WHERE cname='信息系统');-- 查询选修了课程‘1001’和课程‘1002’的学生的学号;
SELECT sno from sc WHERE sc.cno IN('1001','1002');
-- 查询比‘刘晨’年龄小的所有学生的信息;
SELECT s2.* from  student s1 JOIN student s2 ON 
s1.sname='刘晨' WHERE s2.sage<s1.sage;

MySQL

相关文章:

  • vue2+element实现Table表格嵌套输入框、选择器、日期选择器、表单弹出窗组件的行内编辑功能
  • 深度学习在油气地震资料反卷积中的应用
  • 【已解决】Neo4j Desktop打不开,不断网解决
  • Maven依赖未生效问题
  • 详细教程:如何在vs code里面给普通的HTML搭建局域网服务器给其他设备访问
  • MySQL从入门到精通(一):MySQL介绍及数据库相关概念
  • Spring AI 函数调用(Function Call)系统设计方案
  • 深入理解Python异步编程:从协程到高性能IO密集型应用
  • ROS2:话题通信CPP语法速记
  • 基于SpringBoot + Vue 的作业管理系统
  • SSCLMD模型代码实现详解
  • ubantu安装CUDA
  • 园区网的发展
  • tinyrenderer笔记(法线映射)
  • 龙虎榜——20250506
  • AI教你学VUE——Deepseek版
  • Matlab/Simulink的一些功能用法笔记(4)
  • 区块链交易所开发:开启数字交易新时代
  • 【JEECG】BasicTable内嵌Table表格错位
  • MySQL 触发器(Trigger)讲解
  • 叙利亚政权领导人首访西方国家,与法国总统讨论叙局势
  • 央行:将支持资本市场两项货币政策工具的额度合并使用
  • 李云泽:再批复600亿元,进一步扩大保险资金长期投资试点范围
  • 人民日报评论:莫让“胖东来们”陷入“棒杀”“捧杀”泥潭
  • 美国内政部长:今年夏天美国可能发生西班牙式大停电,全怪拜登
  • 黔西游船倾覆事故84名落水人员已全部找到,10人不幸遇难