SQL语言自用(持续更新)+实验记录

课本:《数据库原理及其应用教程》(第四版) (主编)黄德才&(副主编)陆亿红
实验:学校实验课材料
其他:

  1. [ ]表示可以被删除,也表示可以被替换,请自行判断。
  2. 如果有一些截图或照片,是暂时懒得整理格式,后面有空补。
  3. 如果遇到了没见过的表、视图、属性什么的,上下自己翻一下,我的顺序一部分是乱的。

目录

  • 1 基础知识
    • 1.1数据定义
    • 1.2数据查询
      • 1.2.1一般格式
      • 1.2.2单表查询
        • 1.2.2.1 SELECT
        • 1.2.2.2 DISTINCT
        • 1.2.2.2 WHERE
        • 1.2.2.3 ORDER BY
        • 1.2.2.4 GROUP BY
        • 1.2.2.5 HAVING
      • 1.2.3表达式
        • 1.2.3.1增加列标题
        • 1.2.3.2函数
        • 1.2.3.3字符串常量
        • 1.2.3.4算术表达式
      • 1.2.4连接查询
      • 1.2.5嵌套查询
      • 1.2.6集合运算
  • 实验例子
    • 数据定义
    • 数据查询
      • 单表查询
      • 连接查询
        • 笛卡儿连接和等值连接。
        • 自连接。
        • 外连接
        • 复合条件连接。
        • 多表连接。
      • 嵌套查询
        • 通过实验验证对子查询的两个限制条件。
        • 体会相关子查询和不相关子查询的不同。
        • 考察四类谓词的用法,包括:
      • 集合运算
        • 使用保留字UNION进行集合并运算。
        • 采用逻辑运算符AND或OR来实现集合交和减运算。

1 基础知识

1.1数据定义

1.2数据查询

1.2.1一般格式

SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]//规定属性列
FROM <表名或视图名>[,<表名或视图名>]//元组的来源
[WHERE <条件表达式>]//设定条件
[GROUP BY <列名1>[HAVING<条件表达式>]]//分组
[ORDER BY <列名2>[ASC|DESC]]//排序

1.2.2单表查询

1.2.2.1 SELECT
【查询所有列】
SELECT *
fROM [students]【查询指定的列】
SELECT [Sname,Sno,Dno]
FROM [Students]【查询指定的列的运算】
见1.2.3
1.2.2.2 DISTINCT
消去查询结果表中相同的元组
eg.查询选修了课程的学生学号(这样子学号就不会重复出现了)
SELECT DISTINCT Sno
FROM Reports
1.2.2.2 WHERE

在这里插入图片描述
BETWEEN AND / NOT BETWEEN AND

 eg.WHERE Sage NOT BETWEEN 18 AND 20//Sage年龄

IN / NOT IN

eg. WHERE Dno IN('D01','D02','D03')

LIKE / NOT LIKE 匹配

 [NOT] LIKE '<匹配串>'[ESCAPE '<换码字符>']%百分号:任意长度字符串_下划线:任意单个字符eg.姓刘的
WHERE Sname LIKE '刘%'
eg.姓刘的,且全名不多于3个汉字
WHERE Sname LIKE '刘__'//两个下划线

ESCAPE ‘<换码字符>’
如果查询的字符串本身带有%或者_

eg.查询课程名为'DB_设计'的课程
WHERE Cname LIKE 'DB\_设计' ESCAPE '\'//换码字符常用\

IS NULL / IS NOT NULL

eg,有一门课没有成绩
WHERE Grade IS NULL

COUNT

COUNT(*) 统计元组个数】
eg.查询学生总人数
SELECT COUNT(*)
FROM Students【COUNT(列名) 统计列值个数】
eg.查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM Reports
1.2.2.3 ORDER BY
eg.按系别编号升序,编号相同按年龄降序排序
ORDER BY Dno,Sage DESC//DESC表示降序,没有的话默认升序
对于空值
1、不是长度为0的字符串
2.升序的话,空值在最前面
1.2.2.4 GROUP BY

将查询结果表按某一列或多列值分组

eg.求各个课程号以及相应的选课人数
SELECT Cno,COUNT(Sno) CntSno
FROM Reports
GROUP BY Cno
//把选了相同Cno的划分为一组,然后计算每一组中Sno有几个
1.2.2.5 HAVING

分组后还要筛选的话,只能作用于组

eg.查询选修了三门及以上课程的学生学号
SELECT Sno
FROM Reports
GROUP BY Sno
HAVING COUNT(Cno) >= 3

1.2.3表达式

可以是表中的属性列、函数、字符串常量、算术表达式等

1.2.3.1增加列标题
直接在目标列表达式后面加上列名即可
SELECT Sno,YEAR(Birthday) BirthY,Sname
FROM Students
1.2.3.2函数
  • 日期
YEAR(Birthday)//获得日期属性里面的年数值的函数
MONTH(Birthday)
DAY(Birthday)
eg.
SELECT Sno,Sname,YEAR(Birthday)
FROM StudentsGETDATE()//获取系统当前日期
DATE(yyyy,GETDATE())//获得当前提起的年数值的函数
DATE(mm,GETDATE())
DATE(dd,GETDATE())
eg.查询所有年龄大于等于18岁的学生姓名和各自的年龄
SELECT Sname,DATE(yyyy,GETDATE())-YEAR(Birthday) Sage//用现在的年份减去这个人出生年份得到年龄
FROM Students
WHERE DATE(yyyy,GETDATE())-YEAR(Birthday)>=18
  • List item
1.2.3.3字符串常量
这一列所有的属性值都会是这个字符串常量
SELECT Sno,Sname,‘Birth:’ Title
FROM Students
1.2.3.4算术表达式

1.2.4连接查询

 笛卡儿连接和等值连接。
 自连接。
 外连接
 复合条件连接。
 多表连接。

1.2.5嵌套查询

 通过实验验证对子查询的两个限制条件。
 体会相关子查询和不相关子查询的不同。
 考察四类谓词的用法,包括:
第一类,IN、NOT IN;
第二类,带有比较运算符的子查询;
第三类,SOME、ANY或ALL谓词的子查询,查询最大值和最小值;
第四类,带有EXISTS谓词的子查询,实现“所有”等情况(如王宏的“所有”课程,“所有”女生选修的课程)

1.2.6集合运算

 使用保留字UNION进行集合并运算。
 采用逻辑运算符AND或OR来实现集合交和减运算。

实验例子

数据定义

学校实验要求命名加上自己的名字,给库、表、视图、属性命名
之后的例子中名字首字母会时有时没有,大家自行理解一下。

表名表名属性
学生表Pansx_StudentsSno学号,Sname, Semail,Scredit学分,Ssex性别
教师表Pansx_TeachersTno工号,Tname,Temail,Tsalary薪水
课程表Pansx_CoursesCno,Cname,Ccredit课程学分
成绩表Pansx_ReportsSno,Tno,Cno,Score

其中:
psx_Sno、psx_Tno、psx_Cno分别是表Pansx_Students、表Pansx_Teachers、表Pansx_Courses的主键,具有唯一性约束;
psx_Scredit具有约束“大于等于0”;
Pansx_Reports中的psx_Sno,psx_Tno,psx_Cno是外键,它们共同组成Pansx_Reports的主键。

数据查询

先插入一些数据,方便进行查询
【Students】
Students
【Teachers】
Teachers
【Courses】
Courses
【Reports】
Reports

单表查询

1)	查询性别为“男”的所有学生的名称并按学号升序排列。
SELECT psx_sname 
FROM pansx_students
WHERE psx_ssex='男'
ORDER BY psx_sno&2)	查询学生的选课成绩合格的课程成绩,并把成绩换算为积分。积分:[1+(考试成绩-60)*0.1]*Ccredit。考试成绩>=60 否则=0
select psx_cname,(1+(psx_score-60)*0.1)*psx_ccredit as psx_point 
FROM pansx_reports
JOIN pansx_courses ON pansx_courses.psx_cno=pansx_reports.psx_cno
WHERE psx_score>=603)	查询学分是34的课程的名称。
SELECT psx_cname
FROM pansx_courses
WHERE psx_ccredit= 3 or 44)	查询所有课程名称中含有“算法”的课程编号。
SELECT psx_cno
FROM pansx_courses
WHERE psx_cname LIKE '%算法%'5)	查询所有选课记录的课程号(不重复显示)。
SELECT DISTINCT psx_cno
FROM pansx_courses(6)	统计所有老师的平均工资。
SELECT AVG(psx_tsalary)
FROM pansx_teachers&7)	查询所有教师的编号及选修其课程的学生的平均成绩,按平均成绩降序排列。
SELECT psx_tno,psx_cno,ROUND(AVG(psx_score),2) AS psx_avg 
FROM pansx_reports
GROUP BY psx_cno,psx_tno
ORDER BY psx_avg DESC8)	统计各个课程的选课人数和平均成绩。
SELECT psx_cno,COUNT(psx_sno),AVG(psx_score)
FROM pansx_reports
GROUP BY psx_cno

连接查询

笛卡儿连接和等值连接。
【【等待分类!!!】】
(9)	查询至少选修了三门课程的学生编号和姓名。
SELECT pansx_students.psx_sno,psx_sname
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno=pansx_students.psx_sno
GROUP BY pansx_students.psx_sno
HAVING COUNT(psx_cno)>=310)	查询编号S26的学生所选的全部课程的课程名和成绩。
SELECT pansx_courses.psx_cname,psx_score
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno=pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno=pansx_reports.psx_cno
WHERE pansx_students.psx_sno='S26'&11)	查询所有选修了“数据库原理及应用”课程的学生编号和姓名。
SELECT pansx_students.psx_sno,psx_sname
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno=pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno=pansx_reports.psx_cno
WHERE psx_cname='数据库原理及应用'&12)	求出选修了同一个课程的学生对
SELECT DISTINCT a.psx_sno,b.psx_sno
FROM pansx_reports a,pansx_reports b 
where a.psx_cno=b.psx_cno AND a.psx_sno <b.psx_sno(13)	求出至少被两名学生选修的课程编号。
SELECT psx_cno
FROM pansx_reports 
GROUP BY psx_cno
HAVING COUNT(psx_sno)>=214)	查询选修了编号S26的学生所选的某个课程的学生编号。
SELECT DISTINCT psx_sno
FROM pansx_reports
WHERE psx_cno IN (SELECT psx_cnoFROM pansx_reportsWHERE psx_sno='S26'
)15)	查询学生的基本信息及选修课程编号和成绩。
SELECT pansx_students.*,pansx_reports.psx_cno,psx_score
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno=pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno=pansx_reports.psx_cno&16)	查询学号S52的学生的姓名和选修的课程名称及成绩。
SELECT psx_sname,psx_cname,psx_score
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno = pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno = pansx_reports.psx_cno
WHERE pansx_reports.psx_sno='S52'&17)	查询和学号S52的学生同性别的所有学生资料。
SELECT *
FROM pansx_students
WHERE psx_sno!='S52' AND psx_ssex=(SELECT psx_ssexFROM pansx_studentsWHERE psx_sno='S52'
)18)	查询所有选课的学生的详细信息。
SELECT DISTINCT pansx_students.*
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno = pansx_students.psx_sno
WHERE pansx_students.psx_sno IN (SELECT DISTINCT psx_snoFROM pansx_reports
)&19)	查询没有学生选的课程的编号和名称。
SELECT psx_cno,psx_cname
FROM pansx_courses
WHERE psx_cno NOT IN(SELECT psx_cnoFROM pansx_reports
)20)	查询选修了课程名为C++的学生学号和姓名。
SELECT DISTINCT pansx_students.psx_sno,psx_sname
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno = pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno = pansx_reports.psx_cno
WHERE psx_cname='C++'21)	找出选修课程UML或者课程C++的学生学号和姓名。
SELECT DISTINCT pansx_students.psx_sno,psx_sname
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno = pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno = pansx_reports.psx_cno
WHERE psx_cname='C++' OR psx_cname='UML'22)	找出和课程UML或课程C++的学分一样课程名称。
SELECT DISTINCT psx_cname
FROM pansx_reports 
JOIN pansx_courses ON pansx_courses.psx_cno = pansx_reports.psx_cno
WHERE psx_cname NOT IN ('C++','UML') AND psx_ccredit IN (SELECT psx_ccreditFROM pansx_coursesWHERE psx_cname = 'C++' OR psx_cname ='UML'
)23)	查询所有选修编号C01的课程的学生的姓名。
SELECT DISTINCT psx_sname
FROM pansx_reports 
JOIN pansx_students ON pansx_students.psx_sno = pansx_reports.psx_sno
WHERE psx_cno = 'C01' &24)	查询选修了所有课程的学生姓名。SELECT psx_sname
FROM pansx_students
WHERE NOT EXISTS(SELECT psx_cnoFROM pansx_coursesWHERE NOT EXISTS(SELECT psx_snoFROM pansx_reportsWHERE pansx_reports.psx_sno=pansx_students.psx_sno AND pansx_reports.psx_cno=pansx_courses.psx_cno)
)25)	利用集合并运算,查询选修课程C++或选择课程JAVA的学生的编号、姓名和积分。
SELECT pansx_students.psx_sno, psx_sname, psx_scredit
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno = pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno = pansx_reports.psx_cno
WHERE psx_cname = 'C++'
UNION
SELECT pansx_students.psx_sno, psx_sname, psx_scredit
FROM pansx_students
JOIN pansx_reports ON pansx_reports.psx_sno = pansx_students.psx_sno
JOIN pansx_courses ON pansx_courses.psx_cno = pansx_reports.psx_cno
WHERE psx_cname = 'JAVA';26)	实现集合交运算,查询既选修课程C++又选修课程JAVA的学生的编号、姓名和积分。
同(25)将UNION改成INTERSECT即可(27)	实现集合减运算,查询选修课程C++而没有选修课程JAVA的学生的编号。
同(25)将UNION改成 MINUS 即可
自连接。
代码
外连接
代码
复合条件连接。
代码
多表连接。
代码

嵌套查询

通过实验验证对子查询的两个限制条件。
代码
体会相关子查询和不相关子查询的不同。
代码
考察四类谓词的用法,包括:
代码

第一类,IN、NOT IN;
第二类,带有比较运算符的子查询;
第三类,SOME、ANY或ALL谓词的子查询,查询最大值和最小值;
第四类,带有EXISTS谓词的子查询,实现“所有”等情况(如王宏的“所有”课程,“所有”女生选修的课程)

集合运算

使用保留字UNION进行集合并运算。
代码
采用逻辑运算符AND或OR来实现集合交和减运算。
代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/308129.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThignsBoard通过服务端订阅共享属性

MQTT基础 客户端 MQTT连接 通过服务端订阅属性 案例 1、首先需要创建整个设备的信息&#xff0c;并复制访问令牌 ​​2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、在MQTT上订阅对应的Topic 5、在客户端添加共享属性信息 6、查看整个设备的遥测数据 M…

yolov8安全帽检测项目开发(python开发,带有训练模型,可以重新训练,并有Pyqt5界面可视化)

不需要程序&#xff0c;只需要数据集的&#xff0c;想自己搭建模型训练的&#xff0c;可以免费下载&#xff08;积分已经设置为0&#xff09;&#xff1a;https://download.csdn.net/download/qq_40840797/89100918 1.项目介绍&#xff1a;&#xff08;视频运行链接&#xff1…

scala---基础核心知识

一、什么是scala Scala 是一种多范式的编程语言&#xff0c;其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台&#xff08;Java虚拟机&#xff09;&#xff0c;并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…

【数据结构】习题之消失的数字和轮转数组

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组&#xff0c;&#xff0c;也会分享三种思路&#xff0c;大…

12 Php学习:魔术常量

PHP魔术常量 PHP 向它运行的任何脚本提供了大量的预定义常量。 不过很多常量都是由不同的扩展库定义的&#xff0c;只有在加载了这些扩展库时才会出现&#xff0c;或者动态加载后&#xff0c;或者在编译时已经包括进去了。 有八个魔术常量它们的值随着它们在代码中的位置改…

vscode配置c\c++及美化

文章目录 vscode配置c\c及美化1.安装vscode2.汉化3.安装c\c插件4.安装mingw5.配置mingw6. 运行c代码6.1 创建代码目录6.2 设置文件配置6.3 创建可执行任务&#xff1a;task.json6.4 编译执行6.5 再写其他代码6.6 运行多个c文件 7. 运行c文件8.调式代码8.1 创建launch.json8.2 修…

在 Elasticsearch 中扩展 ML 推理管道:如何避免问题并解决瓶颈

作者&#xff1a;来自 Elastic Iulia Feroli 是时候考虑语义搜索运营了吗&#xff1f; 无论你是一位经验丰富的搜索工程师&#xff0c;希望探索新的人工智能功能&#xff0c;还是一位机器学习专家&#xff0c;希望更多地利用搜索基础设施来增强语义相似性模型 —— 充分利用这…

【大语言模型】轻松本地部署Stable Diffusion

硬件要求&#xff1a; 配备至少8GB VRAM的GPU&#xff0c;如果你的电脑只有CPU&#xff0c;请看到最后。根据部署规模&#xff0c;需要足够的CPU和RAM。 软件要求&#xff1a; Python 3.7或更高版本。支持NVIDIA GPU的PyTorch。Hugging Face的Diffusers库。Hugging Face的Tr…

前端实现自动获取农历日期:探索JavaScript的跨文化编程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Spring Boot 学习(5)——开发流程:快速入门

花了几天的时间&#xff0c;整出个 “hello spring boot”&#xff0c;并且把它从 2 搞到了 3。 纸上得来终觉浅&#xff01;自己实践出真知&#xff01;现在再回头来囫囵一遍&#xff0c;加深下印象。回想下从前自觉某一编程语言大都如此&#xff0c;先找到简单示例照着画一遍…

Walmart.com DSV XML对接需求

此前的文章Walmart.com DSV EDI对接需求中&#xff0c;为大家介绍了如果选择传输EDI文件需要做的准备与需求。本文将为大家介绍Walmart.com 与DSV&#xff08;Drop Ship Vender&#xff09;之间传输XML文件的需求。与EDI相比&#xff0c;XML文件的处理难度相对低一些。无论企业…

第1章 计算机网络体系结构

王道学习 【考纲内容】 &#xff08;一&#xff09;计算机网络概述 计算机网络的概念、组成与功能&#xff1b;计算机网络的分类&#xff1b; 计算机网络的性能指标 &#xff08;二&#xff09;计算机网络体系结构与参考模型 计算机网络分层结…

Oracle获取对象的DDL创建语句

1.命令行方式&#xff08;如&#xff1a;sqlplus&#xff09; ## 用户 select dbms_metadata.get_ddl(USER,TEST) from dual;## 表 select dbms_metadata.get_ddl(TABLE,TEST,T1) from dual;## 表空间 select dbms_metadata.get_ddl(TABLESPACE,TBS_NAME) from dual;## 索引 s…

内存函数memcpy、mommove、memset、memcmp

目录 1、memcpy函数 memcpy函数的模拟实现 2、memmove函数 memmove函数的模拟实现 3、memset函数 4、memcmp函数 1、memcpy函数 描述&#xff1a; C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。 声明&…

C/C++基础----判断和循环

判断 if-elseif-else判断 语句&#xff1a; 条件使用之前的逻辑运算符或者关系运算符 if(条件1){条件1成立时内容 }else if(条件2){条件2成立时内容 }else{所有条件不成立时内容 }#include <iostream>using namespace std;int main() {int age 10;if (age > 18) {c…

java数据结构与算法刷题-----LeetCode693. 交替位二进制数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 位运算 位运算 解题思路&#xff1a;时间复杂度O( 1 1 1)&#…

Mogdb双网卡同步最佳实践

大家都知道Oracle数据库无论是单机还是RAC集群在进行生产部署实施时&#xff0c;我们都会对网卡做冗余考虑&#xff0c;比如使用双网卡&#xff0c;比如public、心跳网络。这样的目的主要是为了安全&#xff0c;避免淡点故障。当然也网卡Bond不仅是可以做主备还可以支持负载均衡…

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程 文章目录 前言一、实验工具1.串口USB线——烧录APP2生成的BIN文件2.STLINK——烧录BOOT代码和APP1代码3.烧录工具——将BIN文件烧录到单片机中4.FLYMCU——清除芯片FLASH 二、硬件绘制1.原理图2.PCB 三、软件配置1.BOOT…

树莓派驱动开发--搭建环境篇(保姆级)

前言&#xff1a;树莓派的环境搭建关系到之后的驱动开发&#xff0c;故一个好的环境能让你顺手完成驱动开发&#xff01;我使用的是64位树莓派4b&#xff01;有显示屏的前提&#xff01;&#xff01;&#xff01;&#xff08;因为wifi连接太刁钻了&#xff09; 一、ubantu相关 …

目标检测笔记

目标检测笔记 one-stage和two-stage目标检测算法Two-Stage 目标检测算法One-Stage 目标检测算法既然Faster R-CNN使得候选区域生成和目标检测可以在同一个网络中端到端训练&#xff0c;为什么它还是属于Two-stage算法&#xff1f; 目标检测模型&#xff0c;训练中的正负样本是什…