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

文章目录

  • 建立数据库
    • 创建数据库
    • 选择元组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 数据库名;

在这里插入图片描述

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

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

相关文章

Ubuntu18.04安装Loam保姆级教程

系统环境&#xff1a;Ubuntu18.04.6 LTS 1.Loam的安装前要求&#xff1a; 1.1 ROS安装&#xff1a;参考我的另一篇博客 Ubuntu18.04安装ROS-melodic保姆级教程_灬杨三岁灬的博客-CSDN博客还是那句话&#xff0c;有时候加了这行也不好使&#xff0c;我是疯狂试了20次&#xf…

stylelint报错at-rule-no-unknown

stylelint报错at-rule-no-unknown stylelint还将各种 sass -rules 标记mixin为include显示未知错误 at-rule-no-unknown ✖ stylelint --fix:Deprecation warnings: 78:1 ✖ Unexpected unknown at-rule "mixin" at-rule-no-unknown 112:3 ✖ Unexpected un…

2023 年 数维杯(A题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2021年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看数维杯A题&#xff01; 问题重述 1、俯仰力矩和俯…

【Rust】快速教程——冻结表达式

前言 以前谁是魔我杀谁&#xff0c;现在我杀谁谁就是魔。——《拔魔》 \;\\\;\\\; 目录 前言Rust基本知识结构体元组结构体局部作用域冻结字面量Vec元素的类型由第一个push进的类型确定type别名from和intoTryFrom和TryInto 表达式 Rust基本知识 结构体 #[derive(Debug)] str…

华为eNSP综合实验考试

VLAN信息表 设备名称 端口 链路类型 VLAN 参数 HZ-HZCampus-Agg01-S5731 GE0/0/1 Trunk PVID:1 Allow-pass&#xff1a;10 20 Eth-trunk1&#xff08;GE0/0/2,0/0/3,0/0/23&#xff09; Trunk PVID:1 Allow-pass&#xff1a;10 20 GE0/0/24 Access PVID&#xf…

vb.net 实时监控双门双向门禁控制板源代码

本示例使用设备介绍&#xff1a;实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) Imports System.Net.Sockets Imports System.Net Imports System.Text Imports System.ThreadingImports System.Net.NetworkInformation Imports System.Man…

Python函数进阶

函数进阶 一.函数多返回值二.函数多种传参方式三.匿名函数 一.函数多返回值 思考&#xff1a;如果一个函数有两个return&#xff0c;程序如下 只执行了一个return&#xff0c;原因是return可以退出当前函数&#xff0c;导致return下方代码不会执行 多个返回值 按照返回值的顺…

BananaPi BPI-M6(Raspberry Pi 5) Android 平板电脑镜像测试温度

我已经在本文中介绍了 全新的Banana Pi BPI-M6&#xff0c;并讨论了其与Raspberry Pi 5的硬件特性比较。 然后我将 Android 平板电脑固件上传到 eMMC&#xff0c;从而使 Banana Pi 实际可用。一开始有点坎坷&#xff0c;但文章中有更多内容。 在另一台电脑上&#xff0c;一切都…

Vatee万腾未来科技之航:Vatee创新引领的新纪元

在当今数字化时代&#xff0c;Vatee万腾科技正在开创一段引领未来的全新征程。以其卓越的创新能力和领导地位&#xff0c;Vatee万腾成为数字化领域的引领者。其未来科技之航展现了一种独特的数字化愿景&#xff0c;引领着科技创新进入新的纪元。 Vatee万腾在数字科技领域展现出…

如何使用功率信号源保证高精度测量

使用功率信号源是实现高精度测量的关键因素之一。在许多应用中&#xff0c;精确的功率信号源可以提供稳定、可靠的信号&#xff0c;帮助实现准确的测量结果。以下是使用功率信号源保证高精度测量的几个关键方面&#xff1a; 信号稳定性&#xff1a;在进行精确测量时&#xff0c…

热点检测/降级框架Akali的部分原理解析

发现个“轻量级本地化热点检测/降级框架 这个框架名为Akali,项目地址&#xff1a;https://gitee.com/bryan31/Akali主要有两个作用 1&#xff1a;热点检测及处理 2&#xff1a;降级检测及处理 从官网文档来看使用是比较简单的&#xff0c;一个注解就能搞定 怀着好奇的心情c…

光模块厂家如何提高千兆光模块和万兆光模块的可靠性

随着互联网的发展&#xff0c;光纤通信作为高速、稳定的通信方式越来越受到人们的关注。而千兆光模块和万兆光模块作为通信中必不可少的组成部分&#xff0c;其可靠性一直是厂家和用户所关注的重要问题。光模块的不可靠性会导致通信系统的故障和影响用户的体验&#xff0c;因此…

networkx使用draw画图报错:TypeError: ‘_AxesStack‘ object is not callable

一、问题描述 在使用networkx的draw绘图时nx.draw(g,posnx.spring_layout(g))&#xff0c;报错&#xff1a;TypeError: _AxesStack object is not callable 二、原因 可能是当前python环境下的networkx和matplotlib的版本不匹配。我报错时的networkx2.8&#xff0c;matplotl…

Element UI 偶发性图标乱码问题

1. 问题如图所示 2. 原因&#xff1a;sass版本低 sass: 1.26.8 sass-loader: 8.0.2 3. 解决方法 (1) 提高sass版本 (2) 在vue.config.js中添加配置 css: {loaderOptions: {sass: {sassOptions: {outputStyle: expanded}}}},4. 遇到的问题 升级后打包&#xff0c;报错 Syntax…

Freeswitch中mod_commonds

mod_commands Table of Contents (click to expand) 0. About1. Usage 1.1 CLI1.2 API/Event Interfaces1.3 Scripting Interfaces1.4 From the Dialplan2. Format of returned data3. Core Commands 3.1 acl  3.1.1 Syntax3.1.2 Examples3.2 alias 3.2.1 Syntax3.2.2…

VBA技术资料MF83:将Word文档批量另存为PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

初始MySQL(六)(自增长,索引,事务,隔离级别)

目录 自增长 索引 索引的原理: mysql索引的类型 添加/删除索引/查看索引 添加索引 删除索引 查看索引(没有生成或者问问什么时候存在) 小结 MySQL事务 关于事务的一些概念 mysql数据库控制台事务的几个重要操作 MySQL事务细节讨论 MySQL事务隔离级别 介绍 数据库…

ElasticSearch 安装(单机版本)

文章目录 ElasticSearch 安装&#xff08;单机版本&#xff09;环境配置下载安装包调整系统参数安装启动并验证 ElasticSearch 安装&#xff08;单机版本&#xff09; 此文档演示 ElasticSearch 的单机版本在 CentOS 7 环境下的安装方式以及相关的配置。 环境配置 Linux 主机一…

Android 14 Beta 1

Android 14的第一个 Beta 版&#xff0c;围绕隐私、安全、性能、开发人员生产力和用户定制等核心主题构建&#xff0c;同时继续改进平板电脑、可折叠设备等大屏幕设备的体验。我们一直在完善 Android 14 的功能和稳定性方面取得稳步进展&#xff0c;现在是时候向开发者和早期采…

C++基础(3)——类与对象

1.构造函数&#xff1a; 1.1 构造函数的引入&#xff1a; 在关于数据结构这一部分的文章中&#xff0c;创建了一个新的数据结构后&#xff0c;通常需要编写一个初始化函数来对这个数据结构进行一次初始化。在C的类中&#xff0c;如果存在函数&#xff0c;同样也需要对函数进行…