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 Students

GETDATE()//获取系统当前日期
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_cno
			FROM pansx_reports
			WHERE 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_ssex
                FROM pansx_students
				WHERE 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_sno
			FROM pansx_reports
)

&19)	查询没有学生选的课程的编号和名称。
SELECT psx_cno,psx_cname
FROM pansx_courses
WHERE psx_cno NOT IN(
		SELECT psx_cno
		FROM 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_ccredit
			FROM pansx_courses
			WHERE 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_cno
	FROM pansx_courses
	WHERE NOT EXISTS(
		SELECT psx_sno
		FROM pansx_reports
		WHERE 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来实现集合交和减运算。
代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的“滴答拍摄影项目”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“滴答拍摄影项目”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 滴答拍摄影项目结构图 管理员登录首页界面图 用…

[lesson24]经典问题解析二

经典问题解析二 关于析构的疑问 当程序中存在多个对象的时候&#xff0c;如何确定这些对象的析构顺序&#xff1f;单个对象创建时构造函数的调用顺序 1.调用父类的构造过程2.调用成员变量的构造函数(调用顺序于声明顺序相同)调用类自身的构造函数 析构函数与对应的构造函数的…

车联网大数据与人工智能一体化:开启智慧出行新时代

随着物联网技术的快速发展&#xff0c;车联网已经成为了汽车行业的重要趋势之一。而在车联网的发展过程中&#xff0c;大数据和人工智能的应用也日益成为关键因素。本文将探讨如何将大数据与人工智能一体化应用于车联网&#xff0c;以实现智慧出行的目标。 尤其是近来国内的华为…

【算法刷题 | 回溯思想 03】4.13( 组合总和、组合总和|| )

文章目录 5.组合总和5.1题目5.2解法&#xff1a;回溯5.2.1回溯思路&#xff08;1&#xff09;函数返回值以及参数&#xff08;2&#xff09;终止条件&#xff08;3&#xff09;遍历过程 5.2.2代码实现 6.组合总和 ||6.1题目6.2解法&#xff1a;回溯6.2.1回溯思路&#xff08;1&…

Linux软件包管理器yum—5

一、Linux下软件安装的方式 ①源代码安装&#xff1a; ②rmp包安装&#xff1a; 本质是拷贝可执行程序到系统目录下。 ③yum一键下载&#xff0c;安装&#xff0c;卸载。相当于手机的应用商店。 二、yum 2.1查看yum已配置的源&#xff1a; ls /etc/yum.repos.d/ 2.2查看yum…

Nexus 启动异常

在迁移 Nexus 到新的服务器上&#xff0c;我们有下面的异常。 [rootdevops log]# /opt/nexus/bin/nexus start No suitable Java Virtual Machine could be found on your system. The version of the JVM must be 1.8. Please define INSTALL4J_JAVA_HOME to point to a suita…

springboot数字化智慧城市管理系统源码

目录 ​系统开发环境 系统功能模块 系统特点 1、智慧城管移动端 2、案件受理 3、AI视频智识别分析 系统应用价值 1、提升案件办理效率 2、提升监管效能 3、提升行政执法水平 4、推进行政执法创新 智慧城管综合执法办案系统功能 现场移动执法 一般程序案件的网上办…

5.3 mybatis之autoMappingUnknownColumnBehavior作用

文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是< settings >配置下的属性&#xff0c;该属性是指定发现自动映射目标未知列&#xff08;或未知属性类型&#xff09;的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应…

MQ概览及Kafka详解

文章目录 概览MQ优点MQ缺点常见MQ对比JMS消息模型点对点模式发布订阅模式 kafka基础架构发布订阅工作流程生产者生产者文件存储生产者分区策略生产者数据可靠性保证生产者数据一致性保证生产者ack机制ExactlyOnce生产者发送消息流程 消费者消费者分区分配策略消费者消费数据问题…

MATLAB 自定义实现点云法向量和曲率计算(详细解读)(64)

MATLAB 自定义实现点云法向量和曲率计算(详细解读)(64) 一、算法介绍二、算法步骤三、算法实现1.代码 (完整,注释清晰,可直接用)2.结果一、算法介绍 首先说明: ------这里代码手动实现,不调用matlab提供的法向量计算接口,更有助于大家了解法向量和曲率的计算方法,…

Docker 学习笔记(八):Dockerfile实战篇,制作 Tomcat 镜像,发布镜像到 DockerHub 和阿里云

一、前言 记录时间 [2024-4-13] 系列文章简摘&#xff1a; Docker 学习笔记&#xff08;六&#xff09;&#xff1a;挑战容器数据卷技术一文通&#xff0c;实战多个 MySQL 数据同步&#xff0c;能懂会用&#xff0c;初学必备 Docker 学习笔记&#xff08;七&#xff09;&#x…

数据结构——基于单链表实现通讯管理系统

文章目录 一、前言SList.hSList.c 二、通讯录的实现通讯录项目Contact.h载入数据初始化通讯录添加通讯录数据通过姓名查找联系人删除通讯录数据展示通讯录数据查找通讯录数据修改通讯录数据保存通讯录销毁通讯录数据 三、所有源代码Contact.hContact.cSList.hSList.ctest.c 一、…

Sonar+postsql的安装配置,centos7.9系统

1.安装postsql15 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql15-server sudo service postgresql-15 initdb sudo chkconfig postgresql-15 on sudo servic…

[StartingPoint][Tier2]Included

LXD https://www.hackingarticles.in/lxd-privilege-escalation/ Task 1 What service is running on the target machine over UDP? &#xff08;目标机器上通过UDP运行的服务是什么&#xff1f;&#xff09; $ nmap -sU 10.129.232.86 -p 69 tftp Task 2 What class o…

每日一博 - 重新定义JAR中的类或方法

文章目录 概述方式一 &#xff1a; 项目覆写相同包结构的类方式二&#xff1a; 魔改Jar包中的类方案对比方案一&#xff1a;在项目中新增第三方包路径方案二&#xff1a;替换JAR包中的类文件 概述 在一些情况下&#xff0c;我们可能需要定制第三方库的行为&#xff0c;但却无法…

部署HDFS集群(完全分布式模式、hadoop用户控制集群、hadoop-3.3.4+安装包)

目录 前置 一、上传&解压 &#xff08;一 &#xff09;上传 &#xff08;二&#xff09;解压 二、修改配置文件 &#xff08;一&#xff09;配置workers文件 &#xff08;二&#xff09;配置hadoop-env.sh文件 &#xff08;三&#xff09;配置core-site.xml文件 &…

人工智能|机器学习——基于机器学习的信用卡办卡意愿模型预测项目

一、背景介绍 在金融领域&#xff0c;了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术&#xff0c;我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库&#xff0c;构建了两个常用的分类模型&#xff…

自定义创建真实项目vue2项目

1. 创建 vue create 项目名 2. 选择自定义 3. 勾选以下必备选项 4.选择使用vue2 5. 选择哈希模式&#xff08;n&#xff09;; css选择Less 6. ESLint校验 选择 7. 保存&#xff08;按照默认&#xff09; 8. 在哪里添加ESLint文件 9. 要不要把这个改成将来的预设&am…

底层开发必知的三个内存结构概念

大家好&#xff0c;今天给大家介绍底层开发必知的三个内存结构概念&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在底层开发中&#xff0c;以下是三个关键的内存结构概念&…

linux进阶篇:性能监控工具——vmstat命令详细讲解

Linux性能监控工具&#xff1a;vmstat命令详细讲解 vmstat是Virtual Meomory Statistics&#xff08;虚拟内存统计&#xff09;的缩写&#xff0c;可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计&#xff0c;不足之处是无法对某个进程进行深入分析…