精华内容
下载资源
问答
  • 关系型数据库的第一范式要求: 所有字段都是不可分割的 举例来说,客户数据表中包含客户名和地址,地址由城市和街道组成。应用经常需要分别访问城市或街道字段。 数据表customers(name,city, street)是符合第...

    为了建立冗余较小、结构合理的关系数据库,设计关系数据库时必须遵循一定的规则, 即关系数据库的设计范式。

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

    关系型数据库的第一范式要求:

    • 所有字段都是不可分割的

    举例来说,客户数据表中包含客户名和地址,地址由城市和街道组成。应用经常需要分别访问城市或街道字段。

    数据表customers(name,city, street)是符合第一范式的,而数据表customers(name,address)则不满足第一范式的要求。

    定义一个满足第一范式的数据表:

    courses(student_id, course_id, school_name, president, credit)
    primary key(student_id, course_id)
    

    上表仍然存在四个问题:

    • 数据冗余: school_name, president属性重复出现

    • 插入异常: 若一个新建school没有开始招生则不能加入数据表中

    • 删除异常: 若一学院所有学生均毕业,则该学院信息消失

    • 修改异常: 若一学院院长更换,则需修改该学院所有学生的数据;

    若一学生转院则需修改其所选所有课程的数据。

    第二范式(Second Normal Form, 2NF)

    第二范式是在第一范式的基础上定义的,它要求:

    • 表的设计满足第一范式

    • 除主键外所有属性完全函数依赖于主键

    候选码是函数决定所有非主属性的最小集合,但不排除候选码的真子集决定某些而非全部非主属性的情况.

    而2NF禁止候选码的真子集函数决定任何非主属性.

    如上文数据表:

    courses(student_id, course_id, school_name, president, credit)
    primary key(student_id, course_id)
    

    school_name和president属性依赖于student_id属性,不依赖于course_id属性。

    也就是说school,president属性部分函数依赖于主键,不满足第二范式的要求。

    若将上表拆分为两个数据表:

    courses(student_id, course_id, credit)
    primary key(student_id, course_id)
    
    students(student_id, school_name, president)
    primary key(student_id)
    

    拆分后的数据表满足了第二范式的要求。

    现在分析一下,第一范式没有解决的四个问题:

    • 数据冗余: 减少了school_name和president重复出现的次数

    • 插入异常: 未解决

    • 删除异常: 未解决

    • 修改异常: 解决了学生转院的问题,未解决院长更换的问题

    第三范式(Third Normal Form, 3NF)

    第三范式定义在第二范式的基础上:

    • 表的设计满足第二范式的要求

    • 除非主属性直接依赖于主键

    看上文数据表的定义

    students(student_id, school_name, president)
    primary key(student_id)
    

    存在传递函数依赖student_id->school_name->president,不满足第三范式。

    进行进一步拆分:

    courses(student_id, course_id, credit)
    primary key(student_id, course_id)
    
    students(student_id, school_name)
    primary key(student_id)
    
    schools(school_name, president)
    primary key
    

    拆分后消除了传递函数依赖。

    分析第三范式对上述四个问题处理。

    • 数据冗余: 除了主键外所有属性只出现一次

    • 删除异常: 允许删除所有学生而保留学院信息

    • 插入异常: 允许建立没有学生的学院

    • 更新异常: 更换院长,学生转院均只需修改一条记录

    第三范式基本上可以解决上述问题。

    BCNF

    BC(Boyce-Codd)范式在3NF的基础上进一步消除了传递依赖.

    BCNF要求:

    • 关系模式符合3NF

    • 函数依赖集F中所有函数依赖X->F, 左部X必须包含R的所有候选码.

    即所有候选码都直接决定所有非主属性.

    BCNF分解算法

    给定关系模式R和其上的函数依赖集F, 将R进行满足BCNF的无损连接分解:

    1. 置初值p =

    2. 检查p中的关系模式若均满足BCNF则停止分解, 否则重复执行3.

    3. 在p中选出不满足BCNF的关系模式S, 其中必有非平凡依赖B->C, 且B不是S的候选码.将S分解为S1= {B,C}和S2 = R - , 用S1,S2代替p中S的位置.

    示例:

    R = {A, B, C} F = {A->B, B->C}

    候选码A, 函数依赖B->C, 因为B不是Candidate Key所以要进行分解:

    {B, C} {A, B}

    第四范式(Forth Normal Form, 4NF)

    4NF要求:

    • 必须满足BCNF

    • 非主属性不能存在多值

    示例:

    phone(user_id,  phone, cell)
    

    若某用户有多个phone同时又有多个cell时此表设计显然不合理.

    可以采用如下的拆分方案:

    phone(user_id, phone, type)
    

    拆分后的数据表满足了4NF.

    转载于:https://www.cnblogs.com/Finley/p/5462610.html

    展开全文
  • 可是非常多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。本文以hbase举例讲述数据模式的变化。 传统关系型数据库(mysql,oracle)数据存储方式主要例如以下: 图一 ...

           现在Bigtable型(列族)数据库应用越来越广,功能也非常强大。

    可是非常多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。

    本文以hbase举例讲述数据模式的变化。

    传统关系型数据库(mysql,oracle)数据存储方式主要例如以下:

    图一

           上图是个非常典型的数据储存方式。我把每条记录分成3部分:主键、记录属性、索引字段。我们会对索引字段建立索引,达到二级索引的效果。

    可是随着业务的发展。查询条件越来越复杂,须要很多其它的索引字段,且非常多值都不存在,例如以下图:

    图二

           上图是6个索引字段。实际情况可能是上百个甚至很多其它,而且还须要依据多个索引字段刷选。

    查询性能越来越低,甚至无法满足查询要求。关系型数据里的局限也開始显现。于是非常多人開始接触NoSQL。

           列族数据库非常强大。非常多人就想把数据从mysql迁到hbase,存储的方式还是跟图一或者图二一样,主键为rowkey。其它各个字段的数据。存储一个列族下的不同列。

    可是想对索引字段查询就没有办法,眼下还没有比較好的基于bigtable的二级索引方案,所以无法对索引字段做查询。

          这时候事实上能够转换下思维。能够把数据倒过来,例如以下图:

    图三

            把各个索引字段的值作为rowkey,然后把记录的主键和属性值依照一定顺序存在相应rowkey的value里。上图仅仅有一个列族。是最简单的方式。 Value里的记录能够设置成定长的byte[],多个记录集合通过移位高速查询到。

            可是上面仅仅适合单个索引字段的查询。假设要同一时候对多个索引字段查询,图三的方式须要求取出全部value值,比方查询“浙江”and“手机”。须要取出两个value,再解析出各自的主键求交。假设每条记录的属性有上百个,对性能影响非常大。

           接下来的变化是解决多索引字段查询的问题。我们将主键字段和属性字段分开存储,储存在不同的列族下,多索引查询仅仅须要取出列族1下的数据,再去最小集合的列族2里取得想要的值。储存如图四:

    图四

    为什么是不同列族,而不是一个列族下的两个列?

            列族数据库数据文件是依照列族分的。

    在取数据时,都会把一个列族的全部列数据都取出来。其实我们并不须要把记录明细取出来。所以把这部分数据放到了还有一个列族下。

           接下来是对列族2扩展。列族2储存很多其它的列,用来做各种刷选、计算处理。例如以下图:

    图五

           后来我感觉这玩样越来越像搜索了。。。

    转载于:https://www.cnblogs.com/llguanli/p/6956884.html

    展开全文
  • 形式化定义、关系操作、关系的完整性、常用术语、三级模式结构以及模式之间顺序与转换的应用举例等,来逐步了解它,并对关系型数据库有一个初印象! 文章目录关系数据库中重要且实用的知识点小结前言一、关系型...

    关系数据库中重要且实用的知识点小结

    本篇文章的内容主要是简介关系型数据库的基本概念、关系数据结构&&形式化定义、关系操作、关系的完整性、常用术语、三级模式结构以及模式之间顺序与转换的应用举例等,来逐步了解它,并对关系型数据库有一个初印象!


    前言

    关系性数据库是采用关系模型作为数据组织方式的数据库。
    它将每个具有相同属性的数据独立地存储在一个表中;对于任一表而言,用户可以增删改查表中的数据,而不会影响表中其它的数据。
    关系型数据库对于初学者十分友好,它不仅有简单清晰的概念,在开发中也深受广大用户喜爱。

    一、关系型数据结构&&形式化定义

    • 数据结构——存储结构

    (1)逻辑结构

    • 二维表 <实体与实体之间的联系用表来表示>

    (2)物理结构

    • 有的关系数据库管理系统中一个表对应一个一个操作系统文件。
    • 有的关系数据库管理系统从OS中申请若干个大的文件,自己划分空间,组织表、索引等存储结构,并进行存储管理。
    • 关系模式
    • 刻画出完整性约束条件
    • 是静态的
    • 是稳定的
    • 形式化定义
    • 域(domain)
      一组相同数据类型的值的集合(即二维表中的列)
    • 笛卡尔积
      是域上的一种集合运算
    • 关系(relation)
      (1)候选码(candidate key)
      (2)主码(prime key)

    二、关系操作

    1.基本操作

    • 查询(query)
    • 选择(select)
    • 投影(project)
    • 并(union)
    • 差(except)
    • 笛卡尔积
    • 连接(join)
    • 除(divide)
    • 交(intersection)
    • 插入(insert)
    • 修改(update)
    • 删除(delete)

    2.关系型数据语言

    SQL(Sttuctured Query Language)结构化查询语句,是关系型数据库的标准语句。

    • 主要功能

    1、数据查询(data query)
    2、数据操纵(data manipulation)
    包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。
    3、数据定义(data definition)
    能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。
    4、数据控制(data control)
    主要是对用户的访问权限加以控制,以保证系统的安全性。

    • SQL的特点

    1、综合统一。集数据定义语言、数据操纵语言、数据控制语言的功能于一体;综合统一;独立完成数据库生命周期中的全部活动。
    2、高度非过程化。提高了数据的独立性。
    3、面向集合的操作方式。操作对象是元组的集合。
    4、以同一种语法结构提供多种使用方式。能够嵌入到高级语言中。
    5、语言简洁,易学易用。

    • SQL语言的分类:

    1、数据查询语言(DQL: Data Query Language)
    用以从表中获得数据,确定数据怎样在应用程序给出。
    常用保留字:SELECT、WHERE、ORDER BY、GROUP BY、HAVING

    2、数据操作语言(DML:Data Manipulation Language)
    常用保留字:HAVING、 UPDATE、DELETE、INSERT
    3、数据控制语言(DCL:Data Control Language)
    确定单个用户和用户组对数据库对象的访问。
    常用保留字:GRANT、REVOKE(实现权限控制)

    4、数据定义语言(DDL:Data Definition Language)
    在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
    常用保留字:CREATE 、ALTER、 DROP

    5、事务控制语言(TCL:Transaction Control Language)
    能确保被DML语句影响的表的所有行及时得以更新。
    常用保留字:COMMIT(提交)、SAVEPOINT(保存点)、ROLLBACK(回滚)


    三、关系的完整性

    关系型中关系的完整性主要包括3个方面:实体完整性、参照完整性、用户定义完整性。

    1、实体完整性

    从概念上来说,关系数据库中的每个元组应该是可以区分的,是唯一的。即主码(无论是一个主属性组成还是多个主属性共同组成的)不能为空值。
    实体完整性用最通俗的话来说就是定义主键,并且主键唯一、不为空。

    若要保证设计的关系型数据库具有实体完整性,可如下设计:

    • 表中约束定义
      1、当主键由单属性组成时,有两种定义方式。
    CREATE TABLE m_student{
    Sno CHAR(9) NOT NULL PRIMARY KEY,    /*在 列级 定义主键*/
    Sname CHAR(20) NOT NULL
    }
    /*或者*/
    CREATE TABLE m_student{
    Sno CHAR(9) NOT NULL ,    
    Sname CHAR(20) NOT NULL,
    PRIMARY KEY(Sno)					/*在 表级 定义主键*/
    }
    

    2、当主键是多属性组成时,只能使用标记定义主键。

    --成绩表
    CREATE TABLE m_SC{
    Sno CHAR(9) NOT NULL ,    
    Cno CHAR(9) NOT NULL ,    
    Grade SMALLINT,
    PRIMARY KEY(Sno,Cno)					/*在 表级 定义主键*/
    }
    
    • 自动检查

    1、检查主键值是否唯一。
    2、检查主键的各个属性是否为空。

    2、参照完整性

    从概念上来说,参照的关系中的属性值必须能够在被参照关系找到(与关系相对应的主码保持一致)或者取空值。

    参照完整性用通俗的话来说就是定义表的外键约束。

    参照完整性的定义:

    --学生表
    CREATE TABLE m_student{
    Sno CHAR(9) NOT NULL PRIMARY KEY,    /*在 列级 定义主键*/
    Sname CHAR(20) NOT NULL
    }
    --课程表
    CREATE TABLE m_course{
    Cno CHAR(9) NOT NULL PRIMARY KEY,    /*在 列级 定义主键*/
    Cname CHAR(20) NOT NULL
    }
    --成绩表
    CREATE TABLE m_SC{
    Sno CHAR(9) NOT NULL ,    
    Cno CHAR(9) NOT NULL ,    
    Grade SMALLINT,
    PRIMARY KEY(Sno,Cno)					/*在 表级 定义主键*/
    FOREIGN KEY(Sno) REFERENCES m_student(Sno),		/*在 表级 定义外键*/
    FOREIGN KEY(Cno) REFERENCES m_course(Cno)		/*在 表级 定义外键*/
    }
    

    3、用户定义完整性

    从概念上来说,它反映某一具体应用所涉及的数据必须满足的语义要求。主要是针对某一具体关系数据库的约束条件。


    主要类型包括:

    • 非空约束(NOT NULL)
    • 检查约束(CHECK 短句)
    • 主键约束(PRIMATY KEY)
    • 外键约束(FOREIGN KEY)
    • 唯一约束(UNIQUE)

    四、基础术语&&三级模式

    1、基础概念

    实体: 现实世界中客观存在并可以被区别的事物。比如“一个学生读者”、“一本书”、等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,就像“读者借阅书籍”,表示读者和书籍之间的动作或者联系。在关系数据库中,一个实体可以看作是“一张表”的事物描述。
    属性: 实体所具有的某一特性。由此可见,属性一开始是个逻辑概念,比如说,“学号”是“读者”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。
    元组: 在关系数据库中,“表中的一行”就是一个元组。
    分量: 元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。
    码: 表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,叫候选码,我们从候选码中挑一个能够唯一标识这个的,它就叫主码。
    全码: 如果一个主码包含了所有的属性,这个码就是全码。
    主属性: 一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
    非主属性: 与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。
    外码: 一个属性(或属性组),它不是码,但是它是其它表的主码,这个表在现实世界中与其它的表有一定的联系,那它就是外码。

    图1-1 上述常用术语的清晰说明
    各属性的说明

    2、三级模式结构

    数据库领域公认的标准结构是三级模式结构,它包括外模式、模式和内模式,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。它主要体现在对数据库进行设计的时候模式之间的转换是很重要的。

    DB三级模式
    三级模式关系如下:
    模式层次关系图

    3、三级模式实例应用

    以下通过一个简单的例子来描述。(根据现实世界所定义的实体、属性和联系往往在不同的应用场景是不一样的,下面的例子尽管有不全面的地方,但是作为简单理解概念的例子是足够啦!)

    (1)概念模式:E-R图

    E-R图基础概念:
    1、实体-联系图(Entity Relationship Diagram)
    2、矩形框:表示实体,在框中记入实体名。
    3、菱形框:表示联系,在框中记入联系名。
    4、椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
    5、连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)

    栗子:简单图书管理系统E-R图如下:
    在这里插入图片描述

    (2)逻辑模式:关系模式

    主要是根据E-R图转换为相应的关系模式(遵循第三范式)

    上述E-R图转换为的关系模式如下:
    (外键一般使用波浪线表示,此处加粗显示)

    管理员用户名,密码)
    图书图书IBSN,图书名称,图书类别,图书单价,图书库存)
    ​读者读者编号,读者姓名,读者性别,读者联系方式,读者专业,注册时间,读者类型
    ​读者类型读者类型,借阅最大数量,借阅最大天数)
    ​借阅借阅编号,借阅时间,借阅数量,归还时间,图书编号读者编号

    (3)物理模式:二维表

    此模式主要是根据上述的关系模式转换为表的形式。

    表1-1 学生读者基本信息表

    读者编号 姓名 性别 联系方式 专业 读者类型 注册时间
    20200101 白百 18201011129 语言类 三类 2020/09/01
    20200202 赵一 13909890980 工商管理 二类 2020/09/01
    20200303 章萌 15098909890 软件工程 一类 2020/09/01

    表1-2 图书基本信息表

    图书IBSN 图书名称 图书类别 图书单价 图书库存
    211110001 数据结构 计算机 34.0 19
    211110002 哈利波特 外国小说 89.5 10
    211110003 计算机网络原理 计算机 39.0 12

    表1-3 读者借阅书籍信息表

    借阅编号 借阅时间 借阅数量 归还时间 读者编号 图书编号
    000001 2020/10/01 2 2020/11/12 20200101 211110002
    000002 2021/02/13 1 2021/03/16 20200203 211110001
    000003 2021/04/01 1 20200303 211110003

    表2-1 实体、主键、外键说明表

    实体 主键 外键
    读者 读者编号 读者类型名
    读者类型 读者类型名
    图书 图书IBSN
    读者借阅书籍 借阅编号 读者编号、图书IBSN

    *补充

    关系型数据库的主要特征

    • 1)数据集中控制
    • 2)数据独立
    • 3)数据共享
    • 4)减少数据冗余
    • 5)数据结构化

    今天就先分享到这叭~~~

    展开全文
  • Oracle字符串操作字符串操作CHAR和VARCHAR2类型· 表示字符串数据...· 举例:保存字符串“HELLOWORLD”,工10个英文字母; - CHAR(100):10个字母,补齐90个空格,实际占用100个;浪费空间、节省时间; - VARCH...

    Oracle字符串操作

    字符串操作

    CHAR和VARCHAR2类型

    · 表示字符串数据类型,用来在表中存放字符串信息,比如姓名、职业、地址等;

    · CHAR存放定长字符,即存不满补空格;VARCHAR2存放变长字符,存多少占用多少;

    · 举例:保存字符串“HELLOWORLD”,工10个英文字母;

      - CHAR(100):10个字母,补齐90个空格,实际占用100个;浪费空间、节省时间;

      - VARCHAR2(100):10个字母,实际占用10;浪费时间、节约空间;

    · 按照字符的自然顺序排序;

    CHAR和VARCHAR2的存储编码

    · 默认单位是字节,可指定为字符;

     - CHAR(10),等价于CHAR(10 BYTE);

     - 指定单位为字符:CHAR(10 CHAR),20个字节;

     - VARCHAR2(10),等价于VARCHAR2(10 BYTE);

     - 指定单位为字符:VARCHAR2(10 CHAR),20字节;

    · 每个英文字符占用一个字节,每个中文字符按编码不同占用2-4个字节;

     - ZHS16GBK:2字节;

     - UTF-8:2-4个字节;

    CHAR和VARCHAR2的最大长度

    · CHAR最大取值为2000字节

     - 最多保存2000个英文字符,1000个汉字(GBK);

    · VARCHAR2最大取值为4000字节

     - 最多保存4000个英文字符,2000个汉字(GBK);

    · CHAR可以不指定长度,默认为1,VARCHAR2必须制定长度;

    LONG和CLOB类型

    · LONG:VARCHAR2加长版,存储变长字符串,最多达2GB的字符串数据;

    · LONG有诸多限制:每个表只能有一个LONG类型列;不能作为主键;不能建立索引;不能出现在查询条件中;

    · CLOB:存储定长或变长字符串,最多达4GB的字符串数据;

    · ORACLE建议开发中使用CLOB代替LONG类型;

    常见字符串函数

    LENGHT

    · LENGHT(CHAR):用于返回字符串长度;

    · 如果字符串类型是VARCHAR2,返回字符的实际长度,如果字符类型是CHAR,长度还要包括后面补的空格;

    SELECT ename,LENGHT(ename) from emp;
    UPPER、LOWER和INITCAP

    · 大小写转换函数,用来转换字符的大小写;

    · UPPER(CHAR)用于将字符转换为大写形式;

    · LOWER(CHAR)用于将字符转换为小写形式;

    · INITCAP(CHAR)用于将字符串中每个单词的首字符大写,其他字符小写,单词之间用空格分隔;

    · 如果输入的参数是NULL值,仍然返回NULL值;

    SELECT UPPER('helloworld'),LOWER('helloworld'),INITCAP('helloworld') FROM DUAL;
    TRIM、LTRIM、RTRIM

    · 作用:截取子串

    · 语法形式:

      - TRIM(c2 FROM c1):从c1的前后截取c2;

      - LTRIM(c2 FROM c1):从c1的左边(left)截取c2;

      - RTRIM(c2 FROM c1):从c1的右边(Right)截取c2;

      如果没有c2,就去除空格;

    · TRIM经常用来去掉字符串前后的空格;

    LPAD、RPAD

    · 补位函数,用于在字符串char1的左端或右端用char2补助到n位,char2可重复多次;

      - LPAD(char1,n,char2):左补位函数;

      - RPAD(char1,n,char2):右补位函数;

    --在emp表中使用左补位,将sal用$补齐6位
    SELECT enmae,LPAD(sal,6,'$') as "salary" from emp;
    SUBSTR

    · SUBSTR(char,m[,n]):用于获取字符串的子串,返回char中从m为开始取n个字符;

    · 如果m=0,则从首字符开始,如果m取负数,则从尾部开始;

    · 如果没有设置n,或者n的长度超过了char长度,则取到字符串末尾为止;

    SELECT SUBSTR('Doctor Who travels in TARDIS',8,25) FROM DUAL;

    · 字符串的首位计数是从1开始;

    Oracle数值操作

    数值类型

    NUMBER(P)表示整数

    · 完整语法:NUMBER(precision,scale)

     - 如果没有设置scale,则默认取值0,即NUMBER(P)表示整数;

     - P表示数字的总位数,取值为1-38;

    NUMBER(P,S)表示浮点型

    · NUMBER(precision,scale)

     - precision:NUMBER可以存储的最大数字长度(不包括左右两边的0);

     - scale:在小数点右边的最大数字长度(包括左侧0)

    · 指定了s但是没有指定p,则默认为38,如:列名number(*,s);

    Oracle日期操作

    日期类型

    DATE(date)

    · ORACLE中最常用的日期类型,用来保存日期和时间;

    · DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日;

    · DATE类型在数据库中的存储固定为7个字节,格式为:

      - 第1字节:世纪+100

      - 第2字节:年

      - 第3字节:月

      - 第4字节:日

      - 第5字节:小时+1

      - 第6字节:分+1

      - 第7字节:秒+1

    TIMESTAMP

    · ORACLE常用的日期类型;

    · 与DATE的区别是不仅可以保存日期和时间,还能保存小数秒,最高精度可以到ns(纳秒);

    · 数据库内部用7或者11个字节存储,精度为0,用7字节存储,与DATE功能相同,精度大于0则用11字节存储;

    · 格式为:

     - 第1字节-第7字节:与DATE相同;

     - 第8-11字节:纳秒,采用4字节存储,内部运算类型为整型;

    CREATE TABLR test(
        c1 DATE,
        c2 TIMESTAMP
    );

    日期关键字

    SYSDATE

    · 其本质是一个Oracle的内部函数,返回当前系统时间,精确到秒;

    · 默认显示格式是DD-MON-RR;

    SYSTIMESTAMP

    · 内部函数,返回当前系统日期和时间,精确到毫秒;

    日期传唤函数

    TO_DATE

    · TO_DATE(char[,fmt[,nlsparams]]):将字符串按照定制格式转换为日期类型;

      - char:要转换的字符串;

      - fmt:格式;

      - nlsparams:指定日期语言;

    · 常用日期格式如下:


    日期常用函数

    LAST_DAY

    · LAST_DAY(date):返回日期date所在月的最后一天;

    · 用处:在按照自然月计算某些业务逻辑,或者安排月末周期性活动时很有用处;

    SELECT LAST_DAY(SYSDATE)FROM DUAL;
    ADD_MONTHS

    · ADD_MONTHS(date i):返回日期date加上i个月之后的日期;

     - 参数i可以是任何数字,大部分时候取正值整数;

     - 如果i是小数,将会被截取整数后再参与运算;

     - 如果i是负数,则获取的是减去i个月后的日期值;

    --计算资源入职20周年纪念日
    SELECT ename,ADD_MONTHS(hiredate,20*12)as '20周年' from emp;
    MONTH_BETWEEN

    · MONTH_BETWEEN(date1,date2):计算date1和date2两个日期之间间隔了多少个月;

    · 实际运算是date1-date2,如果date2时间比date1晚,会得到负值;

    · 除非两个日期间隔是整数月,否则会得到带小数位的结果,比如计算2009年9月1日到2009年10月10日之间隔多少月,会得到1.29个月

    NEXT_DAY

    · NEXT_DATE(date,char):返回date日期数据的下一个周几,周几是由参数char来决定的;

    · 在中文环境下,直接使用“星期三”这种形式,英文环境下,需要使用“WEDNESDAY”这中英文周几;为了避免麻烦,可以直接用数字1-7表示周日-周六

    · NEXT_DAY不是明天;

    LEAST(least)、GREATEST(greatest)

    · GREATEST(expr1[,expr2[,expr3]]...)

    · LEAST(expr1[,expr2[,expr3]]...)

    · 也被称作比较函数,可以有多个参数,返回结果是参数列表中最大或最小的值;

    · 参数类型必须一致;

    · 在比较之前,在参数列表中第二个以后的参数会被隐含的转换为第一个参数的数据类型,所以如果可以转换,则继续比较,如果不能转换将会报错;

    EXTRACT(extract)

    · EXTRACT(date FROM datetime):从参数datetime中提取参数date指定的数据,比如提取年、月、日

    空值操作

    NULL含义

    · 数据库里的重要概念:NULL,即空值;

    · 有时表中的某些字段值,数据未知或暂时不存在,取值NULL;

    · 任何数据类型均可取值NULL;

    NULL的操作

    插入NULL
    CREATE TABLE student(id NUMBER(4),NAME CHAR(20),gender CHAR(1))
    --正常插入
    INSERT INTO student VALUES(1000,'张三','F');
    --显示插入NULL值
    INSERT INTO student VALUES(1001,'李四',NULL);
    --隐式插入NULL值
    INSERT INTO student(id,name) VALUES(1001,'王五');
    更新成NULL值
    UPDATE student SET gender = NULL;

    · 注意这种更新只能在此列没有非空约束的情况下可操作;

    · 如果某列有非空约束,则无法更新为NULL值,上述语句会报错;

    NULL条件查询

    · NULL不等于任何值

    --注意是IS不是=号
    SELECT * FROM student WHERE gender IS NULL;
    非空约束

    · 非空(NOT NULL)约束用于确认字段值不为空;

    · 默认情况下,任何列都允许有空值,但系统的业务逻辑可能会要求某些列不能去空值;

    · 当某个字段被设置了非空约束条件,这个字段中必须存在有效值。即:当执行插入数据的操作时,必须提供这个列的数据,当执行更新操作时,不能给这个列设置为NULL;

    空值函数

    NVL

    · NVL(expr1,expr2):将NULL转变为非NULL的值

     - 如果expr1为NULL,则取值expr2,expr2是实际值;

     - expr1和expr2可以是任何数据类型,但两个参数的数据类型必须是一直的;

    NVL2

    · NVL2(expr1,expr2,expr3):和NVL函数功能,都是将NULL转变为实际值;

    · NVL2用来判断expr1是否为NULL,如果不是NULL,返回expr2,如果是NULL,返回expr3;类似三目运算;

    展开全文
  • 关系型数据库的第一范式要求: 所有字段都是不可分割的 举例来说,客户数据表中包含客户名和地址,地址由城市和街道组成。应用经常需要分别访问城市或街道字段。 数据表customers(name,city, street)...
  • 但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。本文以hbase举例讲述数据模式的变化。 传统关系型数据库(mysql,oracle)数据存储方式主要如下: 图一 上图是个很典型的数据...
  • 但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。本文以hbase举例讲述数据模式的变化。 传统关系型数据库(mysql,oracle)数据存储方式主要如下: 图一  上图是个很典型...
  • 但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。本文以hbase举例讲述数据模式的变化。 传统关系型数据库(mysql,oracle)数据存储方式主要如下: 图一 上图是
  • 但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。本文以hbase举例讲述数据模式的变化。 传统关系型数据库(mysql,oracle)数据存储方式主要如下: [img]...
  • 应用解释如下: 1、如需有条件地从表中选取、删除、更新数据时,使用Where; 2、In只作为Where条件子句下的一个运算符,除了In之外还有Between、Like、=、&gt;、&gt;=、&lt;、&lt;=等运算符。 ...
  • memcached http://www.cnblogs.com/wupeiqi/articles/5132791.html   redis ... Redis参考手册 ...redis应用举例: 实时监控在线用户人数以及哪些用户在线: setbit的使用:进行二进制位...
  • MySQL数据库介绍

    2020-12-23 09:01:15
    数据库的基本概念一.数据二.表三.数据库四.数据库管理系统五. 数据库系统六.主流的数据库介绍1.SQL Server (微软公司产品)2.Oracle (甲骨文公司...关系型数据库应用举例八.非关系型数据库1、非关系数据库也被称作NoSQL
  • 浅谈Mysql数据库

    2020-12-23 16:40:25
    浅谈Mysql数据库数据库的基本概念数据(Data)表数据库数据库管理系统(DBMS)数据库系统数据库系统发展史第一代数据库第二代数据库第三代数据库当今主流数据库介绍关系数据库关系数据库应用关系型数据库应用举例非关系...
  • 文章目录一、数据库系统发展史当今主流数据库介绍数据库的基本概念二、数据库存储类型:1,关系型数据库关系型数据库应用举例:非关系数据库产品:2,非关系型数据库三、数据库的基本操作命令:SQL语句概述SQL分类 ...
  • 一、数据库的基本概念1.1 数据1.2 表1.3 数据库1.3.1 数据库的作用与类型二、数据库系统发展2.1 第一代数据库2.2 第二代数据库2.3 第三代数据库三、主流的数据库介绍四、数据库存储类型4.1 关系型数据库4.1.1 关系型...
  • MySQL

    2021-04-06 19:53:51
    Mysql数据库的基本概念数据库定义数据表数据库数据库管理系统(DBMS)数据库...关系型数据库应用举例非关系数据库介绍MySQL数据库介绍特点编译安装MySQL准备工作MySQL数据库管理查看数据库结构查看当前服务器中的数据库...
  •  1.1 使用Redis的Hash类型去保存关系型数据库的User表  1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid value:json 数据 2、利用Redis的Set来保存满足一类条件的User用户的id...
  • 数据库基础

    2018-10-23 09:15:30
    导读:数据库中常用到增删改查,具体的应用一些小结,以MySQL为例来说明。 数据库基础 数据库的管理是计算机的重要应用,数据的管理技术经历了这几...在关系型数据库中,由若干个数据表组成,每个数据表都有很多个...
  • 数据库基本概念

    2020-12-22 23:17:39
    文章目录一、数据库的基本概念1.1 数据1.2 表1.3 数据库1.4 数据库管理系统(DBMS)1.5 数据库系统二、数据库系统发展史2.1 第一代数据库2.2 第二...应用举例五、非关系型数据库介绍六、mysql数据库介绍6.1 mysql商业

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

关系型数据库应用举例