【数据库原理及应用教程】第三章 SQL

news2024/11/25 3:35:38

文章目录

  • 建立数据库
    • 创建数据库
    • 选择元组select
      • 多表查询
    • 追加元组 insert
      • 嵌套子查询
    • 元组删除命令 delete
    • Update命令
  • 修正与撤销数据库
    • SQL-DDL撤销与修改
      • 撤销基本表
      • 指定数据库
      • 关闭数据库

建立数据库

学生选课数据库SCT

学生表:Student(SNo char(8), Sname char(10), Ssex char(2), Sage integer, DNo, char(2), Sclass char(6))

院系表:Dept(DNo char(2), Dname char(10), Dean char(10))

课程表:Course(CNo char(3), Cname char(12), Chourse integer, Credit float(1), TNo char(3))

教师表:Teacher(TNo char(3), Tname char(10), DNo char(2), Slaary float(2))

选课表:SC(SNo char(8), CNo char(3), Score float(1))

建立数据库包括:定义数据库和表(使用DDL),向表中追加元组(DML),两件事。

DDL:创建database,创建table,定义.约束.View.Index…;删除,drop;更改,Alter。
DML:insert, delete, select, update
DCL:授权/取消授权,Grant, Revoke

DDL通常由DBA使用,也可以DBA授权之后的程序

创建数据库

表达式:

Create database 数据库名

示例:创建SCT

Create database SCT

定义数据库的同时,也可以定义很多物理特性,这里指介绍最简单的定义。然后可以创建表。
表达式:

Create table 表名(列名 数据类型[primary key|unique][Not null]
					[列名 数据类型],...

定义表的时候,最少要有一列

  • Primary Key每个表只能创建一个主键约束
  • Unique唯一性约束(候选键),可以有多个
  • Not null非空约束。该列不允许出现空值
  • 其它
    示例:定义学生表Student
Create Student(SNo char(10) not null, Sname char(8), Ssex char(2), Sage integer, DNo char(2), Sclass char(6));

选择元组select

表达式

Select 列名     				(子句)
	From 表明				(子句)
	Where 检索条件			(子句)

此操作就相当于对一个关系,进行条件查找后再进行投影。
示例:检索学生表中所有学生的信息

Select * 
	From Student;

示例:检索学生表中所有学生的姓名及年龄

Select Sname, Sage
	From Student

示例:检索学生表中所有年龄大于等于19岁的学生的年龄及姓名

Select Sage, Sname
	From Student
	Where Sage >= 19;

关键:检索条件书写
not, and, or运算优先级

示例:检索教师表中所有工资少于1500元或者工资大于2000元 并且是03系的教师姓名

Select Tname
	From Teacher
	Where (Salary < 1500 or Salary > 2000) and DNo = '03'; 
	#注意 not, and, or 的运算优先级

示例:求或者学过001号课程,或者学过002号课程学生的学号

Select
	From SC
	Where CNo='001' or CNo = '002';

示例:求既学过001课程,又学过002课程学生的学号

Select SNo
	From SC as SC1, SC as SC2
	Where SC1.SNo=SC2.SNo and SC1.CNo = '001' and SC2.CNo = '002';
#下面的查询结果是空,也就是select语句书写有问题
Select SNo # 检索结果为空
	From SC
	Where CNo='001' and CN0='002'; # 不可能既等于001,又等于002

结果唯一性问题

  • 关系模型不允许出现重复的元组,但是现实的DMBS中,允许出现重复元组
  • 在Table中,要求无重复元组是通过Primary Key或Unique保证
  • 在检索结果中,要求无重复元组,通过DISTINCT保留字实现
    示例:在选课表中,检索成绩大于80分的所有学号
Select DISTINCT SNo
	From SC
	Where Score > 80;

结果排序问题
在select语句中增加order by子句实现排序功能,asc表示升序,desc表示降序
示例:按学号由小到大的顺序显示出所有学生的学号及姓名

Select SNo, SName
	From Student
	Order By SNo asc, Sname asc

示例:检索002号课程大于80分的所有同学学号并按成绩由高到低排序

Select SNo
	From SC
	Where Score > 80 and DNo = ='002'
	Order By Score desc;

模糊查询问题
%:匹配0个或多个字符
_:匹配任意单一字符
****:转义字符。比如只想检索百分号,而不是百分号当作通配符使用。

多表查询

多表查询通过连接运算完成,连接运算通过笛卡尔积完成。将连接条件放到Where子句中即可完成。
示例:按“001”号课程成绩由高到低顺序显示所有写上姓名(两表)

Select Student.SName
	From SC, Student
	Where SC.SNo=Student.SNo and SC.CNo='001'
	Order By SC.CNo desc;

示例:按‘数据库’课程成绩由高到低顺序显示所有同学姓名(三表)

Select Student.SName
	From Course, SC, Student
	Where Course.CNo=SC.CNo and SC.SNo=Student.SNo and Course.CName='数据库'
	Order By SC.Score;

对同一个表进行连接操作:对同一个表,(From子句中)使用不同的别名进行处理
示例:求有薪水差额的任意两位教师

Select T1.TName, T2.TName
	From Teacher T1, Teacher T2
	Where T1.Salary > T2.Salary;

示例:求‘001’号课程有成绩差的任意两位同学

Select S1.SName, S2.SName
	From SC as SC1, SC as SC2, Student as S1, Student as S2
	Where S1.SNo=SC1.SNo and S2.SNo=SC2.SNo and SC1.Score > SC2.Score

示例:求既学过’001’号课又学过‘002’号课的所有学生的学号

Select S1.SNo
	From SC as S1, SC as S2
	Where S1.SNo=S2.SNo and S1.CNO='001' and S2.CNo='002';

示例:列出没学过李明老师教授课程的所有同学姓名?

Select Student.SName
	From Student, Teacher, Course, SC
	Where Course.CNo = Teacher.CNo and Course.CNo=SC.CNo and Course.SNo = Student.SNo and (not Teacher.TName='李明')
	

追加元组 insert

表达式:

insert into 表明【列名...values (值...

【注意】需要值与列一一对应
示例:向Student表中追加元组

insert into Student
	values('98030101', '张三', '男', '20', '03', '980301');

嵌套子查询

将values换成select…from…where子句
示例:新建立Table:St(SNo, SName),将以“伟”结尾的同学新增到该表中

Insert into St(SNo, SName)
	Select SNo, SName
		From Student
		Where SName like '%伟';

【注意】新增元组时,DMBS会检查用户定义的完整性约束条件,如不符合完整性约束条件,则不会执行新增动作。

元组删除命令 delete

表达式:

Delete From 表名 [Where 条件表达式];

如果Where条件省略,则删除所有的元组
Select…From…Where句子很重要
1、当不写Where时,就是删除所有元组
2、Where满足条件的元组
示例:删除SC表中所有元组

Delete From SC;

示例:删除98030101号同学所选的所有课程

Delete From SC Where SNo = '98030101';

示例:【删除自动控制系的所有同学】:嵌套语句,属于子查询部分(属于后面内容)。

Delete From Student Where in
	(Select DNo From Dep Where Dname='自动控制');

【更复杂的条件删除语句】
示例:删除有四门不及格课程的所有同学

Delete From Student Where SNo in
	(Select SNo From SC Where Score<60
	Group by SNo Having Count(*)>=4);
  • 此SELECT语句书法语法后面解释
  • 当删除元组时,DBMS会检查用户定义的完整性约束条件,如不符合完整性约束条件,则不会执行删除动作

**Select…From…Where…**语句很重要

Update命令

元组更新Update命令:用指定要求的值更新指定表中满足指定条件的元组

Update 表名
	Set 列名 = 表达式 | (子查询)
		[[,列名=表达式|(子查询)]]
		[Where 条件表达式];

如果Where 条件省略,则更新所有的元组

示例:将所有教师工资上调5%

Update Teacher
	Set Sal = Sal + Sal * 0.05;

示例:将所有计算机系教师工资上调10%

Update Teacher
	Set Sal = Sal + Sal*0.1
	Where DNo in
		(Select DNo From Department WHere Dname='计算机');

修正与撤销数据库

SQL-DDL撤销与修改

**修正数据库:**修正数据库的定义,主要是修正表的定义
修正基本表的定义

Alter table tablename
ADD {columnname datatype,...}
drop 约束
modify {columnname datatype,...};

示例:在学生表Student(SNp, Sname, Ssex, Sage, DNo, Scalss)基础上,增加两列:Saddr, PID

Alter table Student ADD Saddr char(40), PID char(18);

示例:将上例表中Sname列的数据类型(原char(8))增加两个字符

Alter table Student Modify Sname char(10);

示例:删除学生姓名必须取名唯一值的约束

Alter table Student Drop Unique(Sname);

撤销基本表

drop table 表名;

【注意】

1、Delete...From...是删除表中的元组,并不删除表;Drop table 是撤销基本表,包括表的格式、表中所有元组、由该表导出的视图等相关所有内容。 2、只有Delete From,没有Delete table 3、是Drop table
drop database 数据库名;

指定数据库

use 数据库名;

关闭数据库

close 数据库名;

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务实战系列之Sentinel

前言 微服务架构&#xff08;Microservice Architecture&#xff09;是一种架构概念&#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 近年来&#xff0c;微服务已赫然崛起于IT界&#xff0c;越来越多的程序员不得不向之靠拢。也正因为各行各业都愿为…

网站安全攻防战:守护数据的钢铁堡垒

在数字化时代&#xff0c;网站的安全性至关重要&#xff0c;因为它不仅关乎用户的隐私信息&#xff0c;还涉及到业务的正常运行。一旦网站受到攻击&#xff0c;可能导致数据泄露、服务中断等问题&#xff0c;因此网站安全应成为企业和个人关注的焦点。本文将探讨网站安全的重要…

如何用Postman做接口自动化测试?一文带你学会

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用…

在市场发展中寻变革,马上消费金融树行业发展“风向标”

11月11日&#xff0c;2023金融街论坛年会第三届全球金融科技大会“金融科技创新与合规安全”平行论坛在北京召开。会上&#xff0c;马上消费金融副总经理孙磊就数据对金融的赋能作用、数据安全治理等方面展开了深度讨论。 公开信息显示&#xff0c;马上消费金融是一家经中国银保…

英飞凌Tc275使用记录:Can邮箱号确认与Busoff寄存器设置方法

目录 1、消息后处理 2、消息暂存 3、Tc275 Busoff的寄存器手动处理 1、消息后处理 消息对象成功接收或发送帧后&#xff0c;可以通知CPU对消息对象执行后处理。MultiCAN模块的后处理由两个部分组成: 消息中断触发后处理。消息挂起寄存器将挂起的消息中断收集到一个公共结构中…

【漏洞复现】maccms苹果cms 命令执行漏洞

漏洞描述 感谢提供更多信息。“苹果CMS” 似乎是指 “Maccms”&#xff0c;这是一款开源的内容管理系统&#xff0c;主要用于搭建视频网站。Maccms 提供了一套完整的解决方案&#xff0c;包括用户管理、视频上传、分类管理、数据统计等功能&#xff0c;使用户能够方便地创建和…

【整顿C盘】pycharm、chrome等软件,缓存移动

C盘爆了&#xff0c;特来找一下巨大的软件缓存&#xff0c;特此记录&#xff0c;跟随的各大教程&#xff0c;和自己的体会 一、爆炸家族JetBrains 这个适用于pycharm、idea、webstorm等等&#xff0c;只要是JetBrains家的&#xff0c;2020版本以上&#xff0c;都是一样的方法 p…

【MySQL】索引和事务(B树、B+树图解原理)

一、索引 1.1 什么是索引&#xff1f; 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 1.2 索引的作用 &#x1f693;&#xff08;1&#…

python科研绘图:面积图

目录 1、面积图 2、堆积面积图 1、面积图 面积图是一种数据可视化图表&#xff0c;用于展示数据随时间或其他有序类别的变化趋势。它与折线图相似&#xff0c;但在展示数据变化的同时&#xff0c;面积图还强调了各个数据点之间的累积关系。这种图表通常通过在折线下方填充颜…

【读点论文】FMViT: A multiple-frequency mixing Vision Transformer-期待源码

FMViT: A multiple-frequency mixing Vision Transformer Abstract transformer模型近年来在计算机视觉任务中得到了广泛的应用。然而&#xff0c;由于自关注的时间和内存复杂度是二次的&#xff0c;并且与输入token的数量成正比&#xff0c;大多数现有的(Vision transformer,…

IDEA配置tomcat运行环境

前言 当我们使用springboot进行开发时&#xff0c;因为已经内嵌了tomcat&#xff0c;我们不用手动配置tomcat即可运行。 我们的项目在写完后&#xff0c;会在服务器上的tomcat内运行&#xff0c;所以我们测试时&#xff0c;也需要在本地配置tomcat环境。本文便介绍了如何使用…

YOLOv8环境搭建

YOLOv8环境搭建 torch环境安装requestment.txt文件中的包安装ultralytics调用 torch环境 使用的是python3.9版本 pip install torch-2.1.0cu118-cp39-cp39-linux_x86_64.whl torchvision0.16.0 torchaudio2.1.0 --index-url https://download.pytorch.org/whl/cu118安装reques…

mysql索引学习案例

简单的学习一下mysql普通索引 这是一个小的案例 一、创建表SQL CREATE TABLE group_order (id int(11) NOT NULL AUTO_INCREMENT,group_seq varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT 拼单号,group_status int(8) NOT NULL COMMENT 100 待提货, 200 已提货, 300 已…

Linux_虚拟机常用目录汇总

根目录&#xff08;cd /&#xff09;&#xff1a;/ 表示根目录&#xff0c;cd和 / 之间有个空格&#xff01; 用户目录&#xff08;cd ~&#xff09;&#xff1a;~ 表示用户目录&#xff0c;也称为家目录。cd 和 ~ 之间有个空格&#xff01; 当前路径&#xff1a;执行 pwd 指令…

component 动态组件的用法

一&#xff1a;前言 <component></component> 标签是Vue框架自定义的标签&#xff0c;它的用途就是可以动态绑定我们的组件&#xff0c;根据数据的不同需求来更换使用不同的组件。 在最上方的图片中&#xff0c;就是使用的 Element Plus 的 Tags 组件&#xff0c;根…

接口自动化测试如何实现?5个步骤轻松拿捏!

最近接到一个接口自动化测试的case&#xff0c;并展开了一些调研工作&#xff0c;最后发现&#xff0c;使用pytest测试框架并以数据驱动的方式执行测试用例&#xff0c;可以很好的实现自动化测试。这种方式最大的优点在于后续进行用例维护的时候对已有的测试脚本影响很小。当然…

物联网AI MicroPython学习之语法 I2C总线

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; I2C 介绍 模块功能: I2C Master设备驱动 接口说明 I2C - 构建硬件I2C对象 函数原型&#xff1a;I2C(id, scl, sda, freq)参数说明&#xff1a; 参数类型必选参数&#xff1f;说明idintYI2C外设&#xff…

linux三次握手、四次挥手

TCP协议是一个安全的、面向连接的、流式传输协议&#xff0c;所谓的面向连接就是三次握手&#xff0c;对于程序猿来说只需要在客户端调用connect()函数&#xff0c;三次握手就自动进行了。先通过下图看一下TCP协议的格式&#xff0c;然后再介绍三次握手的具体流程。 1.tcp协议…

python正则匹配示例

需要再如下图的txt中把 1100开头的订单号 提取出来&#xff0c;这个时候需要用到正则表达式 import rewith open(source.txt, r) as file:lines file.readlines()target \1100 target_lines [] for line in lines:if line.find(target) ! -1: print("match string…

java的Exception.getMessage为null

之前捕获异常后调用异常的getMessage写日志&#xff0c;日志写的竟然是null&#xff0c;不可思议。发现要调用异常的getCause().getMessage()才能得到异常信息 刻意把密码改错&#xff0c;让异常直达界面&#xff0c;免得有问题时候只能猜