数据库-SQL语言

article/2025/8/27 19:20:04

一、表

1.1创建表

语法格式:

CREATE TABLE <表名> (

<列名><数据类型>[列级完整性约束条件]

[,<列名><数据类型>[列级完整性约束条件]]…

[,<表级完整性约束条件>]

);

注:[ ]表示可选,< >表示必填。

实体完整性约束:

(1)在列后面加 PRIMARY KEY

(2)在最后加PRIMARY KEY(属性名1,属性名2) //主码为属性组(两个或以上属性的组合)只能 用这种方法

参照完整性约束:

(1)在列后面加 References 表名(属性名)

(2)在最后面加 ,有几个外码,就写几行下面的语句

Foreign Key (属性名) References 表名(属性名) [ON DELETE[CASCADE|SET NULL]]

ON DELETE CASCADE 表示删除被参照关系的元组时,同时删除参照关系中的元组;

ON DELETE SET NULL表示删除被参照关系的元组时,将参照关系的相应属性值置为空值。

属性值上的约束

(1)NULL:表示为空;NOT NULL表示不能为空;

(2)UNIQUE:表示取值唯一;

(3)NOT NULL UNIQUE:表示取值唯一且不为空,与属性列后面的PRIMARY KEY可互换;

(4)CHECK:限制列中值的取值范围。如:CHECK (Sex='男' OR Sex='女'),CHECK (余额>=0),CHECK (年龄>=18 AND 年龄<=60), CHECK (离职日期 > 入职日期)

USE of ALTER to ADD CHECK constraint in an already created table

在已创建的表中使用ALTER来添加CHECK约束

1) For single column

ALTER TABLE company ADD CHECK (E_Id>0);

2) For multiple columns

ALTER TABLE company ADD CONSTRAINT chk_emp CHECK (E_Id>0AND E_name='Bharti');

How to DROP CHECK constraint from a table?

ALTER TABLE company DROP CONSTRAINT chk_emp;

建表示例

Create Table SP (Sno CHAR(5),Pno CHAR(6),Status CHAR(8),Qty NUMERIC(9), PRIMARY KEY(Sno,Pno), //如果主键为属性组合,只能用这种方法FOREIGN KEY(Sno) REFERENCES S(Sno), //每一个外键写一个FOREIGN KEY(Pno) REFERENCES P(Pno) //每一个外键写一个
); 

例题(2011,试题二)

某法院要开发一个诉讼案件信息处理系统,该信息系统的部分关系模式如下:

职工(职工编号,姓名,岗位)

律师(律师编号,姓名)

被告(被告编号,姓名,地址)

案件(案件编号,案件类型,案件描述,被告,律师,主审法官,立案日期,状态,结案日期,结案摘要)

审理(审理编号,案件编号,审理日期,摘要)

有关关系模式的属性及相关说明如下:

(1)职工关系模式的岗位有“法官”、“书记员”和“其他”。

(2)诉讼立案后,即在案件关系中插入一条相应记录。案件关系模式的状态有“待处理”、“审理中”、“结案”和“撤销”,一个案件开始立案时其案件状态为“待处理”。

(3)案件关系模式的案件类型有“偷窃”、“纵火”等。

(4)一个案件自立案到结案的整个过程由一位法官和一位律师负责,一个案件通常经过一次到多次审理。

假设案件编号唯一标识一个案件,且立案日期小于等于结案日期。请将如下创建案件关系的SQL语句的空缺部分补充完整。

    CREATE TABLE案件(案件编号 CHAR(6)   (a)  ,     //PRIMARY KEY或NOT NULL UNIQUE案件类型 VARCHAR(6),案件描述 VARCHAR(6),立案日期 DATE,被告 VARCHAR(6) REFERENCES 被告(被告编号),律师 VARCHAR(6) REFERENCES 律师(律师编号),主审法官 VARCHAR(6)   (b) ,    //REFERENCES 职工(职工编号)状态 VARCHAR(6)   (c)   DEFAULT '待处理', //CHECK VALUES IN (“待处理”,“审理中”,“结案”,“撤销”)结案日期 DATE,结案摘要 VARCHAR(200),(d)                              //CHECK(立案日期<=结案日期)};

1.2 修改表

语句格式:

ALTER TABLE <表名>

[ADD <新列名><数据类型>[列级完整性约束条件]]

[DROP <完整性约束名>]

[Modify <列名><数据类型>]; 如:

ALTER TABLE S ADD Zap CHAR(6); //在表S中新增一列ZAP,该列的数据为空
ALTER TABLE S MODIFY Status INT; //将表S的Status属性的数据类型更改为INT
ALTER TABLE S ADD Constraint C_cno CHECK(......) //在表S中新增CHECK约束,取名为C_cno
ALTER TABLE S DROP Constraint C_cno; //在表S中删除CHECK约束

1.3删除表

语句格式:

DROP TABLE <表名>

如: DROP TABLE S; //表删除后,不再是数据库模式的一部分

数据操作

SQL中几个关键字的执行顺序为

  1. FROM

  1. WHERE

  1. GROUP BY

  1. HAVING

  1. 聚合函数

  1. SELECT

  1. ORDER BY

HAVING 在 select 前面,having后面不可以用在select里面的重命名

INSERT INTO 表名称 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...)

DELETE FROM 表名称 [WHERE 删除条件(s)];

UPDATE 表名称 SET 更新字段1=更新值1,更新字段2=更新值2,...[WHERE 更新条件(s)];

二、视图

2.1 概念

视图是由数据库中的一个表或多个表导出的虚拟表,其结构和数据是建立在对表的查询基础上的,其作用是方便用户对数据的操作。视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图也包括几个被定义的数据列和多个数据行,但从本质上讲,这些数据列和数据行来源于其所引用的表。因此视图不是真实存在的基本表,而是一个虚拟表。数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。同样对视图的更新,会影响到原来表的数据。使用视图的优点和作用如下:

2.2 视图的创建

语句格式:

CREATE VIEW 视图名(列表名)

AS SELECT 查询子句

[WITH CHECK OPTION];

注意:视图的创建中,必须遵循如下规定: (1)子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。 (2)WITH CHECK OPTION表示对UPDATE,INSERT,DELETE操作时保证更新、插入或删除的行满足视图 定义中的谓词条件(即子查询中的条件表达式) (3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT 子查询目标列的主属性组成。

CREATE VIEW CS_STUDENT //创建视图CS_STUDENT AS SELECT Sno,Sname,Sage,Sex //选择学号、姓名、年龄、性别列FROM Student //从学生表中查询Where SD='CS' //选择系名等于“CS”的行WITH CHECK OPTION; 
//以后对该视图进行修改、插入操作时DBMS会自动加上SD='CS'的条件,保证视图中只有计算机系的学生

2.3视图的删除

语句格式:

DROP VIEW 视图名

如:DROP VIEW CS_STUDENT //删除视图CS_STUDENT

三、触发器

3.1 概念

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

触发器主要有以下三方面的特点: (1)当数据库程序员声明的事件发生时,触发器被激活。声明的事件可以是对某个特定关系的插入、删除或更 新。 (2)当触发器被事件激活时,不是立即执行,而是首先由触发器测试触发条件,如果事件不成立,响应该事件 的触发器什么都不做。 (3)如果触发器声明的条件满足,则与该触发器相连的动作由DBMS执行。动作可以阻止事件发生,可以撤销事 件。

创建触发器时需指定: (1)触发器名称 (2)在其上定义触发器的表 (3)触发事件:触发器将何时激发 (3)触发条件:满足什么条件时执行触发动作 (4)触发动作:指明触发器执行时应做的动作

触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。

不能在临时表或系统表上创建触发器,但触发器可以引用临时表

3.2 创建触发器

CREATE TRIGGER 触发器名称 [BEFORE | AFTER] [DELETE | INSERT | UPDATE OF 列名]  //触发事件ON 表名[REFERENCING <临时视图名>][FOR EACH ROW | FOR EACH STATEMENT] [WHEN <触发条件>]  //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作BEGIN<触发动作> //BEGIN...END 中定义触发动作,即当触发条件满足时,需要数据库做什么END [触发器名称]

BEFORE/AFTER:指明是在执行触发语句之前激发触发器还是执行触发语句之后激发触发器。

DELETE:当一个DELETE语句从表中删除行时激发触发器。

INSERT:当一个INSERT语句向表中插入行时激发触发器。

UPDATE/UPDATE OF(列名):当UPDATE修改表中的值时,激发触发器,也可加(OF 列名)指定是某一列的值被修改时激发触发器。

REFERENCING:触发器运行过程中,系统会生成两个临时视图,分别存放更新前和更新后的值,对于行级触发器,为OLD ROW 和NEW ROW对于语句级触发器,为OLD TABLE和NEW TABLE

REFERENCING new row AS nrow / REFERENCING old row AS orow

FOR EACH ROW:表示为行级触发器,对每一个被影响的元组(即每一行)执行一次触发过程。

FOR EACH STATEMENT:表示为语句级触发器,对整个事件只执行一次触发过程,为默认方式

3.3更改删除触发器

1、更改触发器 语句格式:

ALTER TRIGGER <触发器名> [BEFORE|AFTER]DELETE|INSERT|UPDATE OF [列名]ON 表名|视图名ASBEGIN要执行的SQL语句END

2、删除触发器 语句格式:

DROP TRIGGER <触发器名>

四、存储过程

4.1 概念

 存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,是一组为了完成特定功能的SQL语句集合,经编译后存储在数据 库中,用户通过指定存储过程的名称并给出参数来执行。 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数输出参数返回 单个或多个结果集以及返回值存储过程的优点

  1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。

  1. 当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

  1. 一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率

  1. 存储过程可以重复使用,可减少数据库开发人员的工作量。

  1. 安全性高,可设定只有某些用户才具有对指定存储过程的使用权

4.2 创建格式

CREATE PROCEDURE 存储过程名(IN|OUT|IN OUT 参数1 数据类型,IN|OUT|IN OUT 参数2 数据类…)[AS] //参数的数据类型只需要指明类型名即可,不需要指定宽度。具体宽度由外部调用者决定BEGIN<SQL语句>END

IN:为默认值,表示该参数为输入型参数,在过程体中值一般不变。 OUT:表示该参数为输出参数,可以作为存储过程的输出结果,供外部调用者使用。 IN OUT: 既可作为输入参数,也可作为输出参数。

4.3 触发器和存储过程的区别

  1. 存储过程可以采用输入参数,而触发器不可以;

  1. 存储过程可以返回零或n值,而触发器无法返回值;

  1. 存储过程中可以使用事务,而触发器不允许;

  1. 存储过程通常用于执行用户指定的任务,触发器通常用于审计工作

五、游标

5.1 概念

SQL语言是面向集合的,一条SQL语句可产生或处理多条纪录。而主语言是面向记录的,一组主变量一次只能放一条记录,所以,引入游标,通过移动游标指针来决定获取哪一条记录。

5.2 游标的使用方法

定义游标-->打开游标-->推进游标-->关闭游标

定义游标

EXEC SQL DECLARE <游标名> CURSOR FOR

<SELECT 语句>

END_EXEC

这是一条说明性语句,定义中的SELECT语句并不立即执行。

打开游标

EXEC SQL OPEN <游标名> END_EXEC

推进游标

EXEC SQL FETCH <游标名> INTO <变量表> END_EXEC

关闭游标

EXEC SQL CLOSE <游标名> END_EXEC

5.3 使用示例

六、 流程控制语句

分类:

顺序结构:程序从上往下依次执行

分支结构:程序从两条或多条路径中选择一条执行

循环结构:程序在满足一定条件的基础上,重复执行一段代码

IF…THEN语句

IF…THEN语句是选择语句中最简单的一种形式,它只做一种情况或条件的判断,其语法格式如下:

if <condition_expression> thenplsql_sentence
endif;

CASE语句

CASE 语句也是用来进行条件判断的,它提供了多个条件进行选择,可以实现比 IF 语句更复杂的条件判断。CASE 语句的基本形式如下:

CASE case_valueWHEN when_value THEN statement_list[WHEN when_value THEN statement_list]...[ELSE statement_list]
END CASE情况1:类似于java中的switch语句,一般用于实现的等值判断
语法:case 变量|表达式|字段when 要判断的值 then 返回的值1或语句1;when 要判断的值 then 返回的值2或语句2;...else 返回的值n或语句n;end case;情况2:类似于java中的多重if语句,一般用于实现区间判断
语法:casewhen 要判断的条件1 then 返回的值1或语句1;when 要判断的条件2 then 返回的值2或语句2;...else 返回的值n或语句n;end case;

其中:

  • case_value 参数表示条件判断的变量,决定了哪一个 WHEN 子句会被执行;

  • when_value 参数表示变量的取值,如果某个 when_value 表达式与 case_value 变量的值相同,则执行对应的 THEN 关键字后的 statement_list 中的语句;

  • statement_list 参数表示 when_value 值没有与 case_value 相同值时的执行语句。

  • CASE 语句都要使用 END CASE 结束。

LOOP 语句

LOOP 语句可以使某些特定的语句重复执行。与 IF 和 CASE 语句相比,LOOP 只实现了一个简单的循环,并不进行条件判断。

LOOP 语句本身没有停止循环的语句,必须使用 LEAVE 语句等才能停止循环,跳出循环过程。LOOP 语句的基本形式如下:

[begin_label:]LOOPstatement_list
END LOOP [end_label]

其中,begin_label 参数和 end_label 参数分别表示循环开始和结束的标志,这两个标志必须相同,而且都可以省略;statement_list 参数表示需要循环执行的语句。

WHILE 语句

WHILE 语句也是有条件控制的循环语句。WHILE 语句和 REPEAT 语句不同的是,WHILE 语句是当满足条件时,执行循环内的语句,否则退出循环。WHILE 语句的基本语法形式如下:

[begin_label:] WHILE search_condition DOstatement list
END WHILE [end label]

其中,search_condition 参数表示循环执行的条件,满足该条件时循环执行;statement_list 参数表示循环的执行语句。WHILE 循环需要使用 END WHILE 来结束。


http://chatgpt.dhexx.cn/article/YLD8nEiW.shtml

相关文章

数据库语言SQL

数据库语言SQL SQL的发展 1974年&#xff0c;由Boyce和Chamberlin提出 1975~1979&#xff0c;IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 非过程化语言 SQL语言进行数据库操作…

MySQL数据库语言一、DDL

&#x1f618;作者简介&#xff1a;正在努力的99年打工人。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;动…

数据库系统之sql语言

查询语言(query language)是用户用来从数据库中请求获取信息的语言。这些语言通常比标准的程序设计语言层次更高。查询语言可以分为过程化的和非过程化的。在过程化语言(procedural language)中&#xff0c;用户指导系统对数据库执行一系列操作以计算出所需结果。在非过程化语言…

一文读懂数据库语言

数据库系统提供数据定义语言&#xff08;Data-Definition Language&#xff0c;DDL&#xff09;来定义数据库模式&#xff0c;并提供数据操纵语言&#xff08;Data-Manipulation Language&#xff0c;DML&#xff09;来表达数据库的查询和更新。而实际上&#xff0c;数据定义和…

数据库+SQL语言

文章目录 数据库相关概念MySQL数据模型关系型数据库 SQL通用语法 SQL语句全解DDLDMLDQL基础查询条件查询排序查询分组查询分页查询 约束外键约束 数据库设计软件研发步骤数据库设计理念和步骤表关系多表查询事务 数据库相关概念 数据库&#xff1a;存储和管理数据的仓库&#x…

又一门国产数据库语言诞生了,比SQL还好用

一、数据库语言的目标 1.1 数据库是做什么的 数据库这个软件&#xff0c;名字中有个“库”字&#xff0c;会让人觉得它主要是为了存储的。其实不然&#xff0c;数据库实现的重要功能有两条&#xff1a;计算、事务&#xff01;也就是我们常说的OLAP和OLTP&#xff0c;数据库的…

数据库标准数据语言SQL——总结

数据库标准数据语言SQL SQL(Structured Query Language),结构化查询语言 1. 数据查询——select 2. 数据操纵——create,drop,alter 3. 数据定义——insert,update,delete 4. 数据控制——grant,revoke 1数据定义 1. 模式的定义删除 2. 基本表的定义、删除与修改 列级完整…

【数据库】SQL语言

目录 一、SQL语言概述 1、特点 2、SQL功能 3、SQL支持数据库系统三级模式 二、数据定义语言&#xff08;DDL&#xff09; 1、模式 2、基本表 3、视图 4、索引 三、数据查询语言&#xff08;DQL&#xff09; 1、单表查询 2、连接查询 3、嵌套查询 4、集合查询 5、…

数据库语言-SQL

数据库语言&#xff0d;SQL 一、概述二、利用SQL建立数据库1、创建Database2、创建Table3、追加元组 三、利用SQL进行简单查询1、单表查询2、检索条件之去重复记录3、检索结果之排序4、模糊查询 四、利用SQL语言进行多表联合查询1、θ-连接之等值连接2、表更名与表别名3、θ-连…

数据库SQL语言

SQL语言基础 大家好&#xff0c;我是大黄。这次我来简单带你们了解一下数据库技术中必不可少的一项——SQL语言。 SQL&#xff0c;英文是Structured Query Language&#xff0c;直面翻译就是结构化疑问语言。所以说明这个语言是有一定的结构的&#xff0c;所以基础阶段不会太困…

数据库语言

DDL语言 其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表&#xff08;CREATE TABLE 或 DROP TABLE&#xff09;为表加入索引等。 mysql是一个关系型数据库&#xff0c;库里面包含若干个表&#xff0c;而每一张表都是由行和列组成。 1.关于数据库操作的命…

数据库基础语言

目录 数据库与表的概念 如何操作数据库 数据库连接方式 SQL分类 DDL数据定义语言 DML 数据操作语言 数据库常用数据类型 约束条件 主键约束(PRIMARY KEY) 具有主键约束的字段同时可以使用自增来让DBMS自行对其值进行维护 非空约束(NOT NULL) 唯一性约束(UNIQUE) D…

MySQL-SQL语言

文章目录 SQL语法要求&#xff1a;1、DDL1.1、数据库操作(1) 查询当前数据库(2) 查询当前数据库(3) 创建数据库(4) 创建一个itheima数据库&#xff0c;并且指定字符集(5) 删除数据库(6) 切换数据库 1.2、表操作1.2.1、表的基本操作(1) 查询当前数据库所有表(2) 查看指定表结构(…

只知道SQL数据库?又一国产数据库语言诞生了

一、为什么学习数据库&#xff1f; 学习数据库&#xff0c;你肯定需要先了解它&#xff0c;这样你才知道你为什么要学习它&#xff0c;数据库除了SQL还有一些别的数据库&#xff0c;了解它们的作用&#xff0c;可以在不同的场景选择最符合的一个数据库。 1.1 什么是数据库&am…

比SQL还好用,又一门国产数据库语言诞生了

目录 一、数据库语言的目标1、要说清这个目标&#xff0c;先要理解数据库是做什么的。2、什么样的计算体系才算好呢&#xff1f; 二、SQL为什么不行1、先看写着简单的问题2、为什么 SQL 不行呢&#xff1f;3、再看跑不快的原因4、我们再做个类比&#xff1a; 三、SPL为什么能行…

MySQL数据库——SQL语言

文章目录 MySQL数据库——SQL语言前言一、数据定义语言&#xff08;DDL&#xff09;二、数据操纵语言&#xff08;DML&#xff09;三、事务控制语言&#xff08;TCL&#xff09;四、数据查询语言&#xff08;DQL&#xff09;1.select/for 基本查询语句2.给列起别名&#xff08;…

写着简单跑得又快的数据库语言 SPL

数据库语言的目标 要说清这个目标&#xff0c;先要理解数据库是做什么的。 数据库这个软件&#xff0c;名字中有个“库”字&#xff0c;会让人觉得它主要是为了存储的。其实不然&#xff0c;数据库实现的重要功能有两条&#xff1a;计算、事务&#xff01;也就是我们常说的 OLA…

大数据和云计算有什么关系?

前言 本文隶属于专栏《大数据从0到1》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和文献引用请见《大数据从0到1》 解答 云计算关注资源的分配和利用&#xff0c;侧重…

【云原生|云计算系列】云计算基础概念

欢迎来到云原生专题的云计算系列第一篇博客&#xff0c;我们将探索云计算的基础知识&#xff0c;以帮助您深入了解这个迅速发展的领域。在前一篇博客中&#xff0c;我们介绍了云原生的概念和重要性&#xff0c;强调了它作为云计算的核心理念和实践的关键角色。本篇博客将进一步…

云计算之概念——IaaS、SaaS、PaaS、Daas

云计算通俗来说就是输入/输出和计算不在一个主机上。计算要用到计算设备&#xff0c;计算设备一般是指CPU、内存和硬盘&#xff0c;输入/输出设备一般是指键盘、鼠标、显示器、耳机、音响、话筒等外设。而我们的个人计算机是使用主板将这些东西连接到一起来协调工作。 一个软件…