数据库(SQL sever)

news2024/12/24 4:39:08

本博客将主要讲述数据库(SQL sever)

1.数据库解决的数据问题:

Data redundancy and inconsistency(数据冗余和不一致)

Difficulty in accessing data

Data isolation (数据孤立)

Integrity problems (完整性问题)

Atomicity of updates (更新操作的原子性)

Concurrent access by multiple users (多用户并发访问)

Security problems (安全性问题)

2.SQL语句大致分两种:

Data-Manipulation Language, DML (数据操纵语言)  查询

Data-Definition Language, DDL(数据定义语言)   定义

3.SQL数据库中往往用表来储存数据

元组(Tuple表中的一行被称为元组,代表了一个实体的一组属性值。又名:记录、行

属性(Attribute表中的一列被称为属性,代表了实体的一个特定属性。又名;字段、列

关系模式(Relation Schema: 定义了表的结构,包括表名、属性名以及属性的数据类型。

关键字(Key: 一个或一组属性,用于唯一标识元组。关键字在确保数据唯一性和完整性方面起着重要作用

每个属性的值、元素的集合又称:属性的域(domain)

元组中的属性是无序的。

元组在关系中出现的顺序是无关的。

笛卡尔积(Cartesian Product)

在数据库中,笛卡尔积(Cartesian Product)是指两个表的每一行都与另一个表的每一行组合在一起的结果集。这种组合会生成一个新的表,其中的每一行都包含两个表中对应行的所有列的值。

假设有两个表A和B,它们分别包含m和n行记录。那么这两个表的笛卡尔积将包含m * n行。在结果中,每一行都是表A的一行与表B的所有行的组合。

用数学符号表示,如果A表有a1, a2, ..., am列,B表有b1, b2, ..., bn列,那么它们的笛卡尔积可以表示为:

[ A \times B = {(a1, a2, ..., am, b1, b2, ..., bn) \mid a1 \in A, a2 \in A, ..., am \in A, b1 \in B, b2 \in B, ..., bn \in B} ]

在SQL中,可以使用CROSS JOIN  (交叉连接,又称自然连接)来获得两个表的笛卡尔积。例如,如果有两个表A和B,可以使用以下语句:

select * from A  cross join B;

SELECT * FROM A CROSS JOIN B;

需要注意的是,笛卡尔积的结果集可能非常大,尤其是当参与的表具有大量记录时。因此,在实际使用中,通常需要谨慎使用笛卡尔积,以避免性能问题。

原子域(Atomic Domain)

原子域指的是一个字段(列)中的数据应该是不可再分的最小单位。换句话说,一个字段中的数据应该是不可再分的单一数值或原子值。例如,在一个“姓名”字段中,如果将“姓”和“名”合并在同一个字段中,这就违反了原子性,因为“姓名”不再是不可再分的最小单位。

保持原子性有助于确保数据的一致性和规范性,同时也方便了数据库查询和维护。

第一范数(First Normal Form,1NF)

第一范数是关系数据库中的规范化的第一个步骤。一个关系被认为满足第一范数,如果它的所有属性都是原子的,即每个属性中的数据都是不可再分的。

在第一范数中,每个列都包含了有意义的原子数据,不存在重复的组合数据或集合数据。这有助于避免数据冗余和确保数据的一致性。

为了使关系满足第一范数,通常需要对表结构进行调整,将包含复合数据或集合数据的字段拆分成独立的原子属性。

举例说明,假设有一个包含学生信息的表格,其中有一个字段是“联系方式”,包含了多个电话号码。如果将电话号码放在一个字段中,就违反了原子性和第一范数。正确的做法是将每个电话号码拆分成独立的字段,以确保每个属性都是原子的。

在数据库设计中,满足第一范数是规范化的基本要求,而规范化则是一种设计技术,旨在通过消除冗余和依赖性,提高数据库的性能、一致性和可维护性。

几个常见重要的键

1.超码(Super Key)

超码是能够唯一标识元组的属性集合,它可以包含主码,也可以是不包含主码的属性集合

换句话说,超码是可以唯一标识元组的最小属性集合。它可能包含冗余属性,但是至少能够唯一地标识元组。

例如:学生表(学号、姓名、年龄)中,超码可以是{学号},也可以是{学号,姓名},也可以是{姓名,年龄}也可以是{学号,年龄}{学号,姓名,年龄}

候选键和主码都是超码: 所有的候选键和主码都是超码,因为它们都能确保唯一性。

主码是超码的特例,因为它是最小的超码

超码可以是一个或者多个

2.候选码(Candidate Key)

候选键是能够唯一标识关系表中每个元组的属性集合。候选码是最小的超码

与主码(Primary Key)类似,候选键的目的是确保表中的每行都有一个唯一标识符。在关系数据库设计中,可以从候选键中选择一个作为主码,而其他的候选键则可以作为备选键。

候选键具有以下特性:

唯一性: 候选键的属性集合能够唯一标识表中的每个元组,确保没有两行具有相同的候选键值。

最小性: 候选键是最小的,意味着如果从候选键中移除任何一个属性,就不能保证唯一性。候选键是最小超码。

不可包含冗余属性: 候选键中的每个属性都是必需的,没有冗余。移除任何属性都会破坏唯一性。

在关系数据库设计中,通常会有多个候选键可供选择。设计者需要根据具体的业务需求和数据特性选择一个候选键作为主码。其他未选择的候选键可以作为备选键,或者在实际应用中充当唯一性约束的附加手段。

考虑一个学生表的例子,可能存在学生ID、学生邮箱、和学生手机号这三个属性都能唯一标识每个学生。这三个属性都可以作为候选键,但最终只能选择其中一个作为主码。

候选码可以是一个或者多个

3.主码(Primary Key):

主码是用于唯一标识关系表中每个元组(行)的一组属性(列)。它确保了表中的每行都具有唯一性,没有两行具有相同的主码值。

主码在关系模型中是至关重要的,因为它能够确保数据的唯一性和完整性。常见的主码包括学生ID、订单号、账户号等,用于唯一标识每个实体或记录。

主码只能唯一且非空

4.外码(Foreign Key)

外码是一个或一组属性,它们在一个表中创建引用另一个表的主码外码建立了表之间的关联,允许在不同表之间建立引用完整性(Referential Integrity)。

外码通常用于确保在进行表之间的关联查询时,参考的值在相关表中确实存在。它创建了表与表之间的关联性,使得数据之间可以进行连接和关联查询

外码可为空,可以有一个或者多个

DDL语句

1.创建表

use 数据库名

create table department

(dept_name varchar (20),

 building varchar (15) not null,   --非空

budget numeric (12,2) check(budget>0),

primary key (dept_name),      --设置主码(在最后和定义时均可)

check(budget>0)),              --检查数据(在最后和定义时均可)

foreign key (dept_name) references instructor;   --设置外码

2.删除表

drop table 表名;

3.表的更新

3.1.添加列

alter table <表名>

        add column <列的定义>;

--例

alter table product

        add column product_name varchar(100);

3.2.删除列:

alter table <表名>

        drop column <列名>;

--例

alter table product

        drop column product_name;

3.3.插入行数据:

begin transaction;

insert into <表名>

        values ('T恤衫','衣服','0001',1000,500,'2009-02-05';

insert into <表名>

        values ('0002', '菜刀', '厨房用具', 2000,50,'2022-01-01');

commit;

3.4.更新数据:

update department

        set budget= budget*1.05;

3.5变更表名:

exec sp_rename '旧表名','新表名';

3.6.变更列名:

exec sp_rename '表名.旧字段名','新字段名','column';

3.7.修改列类型:

alter table <表名>

        alter column <列名> varchar(100);

常见问题 

AS的用法,as可以省略

查找顺序是 from  where  select

Null的比较都是null

Null+C常数=null

Join(连接)

交并补

聚集函数

Avg、Min、Max、Sum、Count,以上函数count不会忽视null,其他的都忽视null

Group by分组

Having过滤元组

Having用于组形成后,where用于组形成前

嵌套子查询

In

Not in

Someanyall

Exist和 no exist

Delete

Add

Update

Set case when then end

以上本次博客图片均来自于大连理工大学数据库教学PPT,如有侵权请联系删除。


这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞,收藏和关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言❤
后续会继续更新大连理工大学相关课程和有关数据库的内容
点赞加关注,学习不迷路,好,本次的学习就到这里啦

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

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

相关文章

组态软件基础知识

一、组态软件基础知识 1、概述 &#xff08;1&#xff09;、组态软件概念与产生背景 “组态”的概念是伴随着集散型控制系统&#xff08;Distributed Control System简称DCS&#xff09;的出现才开始被广大的生产过程自动化技术人员所熟知的。在工业控制技术的不断发展和应用…

基于FPGA的HyperRam接口设计与实现

一 HyperRAM 针对一些低功耗、低带宽应用&#xff08;物联网、消费产品、汽车和工业应用等&#xff09;&#xff0c;涉及到外部存储&#xff0c;HyperRAM提供了更简洁的内存解决方案。 HyperRAM具有以下特性&#xff1a; 1、超低功耗&#xff1a;200MHz工作频率下读写不到50mW…

基于SpringBoot的农产品特色供销系统(蔬菜商城)

基于SpringBoot的农产品特色供销系统&#xff08;蔬菜商城&#xff09; 系统介绍 该系统使用Java、MySQL、Redis、Spring Boot和HTML等技术作为系统的技术支撑&#xff0c;实现了以下功能模块&#xff1a; &#xff08;1&#xff09;后台管理模块&#xff0c;包括权限、日志、…

学习Java的第七天

目录 一、什么是数组 二、作用 三、如何使用数组 1、声明数组变量 2、创建数组 示例&#xff1a; 3、数组的使用 示例&#xff1a; 4、数组的遍历 for循环示例&#xff08;不知道for循环的可以查看我之前发的文章&#xff09; for-each循环&#xff08;也就是增强for…

CAN一致性测试:物理层测试之终端电阻测试

从本周开始结合工作实践&#xff0c;给大家总结CAN一致性相关的测试 包括&#xff1a;物理层、数据链路层、应用层三大块知识点 CAN一致性测试:物理层测试之终端电阻测试 试验目的&#xff1a; 测试控制器的 CANH 对地、CANL 对地、CANH 对 CANL 的内阻是否符合 ISO11898-2的…

2024年k8s最新版本使用教程

2024年k8s最新版本使用教程 3. YAML语言入门3.1 基本语法规则3.2 支持的数据结构3.3 其他语法 4 资源管理4.1 k8s资源查询4.2 资源操作命令4.3 资源操作方式4.3.1 命令行方式4.3.2 YAML文件方式 5 Namespace5.1 查看命名空间5.2 创建命名空间5.3 删除命名空间5.4 命名空间资源限…

GitOps实践之Argo CD (2)

argocd 【-1】argocd可以解决什么问题? helm 部署是手动的?依赖流水线。而有时候仅仅更新一个小东西,流水线跑好久,CD真的不应该和CI耦合。不同环境的helm配置不同,手动修改问题多,可以用git管理起来,例如分不同环境用目录区分。argocd创建应用可以不通环境部署到不同集…

基于Java+springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

备忘: 踩坑linux环境部署轻量化的Langchain-Chatchat集成通义千问

看了许多材料,为了利用大模型构建以对话方式驱动的本地应用程序需要使用LangChain-chatchat,其基本介绍参考Langchain-Chatchat项目 通过查询资料&#xff0c;查到win上安装流程使用免费的通义千问 api 最轻量化部署Langchain-Chatchat&#xff0c;原以为在信创Linux系统上非常…

MM01/MM02/MM03物料主数据增强

1.屏幕增强 -在主表中附加结构(判断数据的主表,如MARA,MARC) 增强字段数据元素勾选更改文档以后,会记录字段变更历史 -SPRO-->物流-常规-->物料主数据-->配置物料主记录-->创建定制子屏幕的程序 会生成对应的函数组--里面会包含两个屏幕(0001,0002) 这里的0001屏…

2024年华为HCIA-DATACOM新增题库(H12-811)

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…

【联邦学习综述:概念、技术】

出自——联邦学习综述&#xff1a;概念、技术、应用与挑战。梁天恺 1*&#xff0c;曾 碧 2&#xff0c;陈 光 1 从两个方面保护隐私数据 硬件层面 可 信 执 行 环 境 &#xff08;Trusted Execution Environment&#xff0c;TEE&#xff09;边 缘 计 算&#xff08;Edge Com…

如何成为一名优秀的项目管理者?

如何成为一名优秀的项目管理者&#xff1f; 在一个项目团队里&#xff0c;经常会有很多不同的声音&#xff1a; 有人说&#xff1a;“好的项目管理者就要做打杂的&#xff0c;什么都不用干&#xff0c;什么杂事他都能干”&#xff1b;有人说&#xff1a;“项目管理者经常受到…

vue ui Starting GUI 图形化配置web新项目

前言&#xff1a;在vue框架里面&#xff0c; 以往大家都是习惯用命令行 vue create 、vue init webpack创建新前端项目&#xff0c;而vue ui是一个可视化的图形界面&#xff0c;对于新手来说更加友好了&#xff0c;不但可以创建、管理、还可以更新vue项目&#xff0c;也可以下载…

mabatis 中

手动实现MaBatis底层机制 实现任务阶段一&#x1f34d;完成读取配置文件, 得到数据库连接&#x1f966;分析 代码实现&#x1f966;完成测试 实现任务阶段二&#x1f34d;编写执行器, 输入SQL语句, 完成操作&#x1f966;分析 代码实现&#x1f966;完成测试 实现任务阶段三&…

基于PHP的餐厅管理系统APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 MVC 3 1.2 ThinkPHP 3 1.3 MySQL数据库 3 1.4 uni-app 4 1.5 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 7 2.3 非功能需求 8 2.4 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.2 系统详细设计 10 3.3 本章小…

数字图像处理—python

pycahem终端也可以下载库&#xff0c;我只会用终端下载,用的镜像网站 pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple. pip install matplotlib -i https://pypi.tuna.tsinghua.edu.c…

超标量与多发射和超长指令字设计

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第11篇,在这里分享给大家,这篇文章讲超标量与多发射和超长指令字设计&#xff0c;前面文章提到的书籍的pdf大家没有的话可以私信找我要&#xff01; 《计算机组成与设计&#xff1a;硬件 / 软件接口》中4.10…

什么是PLC设备数据采集?

在当今工业4.0和智能制造的大背景下&#xff0c;数据的价值日益凸显。特别是对于PLC&#xff08;可编程逻辑控制器&#xff09;这类核心工业设备&#xff0c;数据采集显得尤为重要。那么&#xff0c;究竟什么是PLC设备数据采集&#xff1f;它又有何价值呢&#xff1f;今天&…

Python打印Linux系统中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明&#xff1a; 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表&#xff0c;并统计命令的执行次数。统计时&#xff0c;只统计命令的名称&#xff0c;以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…