SQL实战新手入门:获取数据-SELECT语句(1)
获取数据 SELECT语句( )
现在MYLIBRARY表中已经有了数据 可以对该表执行查询 以精确地查找所具有的图书 SELECT语句用于从表中获取数据 要使用SELECT语句获取数据 只需要告诉它表名和列名
SELECT all_my_books FROM myLibrary;
尽管该查询可以产生一个图书信息的列表 但它还不是特别有用 该图书信息是一大堆的数据 将其存储在一个关系型数据库中的唯一好处就是可以轻而易举地重新获取或打印这些信息 如果要搜索数据呢?要查找是否有某一本特定的图书 必须获取所有的记录 然后人工地逐一遍历每一条记录!这并不是我们期望从一个复杂的RDBMS软件获得的结果
需要采用某种办法来标识存储在表中的记录的特殊关键词 例如图书名称或ISBN号 对于该问题 一个标准的程序设计方式的答案就是对记录进行解析 将记录切分为多个片段 并在一个循环中遍历查找特定的目标词汇 对于表中的每一条记录重复执行这一过程 如果没有特定于厂商的过程化扩展 SQL无法执行任何类似的操作 这种方式违背了SQL语言是一种声明性语言的本质 并要求深刻地理解数据结构 下面让我们再看一看输入到MYLIBRARY表中的第一条记录
SQL Bible by Alex Kriegel Boris M Trukhnov Paperback: pages
Publisher: Wiley; edition (April ) Language: English
ISBN :
如何才能将记录切分为不同的信息片段呢?每一个片段之间的标记是什么呢?如何区分图书的名称和作者呢?如果使用空格符作为分隔符 那么SQL和Bible将被切分为不同的片段 但在逻辑上SQL和Bible属于同一个信息片段 如何才能知道by是一个介词 而不是作者姓名中的一部分?解决的办法来自SQL结构化的本性 毕竟SQL是一种结构化的查询语言 要解决这一问题 需要更多的列来存储不同片段的信息 将一个笨重的字符串拆分为多个语义上有着密切联系的数据片段就可以独立地标识每一个数据片段 因为每一个片段都成为一个单独的列 回到CREATE TABLE语句(首先删除现有的表)
DROP TABLE myLibrary;
根据上面的讨论创建一个新表
CREATE TABLE myLibrary
(
title VARCHAR( )
author VARCHAR( )
author VARCHAR( )
publisher VARCHAR( )
pages INTEGER
publish_date VARCHAR( )
i *** n VARCHAR( )
book_language VARCHAR( )
)
在新表的结构中 将原来的单个列拆分为 个列 另外还可以添加第 个列 将作者的名和姓拆分到两个单独的列中(这就是将在第 章中讨论的数据建模过程) 就目前而言 除了将PAGES列的数据类型设置为INTEGER类型以表示图书包含多少页之外 对于其他所有的列都使用了相同的数据类型 并缩短了每一个列中所能包含的字符数量 本章后面将进一步解释将PAGES列设置为INTEGER类型的原因 读者或许还会考虑到修改PUBLISH_DATE列的数据类型 通常情况下 日期数据的行为与字符数据不同 DBMS提供了专门用于日期和时间的数据类型
现在 无须将所有的数据都保存在同一个桶中 对于各个列的数据类型可以有更多的选择 可以将不同的列定义为不同的数据类型 当插入或更新各个列中的数据(本章后面将对此进行介绍)时 建议不要将数据类型搞混
本章后面还将重新审视数据类型 第 章也将详细地介绍数据类型
读者可能已经注意到 在新的MYLIBRARY表中有两个作者列 这是为了适应一本图书有两个作者的情形 这也提出了另外一个问题 当一本图书只有一个作者或者一本图书有 个作者时 该如何处理呢?该问题将在第 章和第 章的数据建模小节中进行深入的探讨 这里 读者只需要注意对于未使用的列将自动使用默认值进行填充 如果读者发现经常需要在表中添加新的列 那么最好花时间阅读一下关于数据库规范化方面的内容(请参见第 章)
接下来将向新表中插入数据 这一步骤与之前介绍的插入操作完全相同 唯一的差别在于VALUES列表变得更长 因为原来只包含一个列 而现在包含了 个列 在VALUES列表中 除了PAGES列的值之外 所提供的所有其他数据都必须用单引号括起来 引号表明了这些数据是字符数据 没有引号则表示数值数据
INSERT INTO myLibrary VALUES (
SQL Bible
Alex Kriegel
Boris M Trukhnov
Wiley
April
English )
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16484