热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【数据库学习笔记】Day03SQL语言基础及数据库定义功能

【数据库学习笔记】Day03-SQL语言基础及数据库定义功能〇、本文所用数据库表格:一、关系运算:关系运算,数学名词,基本

【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能


〇、本文所用数据库表格:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


一、关系运算:

        关系运算,数学名词,基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、连接、除法、外连接等),数据库操作的有些查询需要几个基本运算的组合,要经过若干步骤才能完成。关系是由元组构成的集合,可以通过关系的运算来表达查询要求。


1.1 传统的关系运算:

1.1.1 并:


  • R∪S
  • 仍为n 元关系 , 由属于R 或属于S 的元组组成
    R∪S = { t|t 属于 R∨t 属于S }
  • 示意图:
    在这里插入图片描述
    1.1.2 差:
  • R - S
  • 仍为n元关系 , 由属于R 而不属于S 的所有元组组成
    R - S = { t|t属于R∧t不属于S }
  • 示意图:
    在这里插入图片描述

1.1.3 交:


  • R∩S
  • 仍为n 元关系 , 由既属于R 又属于S 的元组组成
    R∩S = { t|t 属于R∧t 属于S }
    R∩S = R – (R-S)
  • 示意图:
    在这里插入图片描述

1.1.4 笛卡尔积:


  • R ×S
  • 示意图:
    在这里插入图片描述

1.2 专门的关系运算:

1.2.1 选择:


  • 在关系R中选择满足给定条件的诸元组。
  • σ F ® = {t|t属于R∧F(t)= ’ 真’}
    F:选择条件 :选择条件 , 是一个逻辑表达式
  • 示意图:
    在这里插入图片描述

1.2.2 投影:


  • 从R 中选择出若干属性列组成新的关系
    π A ® = { t[A] | t属于R }
    A : R中的属性列。
  • 投影操作主要是从列的角度进行运算
    投影之后不仅取消了原关系中的某些列 , 而且还可能
    取消某些元组(避免重复行!)。在这里插入图片描述
    1.2.3 连接:
  • 连接也称为θ连接。
  • 连接运算的含义:
    从两个关系的笛卡尔积中选属性间满足一定条件的元组。
  • 两类常用的连接运算:
    等值连接(equijoin)、自然连接(natrualjoin)。

1.等值连接:
    从关系R和S的广义笛卡尔积中选取A、B属性值相等的那些元组。
在这里插入图片描述
2.自然连接:

    自然连接是等值连接的一种特殊情况; 等值连接要求连接的是值相等的分量,两个关系中可以没有相同的属性;进行自然连接的两个关系中必须有相同的属性。 等值连接不要求去掉重复属性列;自然连接时需要除掉重复的属性列。

自然连接的含义:


  • R和S的相同属性组的值相等。
  • 两个关系中进行比较的分量必须是相同的属性组。
  • 在结果中要把重复的属性列去掉。
  • 一般的连接操作是从行的角度进行运算,而自然连接需要取消重复列,是同时从行和列的角度进行运算。
    在这里插入图片描述
    在这里插入图片描述

3.内连接(Inner Join):


  • 两个关系做自然连接时,连接的结果是满足条件的元组保留下来,不满足条件的元组被舍弃了。

4.外连接(Outer Join):


  • 如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫外连接。
  • 左外连接:只把左边关系中要舍弃的元组保留。
  • 右外连接:只把右边关系中要舍弃的元组保留。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

4.除:
在这里插入图片描述


二、SQL语言介绍:

    SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。


  • SQL和SQL SERVER的区别:
  • SQL( structured query language) 结构化查询语言。
    它是一种标准,不是一种软件。
  • SQL SERVER 是数据库管理系统的一种,这种软件在遵循 SQL 这种标准,很多数据库管理软件及开发工具都支持 SQL。

2.1 SQL语言的特点:

1.综合统一:
数据定义语言(DDL),数据查询语言(DQL),数据操纵语言(DML),数据控制语言(DCL)于一体。可独立完成数据库生命周期中的全部活动,随时修改。数据操作符统一。

2.高度非过程化:
面向对象的第四代语言;SQL只要提出“做什么”,无须了解存取路径;存取路径的选择以及SQL的操作过程由系统自动完成。

3.面向集合的操作方式:
操作对象、查找结果可以是元组的集合;一次插入、删除、更新操作的对象是元组的集合。

4.以同一种语法结构提供多种使用方式:
独立的语言,能够独立用于联机交互的使用方式;嵌入式语言,能够嵌入到高级语言中使用。


2.2 SQL语言功能概述:

SQL语言有四部分功能: 数据定义数据控制数据查询数据操纵
在这里插入图片描述
2.2.1 SQL支持关系数据库的三级模式结构:
在这里插入图片描述


  • 基本表:
    本身独立存在的表。
    SQL中一个关系就对应一个基本表。
    一个(或多个)基本表对应一个存储文件。
    一个表可以带若干索引。
  • 视图:
    从一个或几个基本表导出的表。
    数据库中只存放视图的定义。
    视图是一个虚表。
    用户可以在视图上再定义视图。
  • 存储文件:
    逻辑结构组成了关系数据库的内模式。
    物理结构是任意的,对用户透明。
  • 索引:
    为快速访问数据,而在包含数据的表中增加的一种组织。
    分为聚簇索引非聚簇索引
    聚簇索引:指索引项的顺序与表中记录的物理顺序一致的索引组织。

2.3 SQL的数据类型:

2.3.1 数值型:
分为 准确型近似型


  • 准确型:
    整数:
    Bigint:8字节
    Int:4字节
    Smallint:2字节
    Tinyint:1字节(表示范围为0~255整数)
    Bit:1位,存储1或0
    小数:
    Numeric(p,q)或Decimal(p,q),
    其中:p为数字位长度,q为小数位长度。
  • 近似型:
    Float:8字节
    Real:4字节

2.3.2 字符串型:


  • 普通编码字符串类型:
    Char(n)&#xff1a;定长存储&#xff0c;n<&#61;8000
    Varchar(n)&#xff1a;不定长存储&#xff08;按实际&#xff09;&#xff0c;长度不超过n&#xff0c;n<&#61;8000
    Text&#xff1a;存储大于8000字节的文本
  • 统一字符编码字符串类型&#xff1a;
    nchar(n)&#xff1a;定长存储&#xff0c;n<&#61;4000
    nvarchar(n)&#xff1a;不定长存储&#xff0c;长度最大不超过n&#xff0c;n<&#61;4000
    ntext&#xff1a;存储大于8000字节的文本
    特点&#xff1a;每个字符占两个字节。
  • 二进制字符串类型&#xff1a;
    Binary(n)&#xff1a;固定长度&#xff0c;n<&#61;8000
    Varbinary(n)&#xff1a;可变长度&#xff0c;n<&#61;8000
    注&#xff1a;n为二进制数据的字节数。
    Image&#xff1a;大容量、可变长二进制字符数据&#xff0c;可用于存储文件。
    2.3.3 日期时间型&#xff1a;
    Datatime&#xff1a;8字节&#xff0c;年月日时分秒毫秒
    SmallDateTime&#xff1a;4字节&#xff0c;年月日时分

2.4 SQL的数据定义功能&#xff1a;

1.定义基本表&#xff1a;
CREATE TABLE <表名>
2.删除表&#xff1a;
DROP TABLE <表名>
3.修改表结构&#xff1a;
ALTER TABLE <表名>

2.5 数据完整性&#xff1a;

2.5.1 完整性约束条件的作用对象&#xff1a;


  • 完整性检查是围绕完整性约束条件进行的&#xff0c;因此&#xff0c;完整性约束条件是完整性控制机制的核心。
  • 完整性约束条件的作用对象可以是表、元组和列。即&#xff1a;
    列级约束、元组约束、关系约束。

1.列级约束&#xff1a;
列级约束主要是对列的类型、取值范围、精度等的约束。


  • 数据类型 的约束&#xff1a;
    包括数据类型、长度、精度等。
  • 数据格式 的约束&#xff1a;
    如:规定学号的前两位表示学生的入学年份&#xff0c;第三位表示系的规定学号的前两位表示学生的入学年份&#xff0c;第三位表示系的编号&#xff0c;第四位表示专业编号&#xff0c;第五位代表班的编号等等。
  • 取值范围 的约束&#xff1a;
    如: 学生的成绩取值范围为0 &#xff5e;100。 。
  • 空值 的约束。

2.元组约束&#xff1a;
元组的约束是元组中各个字段之间的相互约束&#xff0c;如&#xff1a;
开始日期小于结束日期。
职工的最低工资不能低于规定的最低保障金。

3.关系约束&#xff1a;
指若干元组之间、关系之间的联系的约束&#xff0c;如&#xff1a;
学号的取值不能重复也不能取空值。
学生修课表中的学号的取值受学生表中的学号取值的约束。

2.5.2 实现数据完整性&#xff1a;

1.声明完整性&#xff1a;
在表定义时声明&#xff0c;使用约束、缺省值等。
2.过程完整性&#xff1a;
在客户端或服务器端用编程语言或工具来实现。
在Server端用触发器&#xff08;Trigger&#xff09;来实现。

2.5.3 实现约束&#xff1a;


  • PRIMARY KEY 约束&#xff1a;保证实体完整性。
  • UNIQUE 约束&#xff1a;确保在非主键列中不输入重复值。应用在客观具有唯一性质的列上。如&#xff1a;身份证号、社保号等。
  • FOREIGN KEY 约束&#xff1a;用于建立和加强两个表数据之间的连接的一列或多列。如&#xff1a;为雇员表的工作编号添加外码引用约束&#xff0c;此列引用工作表的工作编号列。
  • DEFAULT 约束&#xff1a;当向表中插入数据时&#xff0c;如果没有为定义了DEFAULT的列提供值&#xff0c;则此列使用默认值。一个DEFAULT只能约束一列。
  • CHECK 约束&#xff1a;通过限制输入到列中的值来强制域的完整性&#xff0c;可定义同表多列之间的约束关系。 如&#xff1a;在雇员表中&#xff0c;添加限制雇员的工资必须大于等于500的约束。再比如&#xff1a;添加限制工资表的最低工资小于等于最高工资的约束。

推荐阅读
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 如何更改电脑系统的自动校时服务器地址?
    本文介绍了如何通过注册表编辑器更改电脑系统的自动校时服务器地址。通过修改注册表中的数值数据或新建字符串数值的方式,可以将默认的时钟同步服务器地址更改为自己所需要的域名或IP地址。详细步骤包括双击时间区域,点击internet时间,勾选自动校正域名设置定时等操作。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
author-avatar
iz76mww
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有