《Oracle PL/SQL必知必会》——第1章 了解SQL

本节书摘来自异步社区出版社《Oracle PL/SQL必知必会》一书中的第1章,第1.1节,作者:【美】Ben Forta(本 福达),更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 了解SQL

Oracle PL/SQL必知必会
在本章中,你将学习数据库和SQL的相关知识,它们是学习Oracle和PL/SQL的前提。

1.1 数据库基础

你正在阅读本书的事实表明你需要以某种方式与数据库交互。因此,在深入学习Oracle及其SQL语言的实现(PL/SQL)之前,了解一些关于数据库和数据库技术的基本概念就很重要。

无论知道与否,你事实上一直都在使用数据库。每次从电子邮件或智能手机通讯录中选择一个名字时,就是在使用数据库。当在Internet搜索站点上执行搜索时,也是在使用数据库。当在工作中登录到网络时,将对照数据库验证你的名字和密码。甚至在自动取款机上使用ATM卡时,同样在使用数据库,以进行PIN验证和余额检查。

但是,即使我们一直都在使用数据库,对于数据库到底是什么仍然认识不清。事实的确如此,因为不同的人使用“数据库”一词来指代不同的事物。因此,一个良好的学习起点是:利用一份列表解释最重要的数据库术语。

提示:复习基本概念
 

下面简要概述了一些基本的数据库概念。如果你已经具有一些数据库使用经验,下面的内容将唤醒你的记忆;如果你是新手,那么以下内容将给你提供绝对基础的知识。理解数据库是掌握Oracle的一个重要部分,你可能想要寻找一个关于数据库基本原理的优秀图书,以在需要时复习一下相关的主题。

1.1.1 什么是数据库

人们以多种不同的方式使用数据库(Database)这个术语,但是在我们看来,数据库是指以某种有组织的方式存储的数据集合。理解它的最简单的方式是把数据库想象成一个档案柜。档案柜只是存储数据的物理位置,而不管数据是什么以及它们是怎样组织的。

数据库
 

用于存储有组织的数据的容器(通常是文件或文件集)。
 

警告:滥用导致混淆
 

人们经常使用数据库(database)这个术语来指代他们正在运行的数据库软件。这是不正确的,它是大量混淆之源。数据库软件实际上被称为数据库管理系统(Database Management System,DBMS)。数据库是通过DBMS创建和操作的容器。数据库可能是存储在硬盘驱动器上的文件,但也可能不是。一般而言,这甚至是不重要的,因为你从来不会以任何方式直接访问数据库;你总是使用DBMS,它会为你访问数据库。

1.1.2 表

当在档案柜中存储信息时,不会把信息简单地扔进抽屉里。相反,将在档案柜里创建文件,然后把相关的数据归档在特定的文件中。

在数据库世界里,这个文件称为表(Table)。表是结构化的文件,可以存储特定类型的数据。表可能包含顾客列表、产品目录,或者其他任何信息列表。


 

特定类型数据的结构化列表。
这里的关键是:存储在表中的数据是一种数据类型或者一份列表。你永远不会把顾客列表和订单列表存储在同一个数据库表中。如果这样做,将使往后的检索和访问难以进行。相反,你将创建两个表,每个表用于存储一份列表。

数据库中的每个表都具有一个用于标识它的名称,这个名称总是唯一的,意味着该数据库中没有其他的表可以具有相同的名称。

注意:表名称
 

使表名称成为唯一的实际上是几个内容的组合,包括数据库名称和表名称。这意味着尽管不能在相同的数据库中多次使用相同的表名称,但是肯定可以在不同的数据库中重用表名称。
表具有一些特征和属性,定义了怎样在其中存储数据。它们包括一些信息,比如可能存储什么数据,如何分解它以及如何命名信息等。这个描述表的信息集称为模式(Schema),模式描述了数据库内的特定表和整个数据库以及数据库内的表之间的关系(如果有的话)。

模式
 

关于数据库以及表布局和属性的信息。

{注意:模式还是数据库?} 偶尔也把模式(Schema或Schemata)用作数据库(Database)的同义词。遗憾的是,通常可以从上下文来清晰得知模式要表达的意思,在本书中,模式是指上述的定义。

1.1.3 列和数据类型

表由列组成,列包含表中特定的信息。


 

表中的单个字段。所有的表都由一列或多列组成。
理解列的最佳方式是把数据库表想象成网格,它有点像电子数据表,网格中的每一列都包含特定的信息。例如,在顾客表中,一列包含顾客编号,另一列包含顾客名字,而地址、城市、州和邮政编码都存储在它们各自的列中。

提示:分解数据
 

正确地把数据分解到多个列中极其重要。例如,城市、州和邮政编码应该总是存储在单独的列中。通过分解它们,就有可能按特定的列排序或筛选数据(例如,查找特定州或特定城市的所有顾客)。如果把城市和州结合进一列中,按州进行排序或筛选将极其困难。
数据库中的每一列都具有一种关联的数据类型,它定义了列中可以包含什么类型的数据。例如,如果列将包含数字(也许是订单中的商品数量),那么数据类型将是一种数值数据类型。如果列将包含日期、文本、注释、货币金额等,将使用相应的数据类型来指定它们。

数据类型
 

允许的数据的类型。每个表列都具有一种与之关联的数据类型,用以限制(或允许)在该列中存储特定的数据。
数据类型限制了列可以存储的数据的类型(例如,防止把字母字符输入到数值字段中)。数据类型的使用还有助于正确地排序数据,并且在优化磁盘使用方面起着重要作用。因此,在创建表时要特别注意选择适当的数据类型。

1.1.4 行

表中的数据存储在行中;保存的每条记录都存储在它自己的行中。同样,把表想象成电子数据表样式的网格,网格中的垂直列就是表列,水平行就是表行。

例如,顾客表可能每行存储一位顾客的信息。表中的行数就是其中的记录数。


 

表中的记录。
 

注意:记录或行?
 

你可能听到用户在提及行(Row)时把它们称为数据库记录(Record)。一般而言,可以互换使用这两个术语,但是行是技术上正确的术语。

1.1.5 主键

表中的每一行都应该有某一列(或列集合)唯一地标识它。包含顾客信息的表可能为此使用顾客编号列,而包含订单信息的表则可能使用订单ID。雇员表可能使用雇员ID或雇员社会安全号(Social Security Number)列。

主键
其值唯一地标识表中的每一行的列(或列集合)。
唯一地标识表中的每一行的这个列(或列集合)称为主键(Primary Key)。可以使用主键指代特定的行。如果没有主键,更新或删除表中的特定行将变得极其困难,因为没有方法可以保证受影响的行的安全。

提示:总是要定义主键
尽管主键实际上不是必需的,但是大多数数据库设计者都会确保他们创建的每个表都具有一个主键,以使得将来的数据操作是可能的并且容易管理。
可以把表中的任意列设定为主键,只要它满足以下条件即可:

任意两行都不能具有相同的主键值;
每一行都必须具有一个主键值(主键列可能不允许NULL值)。
提示:主键规则
 

这里列出的规则是由Oracle自身强制执行的。
通常在表中的单独一列上定义主键。但是,这不是必需的,可以把多个列一起用作主键。当使用多个列时,前面列出的规则必须适用于组织主键的所有列,并且所有列的值组合起来必须是唯一的(单独的列不需要具有唯一的值)。

提示:主键的最佳实践
 

除了Oracle强制执行的规则外,还应该遵守多个被普遍接受的最佳实践,包括:

不要更新主键列中的值;
不要重用主键列中的值;
不要使用主键列中可能改变的值(例如,如果使用名字作为主键来标识供应商,当供应商兼并以及更改其名字时,将不得不更改主键)。
另一种重要的键类型是外键,但是将在后面的第15章“连接表”中介绍它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 SQL必知必会(第3版) 基本信息 原书名: Sams Teach Yourself SQL in 10 Minutes, Third Edition 原出版社: Sams 作者: (美)Ben Forta 译者: 钟鸣 刘晓霞 丛书名: 图灵程序设计丛书 数据库 出版社:人民邮电出版社 ISBN:9787115162601 上架时间:2007-6-22 出版日期:2007 年7月 开本:32开 页码:204 版次:3-1 所属分类: 计算机 > 数据库 > SQL语言 编辑推荐   SQL经典畅销书    涵盖所有主流数据库    学习与参考皆宜... 内容简介   sql 是目前使用最为广泛的数据库语言之一。本书没有涉及理论,而是从实践出发,由浅入深地讲解了广大读者所必需的sql 知识,适用于各种主流数据库。实例丰富,便于查阅。本书涉及不同平台上数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,通过本书读者可以系统地学习到sql 的知识和方法。    本书注重实用性,操作性很强,适合于sql 的初学者学习和广大软件开发及管理人员参考。 作译者    作者: (美)Ben Forta Ben Forta是世界知名的技术作家,也是Adobe技术界最为知名的专家之一,目前担任Adobe公司的高级技术推广专家。他具有计算机行业20多年工作经验,多年来撰写了十几本技术图书,其中不少是世界畅销书,已被翻译为十几种文字。除本书外,他撰写的《正则表达式必知必会》也即将由人民邮电出版社出版。读者可以通过他的个人网站http://www.forta.com了解更多信息。 目录 封面 -14 常用操作速查 -13 扉页 -11 版权 -10 版权声明 -9 前言 -8 致谢 -5 目录 -4 第1 了解SQL 1 1.1 数据库基础 1 1.1.1 什么是数据库 2 1.1.2 表 2 1.1.3 列和数据类型 3 1.1.4 行 4 1.1.5 主键 4 1.2 什么是SQL 5 1.3 动手实践 6 1.4 小结 7 第2 检索数据 8 2.1 SELECT语句 8 2.2 检索单个列 9 2.3 检索多个列 10 2.4 检索所有列 11 2.5 小结 12 第3 排序检索数据 13 3.1 排序数据 13 3.2 按多个列排序 15 3.3 按列位置排序 15 3.4 指定排序方向 16 3.5 小结 18 第4 过滤数据 19 4.1 使用WHERE子句 19 4.2 WHERE子句操作符 20 4.2.1 检查单个值 21 4.2.2 不匹配检查 22 4.2.3 范围值检查 22 4.2.4 空值检查 23 4.3 小结 24 第5 高级数据过滤 25 5.1 组合WHERE子句 25 5.1.1 AND操作符 25 5.1.2 OR操作符 26 5.1.3 计算次序 26 5.2 IN操作符 28 5.3 NOT操作符 29 5.4 小结 30 第6 用通配符进行过滤 31 6.1 LIKE操作符 31 6.1.1 百分号(%)通配符 32 6.1.2 下划线(_)通配符 33 6.1.3 方括号([ ])通配符 34 6.2 使用通配符的技巧 36 6.3 小结 36 第7 创建计算字段 37 7.1 计算字段 37 7.2 拼接字段 38 7.3 执行算术计算 42 7.4 小结 43 第8 使用数据处理函数 44 8.1 函数 44 8.2 使用函数 45 8.2.1 文本处理函数 46 8.2.2 日期和时间处理函数 47 8.2.3 数值处理函数 50 8.3 小结 50 第9 汇总数据 51 9.1 聚集函数 51 9.1.1 AVG()函数 52 9.1.2 COUNT()函数 53 9.1.3 MAX()函数 54 9.1.4 MIN()函数 54 9.1.5 SUM()函数 55 9.2 聚集不同值 56 9.3 组合聚集函数 57 9.4 小结 58 第10 分组数据 59 10.1 数据分组 59 10.2 创建分组 59 10.3 过滤分组 61 10.4 分组和排序 63 10.5 SELECT子句顺序 65 10.6 小结 65 第11 使用子查询 66 11.1 子查询 66 11.2 利用子查询进行过滤 66 11.3 作为计算字段使用子查询 69 11.4 小结 71 第12 联结表 72 12.1 联结 72 12.1.1 关系表 72 12.1.2 为什么要使用联结 74 12.2 创建联结 74 12.2.1 WHERE子句的重要性 75 12.2.2 内部联结 77 12.2.3 联结多个表 78 12.3 小结 80 第13 创建高级联结 81 13.1 使用表别名 81 13.2 使用不同类型的联结 82 13.2.1 自联结 82 13.2.2 自然联结 84 13.2.3 外部联结 84 13.3 使用带聚集函数的联结 87 13.4 使用联结和联结条件 88 13.5 小结 88 第14 组合查询 89 14.1 组合查询 89 14.2 创建组合查询 89 14.2.1 使用UNION 90 14.2.2 UNION规则 91 14.2.3 包含或取消重复的行 92 14.2.4 对组合查询结果排序 93 14.3 小结 94 第15 插入数据 95 15.1 数据插入 95 15.1.1 插入完整的行 95 15.1.2 插入部分行 98 15.1.3 插入检索出的数据 99 15.2 从一个表复制到另一个表 100 15.3 小结 101 第16 更新和删除数据 102 16.1 更新数据 102 16.2 删除数据 104 16.3 更新和删除的指导原则 105 16.4 小结 106 第17 创建和操纵表 107 17.1 创建表 107 17.1.1 表创建基础 108 17.1.2 使用NULL值 109 17.1.3 指定默认值 110 17.2 更新表 111 17.3 删除表 113 17.4 重命名表 113 17.5 小结 114 第18 使用视图 115 18.1 视图 115 18.1.1 为什么使用视图 116 18.1.2 视图的规则和限制 117 18.2 创建视图 118 18.2.1 利用视图简化复杂的联结 118 18.2.2 用视图重新格式化检索出的数据 119 18.2.3 用视图过滤不想要的数据 121 18.2.4 使用视图与计算字段 121 18.3 小结 122 第19 使用存储过程 123 19.1 存储过程 123 19.2 为什么要使用存储过程 124 19.3 执行存储过程 125 19.4 创建存储过程 126 19.5 小结 129 第20 管理事务处理 130 20.1 事务处理 130 20.2 控制事务处理 132 20.2.1 使用ROLLBACK 133 20.2.2 使用COMMIT 133 20.2.3 使用保留点 134 20.3 小结 135 第21 使用游标 136 21.1 游标 136 21.2 使用游标 137 21.2.1 创建游标 138 21.2.2 使用游标 138 21.2.3 关闭游标 140 21.3 小结 141 第22 了解高级SQL特性 142 22.1 约束 142 22.1.1 主键 143 22.1.2 外键 144 22.1.3 唯一约束 145 22.1.4 检查约束 146 22.2 索引 147 22.3 触发器 149 22.4 数据库安全 150 22.5 小结 151 附录A 样例表脚本 152 A.1 样例表 152 A.2 获得样例表 155 A.2.1 下载可供使用的Microsoft Access MDB文件 155 A.2.2 下载DBMS SQL脚本 155 附录B 流行的应用系统 157 B.1 使用Aqua Data Studio 157 B.2 使用DB2 158 B.3 使用Macromedia ColdFusion 159 B.4 使用Microsoft Access 159 B.5 使用Microsoft ASP 160 B.6 使用Microsoft ASP.NET 161 B.7 使用Microsoft Query 161 B.8 使用Microsoft SQL Server 162 B.9 使用MySQL 163 B.10 使用Oracle 163 B.11 使用PHP 164 B.12 使用PostgreSQL 164 B.13 使用Query Tool 164 B.14 使用Sybase 165 B.15 配置ODBC数据源 165 附录C SQL语句的语法 167 C.1 ALTER TABLE 167 C.2 COMMIT 167 C.3 CREATE INDEX 168 C.4 CREATE PROCEDURE 168 C.5 CREATE TABLE 168 C.6 CREATE VIEW 168 C.7 DELETE 169 C.8 DROP 169 C.9 INSERT 169 C.10 INSERT SELECT 169 C.11 ROLLBACK 169 C.12 SELECT 170 C.13 UPDATE 170 附录D SQL数据类型 171 D.1 串数据类型 172 D.2 数值数据类型 173 D.3 日期和时间数据类型 174 D.4 二进制数据类型 175 附录E SQL保留字 176 索引 182 前言   SQL是使用最为广泛的数据库语言之一。不管你是应用开发人员、数据库管理人员、Web应用设计人员,还是Microsoft Office用户,掌握良好的SQL知识对于与数据库打交道是很重要的。.   本书可以说是应需而生。我曾经讲授过多年的Web应用开发,学生们经常要求我推荐有关SQL的图书。SQL方面的图书有许多,有的其实很不错,但它们都有一个共同的特点,就是对于大多数读者来说,它们所讲授的内容太多了。大多数书籍讲授的不是SQL本身,而是从数据库设计、规范化到关系数据库理论以及相关管理等所有内容。当然,这些内容都很重要,但并不是大多数仅想学习SQL的读者所感兴趣的。   因此,在找不到合适的书籍推荐给学生的情况下,我把在课堂上给学生讲授的SQL知识汇编成了本书。本书将讲授读者需要了解SQL知识,我们从简单的数据检索入手,然后再介绍一些较为复杂的内容,如联结、子查询、存储过程、游标、触发器以及表约束等。读者将从本书中循序渐进、系统、直接地学到SQL的知识和技巧。   这是本书的第3版,它已经教会了成千上万的读者使用SQL。现在轮到你了,让我们翻到第1,开始学习吧。你将很快编写出世界级的SQL。   读者对象   本书适合以下读者:   SQL新手;   希望快速学会使用SQL;   希望知道如何在应用程序开发中使用SQL;   希望在无人帮助的情况下有效快速地使用SQL。   本书涵盖的DBMS   一般来说,本书中所讲授的SQL可以应用到任何数据库管理系统(DBMS)。但是,因为所有SQL实现并不都是相同的,所以本书介绍的SQL主要适用于以下系统(需要时会给出特定的说明和注释):   IBM DB2;   Microsoft Access;..   Microsoft SQL Server;   MySQL;   Oracle;   PostgreSQL;   Sybase Adaptive Server。   本书中所有数据库SQL脚本例子对于这些DBMS都是适用的。 .  本书约定   本书采用等宽字体表示代码,读者输入的文本与应该出现在屏幕上的文本也以等宽字型给出。如:   It will look like this to mimic the way text looks on your screen.   代码行前的箭头( )表示行中代码太长,该行容纳不下。在 符号后输入的所有字符都应该是前一行的内容。   说明:给出上下文讨论中比较重要的信息。      提示:为某任务给出建议或一种更简单的方法。      注意:提醒可能出现的问题,避免出现事故。      新术语,提供新的基本词汇的清晰定义。   表示读者可以自己输入的代码。   强调某个程序执行时的输出。   告诉读者将对程序代码进行逐行分析。...   
对于oracle技术人员而言,怎么强调掌握pl/sql的重要性都不过分。但是,真正精通pl/sql绝非易事。事实上,在现有的oracle应用程序中充斥着太多质量不佳的pl/sql代码,它们要么没有充分利用oracle特有的功能,要么是在误用或者滥用。这种现象导致了许多对pl/sql本身能力不公正的批评。.    本书由全球oracle技术专家组织oaktable network的多位大师联手编写,是为pl/sql正名的名著。与市面上许多pl/sql图书只是纸上谈兵、局限于语法和功能本身不同,本书从实战出发,讲述如何正确、充分地运用语言特性,除了pl/sql的基本功能之外,也包括数据的高效处理、安全、触发器、高效的调试技术等。作者在讲解每一个特性 时都辅以经过实战检验的示例,更与读者分享了大量多年积累的独家经验。有本书在手,你将学会如何充分发挥pl/sql的巨大潜能,编写出可靠、高效且易于 维护的一流程序。... 作译者   Connor McDonald 世界著名的Oracle技术专家,Oracle认证专家,具有十多年的Oracle系统开发经验,以精深的PL/SQL造诣享誉业界。他的个人网站www.oracledba.co.uk是极具影响的Oracle技术资源。.   Chaim Katz Oracle认证专家,擅长数据库管理和PL/SQL开发,为各种Oracle技术期刊写过大量文。   Christopher Beck Oracle公司资深技术专家,专攻核心数据库技术和Web应用开发。除本书外,他还与Joel R. Kallman和Tom Kyte等人合著了畅销书Beginning Oracle Programming。..   Joel R. Kallman Oracle公司软件开发总监.   David C. Knox 世界著名的Oracle安全专家,Oracle公司SolutioncEngineering集团的高级总监....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值