什么是数据库?
大家都有过下面如许的经历吧?
- 收到曾经为本身诊治过的牙医寄来的明信片,上面写着“距上次检查已有半年,请您再来做个牙齿健康检查”。
- 在生日的前一个月,收到曾入住过的旅馆或宾馆发来的“生日当月入住优惠”的邮件大概明信片。
- 在网上商城购物之后,收到内附“保举商品列表”的邮件。
这可能是由于牙医、旅馆或商城的经营者把握了顾客上一次的就诊日期、生日和购买汗青等信息,并且拥有能够从大量汇总信息中快速获取所需信息(比如你的住址或爱好)的设备(计算机体系)。如果利用人工完成同样的工作,真不知道要多长时间呢。
另外,现在所有地域的图书馆都配备了计算机,实现了图书的自动查询。利用该体系,可以通过检索书名或出版年份快速查找出希望借阅的图书的所在位置,以及是否已经借出等信息。正是由于拥有了可以保存图书名称、出版年份以及保管位置和外借情况等信息,并且可以按需查询的设备,才使这一切成为可能。
像如许将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB)。将姓名、住址、电话号码、邮箱地址、爱好和家庭构成等数据保存到数据库中,就可以随时敏捷获取想要的信息了。
数据库管理体系(DBMS)
用来管理数据库的计算机体系称为数据库管理体系(Database Management System,DBMS)。为什么要利用专用体系(DBMS)来管理数据呢?
我们通过计算机管理数据的时候,通常利用文本文件大概Excel 那样的电子制表软件就可以完成了,非常简单。但也有不敷。下面就举几个有代表性的例子。
保存在已毗连网络的计算机中的文件,可以通过共享设定实现多个用户在线阅读或编辑。但是,当某个用户打开该文件的时候,其他用户就无法进行编辑了。如果是网上商城的话,当某个用户购买商品的时候,其他用户就无法购买了。
要想刹时从几十万大概上百万的数据中获取想要的数据,必须把数据保存为适当的格式,但是文本文件和Excel 工作表等无法提供相应的格式。
通过编写计算机程序(以下简称程序)可以实现数据读取和编辑自动化,但这必须以了解数据布局为条件,还需具备肯定的计算机编程技术。
当文件被误删、硬盘出现故障等导致无法读取的时候,可能会造成重要数据丢失,同时数据还可能被他人容易读取或窃用。
DBMS 可以克服这些不敷,实现多个用户同时安全简单地操作大量数据(图1-2)。这也是我们肯定要利用DBMS 的缘故原由。
图1-2 DBMS能够实现多个用户同时安全简单地操作大量数据
数据库管理体系(DBMS)的种类
DBMS 重要通过数据的保存格式(数据库的种类)来进行分类,现阶段重要有以下5 种类型。
1.层次数据库(Hierarchical Database,HDB)
最古老的数据库之一,它把数据通过层次布局(树形布局)的方式表现出来。层次数据库曾经是数据库的主流,但随着关系数据库的出现和遍及,现在已经很少利用了。
2.关系数据库(Relational Database,RDB)
关系数据库是现在应用最广泛的数据库。关系数据库在1969 年诞生,可谓汗青悠久。和Excel 工作表一样,它也采用由行和列组成的二维表来管理数据,以是简单易懂(表1)。同时,它还利用专门的SQL(Structured Query Language,布局化查询语言)对数据进行操作。
表1 关系数据库中的数据
这种类型的DBMS 称为关系数据库管理体系(Relational Database Management System,RDBMS)。比较具有代表性的RDBMS 有如下5 种。
- Oracle Database:甲骨文公司的RDBMS(通常简称为Oracle)
- SQL Server :微软公司的RDBMS
- DB2:IBM 公司的RDBMS
- PostgreSQL:开源的RDBMS
- MySQL :开源的RDBMS
3.面向对象数据库(Object Oriented Database,OODB)
编程语言当中有一种被称为面向对象语言的语言。把数据以及对数据的操作集合起来以对象为单位进行管理,因此得名。面向对象数据库就是用来保存这些对象的数据库。
4.XML数据库(XML Database,XMLDB)
最近几年,XMLB 作为在网络上进行交互的数据的情势逐渐遍及起来。XML 数据库可以对XML 情势的大量数据进行高速处理。
5.键值存储体系(Key-Value Store,KVS)
这是一种单纯用来保存查询所利用的主键(Key)和值(Value)的组合的数据库。具有编程语言知识的读者可以把它想象成关联数组大概散列(hash)。近年来,随着键值存储体系被应用到Google 等需要对大量数据进行超高速查询的Web 服务当中,它正逐渐为人们所关注。
下面向大家介绍利用SQL 语言的数据库管理体系,也就是关系数据库管理体系(RDBMS)的操作方法。如无特殊说明,下面所提到的数据库以及DBMS 都是指RDBMS。
数据库的布局
RDBMS 的常见体系布局
利用RDBMS 时,最常见的体系布局就是客户端/ 服务器类型(C/S类型)这种布局(图1)。
图1 利用RDBMS时的体系布局
服务器指的是用来接收其他程序发出的哀求,并对该哀求进行相应处理的程序(软件),大概是安装了此类程序的设备(计算机)。在计算机上持续执行处理,并等待接收下一条哀求。RDBMS 也是一种服务器,它能够从保存在硬盘上的数据库中读取数据并返回,还可以把数据变更为指定内容。
与之相对,向服务器发出哀求的程序(软件),大概是安装了该程序的设备(计算机)称为客户端。访问由RDBMS 管理的数据库,进行数据读写的程序称为RDBMS 客户端。RDBMS 客户端将想要获取什么样的数据,大概想对哪些数据进行何种变更等信息通过SQL 语句发送给RDBMS 服务器。RDBMS 根据该语句的内容返回所哀求的数据,大概对存储在数据库中的数据进行更新。
客户端就如同委托方,而服务器就像是受托方。由于两者关系类似受托方执行委托方发出的指令,故而得名。
如许就可以利用SQL 语句来实现关系数据库的读写操作了。
另外,RDBMS 既可以和其客户端安装在同一台计算机上,也可以分别安装在不同的计算机上。如许一来,不仅可以通过网络使二者相互关联,还可以实现多个客户端访问同一个RDBMS(图2)。
图2 通过网络可以实现多个客户端访问同一个数据库
客户端没有必要利用同样的程序,只要能将SQL 发送给RDBMS,就可以操作数据库了。并且,多个客户端还可以同时对同一个数据库进行读写操作。
另外,RDBMS 除了需要同时接收多个客户端的哀求之外,还需要操作存有大量数据的数据库,因此通常都会安装在比客户端性能更良好的计算机上。操作数据量特别巨大的数据库时,还可以将多台计算机组合利用。
虽然RDBMS 的体系布局多种多样,但是从客户端发来的SQL 语句基本上都是一样的。
什么是SQL
SQL是为操作数据库而开发的语言。
它原本是为了提高数据库查询效率而开发的语言,但是现在不仅可以进行数据查询,就连数据的插入和删除等操作也基本上都可以通过SQL 来完成了。
国际尺度化组织(ISO)为SQL 制定了相应的尺度,以此为基准的SQL 称为尺度SQL。
以前,完全基于尺度SQL 的RDBMS 很少,通常需要根据不同的RDBMS来编写特定的SQL 语句。如许一来,就会造成能够在Oracle 中利用的SQL 语句却无法在SQL Server 中利用,反之亦然。迩来,对尺度SQL 的支持取得了一些进展,因此希望准备学习SQL 的人们能够从现在开始就牢记尺度SQL 的书写方式。
学会尺度SQL 就可以在各种RDBMS 中书写SQL 语句了。
SQL 语句及其种类
SQL 用关键字、表名、列名等组合而成的一条语句(SQL 语句)来形貌操作的内容。关键字是指那些含义或利用方法已事先定义好的英语单词,存在包含“对表进行查询”大概“参考这个表”等各种意义的关键字。
根据对RDBMS 赋予的指令种类的不同,SQL 语句可以分为以下三类。
● DDL
DDL(Data Definition Language,数据定义语言) 用来创建大概删除存储数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令。
- CREATE: 创建数据库和表等对象
- DROP: 删除数据库和表等对象
- ALTER: 修改数据库和表等对象的布局
●DML
DML(Data Manipulation Language,数据利用语言) 用来查询大概变更表中的记录。DML 包含以下几种指令。
- SELECT:查询表中的数据
- INSERT:向表中插入新数据
- UPDATE:更新表中的数据
- DELETE:删除表中的数据
●DCL
DCL(Data Control Language,数据控制语言) 用来确认大概取消对数据库中的数据进行的变更。除此之外,还可以对RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令。
- COMMIT: 确认对数据库中的数据进行的变更
- ROLLBACK: 取消对数据库中的数据进行的变更
- GRANT: 赋予用户操作权限
- REVOKE: 取消用户的操作权限
SQL 根据功能不同可以分为三类,其中利用最多的是DML。
SQL 的基本书写规则
书写SQL 语句时必须要遵守一些规则。这些规则都非常简单,接下来我们来逐一认识一下。
■ SQL 语句要以分号(;)结尾
一条SQL 语句可以形貌一个数据库操作。在RDBMS 当中,SQL 语句也是逐条执行的。
众所周知,我们在句子的句尾加注标点表示结束,中文句子以句号(。)结尾,英文以点号(.)结尾,而SQL 语句则利用分号(;)结尾。
■ SQL 语句不区分大小写
SQL 不区分关键字的大小写 。比方,不管写成SELECT 还是select,解释都是一样的。表名和列名也是如此。
虽然可以根据个人喜好选择大写还是小写(或大小写稠浊),但为了理解起来更加容易,可以用以下规则来书写SQL 语句。
但是插入到表中的数据是区分大小写的。比方,在操作过程中,数据Computer、COMPUTER 或computer,三者是不一样的。
■ 常数的书写方式是固定的
SQL 语句经常需要直接书写字符串、日期大概数字。比方,书写向表中插入字符串、日期大概数字等数据的SQL 语句。
在SQL 语句中直接书写的字符串、日期大概数字等称为常数。常数的书写方式如下所示。
SQL 语句中含有字符串的时候,需要像'abc'如许,利用单引号(')将字符串括起来,用来标识这是一个字符串。
SQL 语句中含有日期的时候,同样需要利用单引号将其括起来。日期的格式有许多种('26 Jan 2010' 大概'10/01/26' 等),也可以利用'2010-01-26' 这种' 年- 月- 日' 的格式。
在SQL 语句中书写数字的时候,不需要利用任何符号标识,直接写成1000 如许的数字即可。
■ 单词需要用半角空格大概换行来分隔
SQL 语句的单词之间需利用半角空格或换行符来进行分隔。如下这种未加分隔的语句会发生错误,无法正常执行。
○ CREATE TABLE Product
× CREATETABLE Product
× CREATE TABLEProduct
但是不能利用全角空格作为单词的分隔符,否则会发生错误,出现无法预期的效果。
表的内容的创建
在我们学习针对表的查询,以及数据变更等SQL 语句之前。我们要先创建学习这些SQL 语句所需的数据库和表。
表2 举例用的商品表
该表是某家小商店贩卖商品的一览表。商品的数量不多,不过我们可以把它想象成大量数据中的一部分(毕竟这只是为了学习SQL 而创建的表)。像0003 号商品的登记日期以及0006 号商品的进货单价如许的空白内容,我们可以认为是由于店主疏忽而忘记输入了。
我们可以看到表2 由6 列8 行所组成。最上面一行是数据的项目名,真正的数据是从第2 行开始的。
备忘
接下来,我们会逐步学习创建数据库和表所利用的SQL 语句的书写方式。在这之前,请先准备好学习环境(PostgreSQL)。
数据库的创建(CREATE DATABASE语句)
前面提到,在创建表之前,肯定要先创建用来存储表的数据库。运行CREATE DATABASE 语句就可以在RDBMS 上创建数据库了。CREATEDATABASE 语句的语法如下所示。
这里我们仅指定了利用该语法所需的最少项目,实际开发数据库时还需要指定各种其他项目。
语法1-1 创建数据库的CREATE DATABASE语句
CREATE DATABASE ;这里我们将数据库定名为shop,然后执行代码清单1-1 中的SQL语句。
代码清单1-1 创建数据库shop的CREATE DATABASE语句
CREATE DATABASE shop;此外,数据库名称、表名以及列名都要利用半角字符(英文字母、数字、符号),具体内容随后会进行介绍。
表的创建(CREATE TABLE语句)
创建好数据库之后,接下来我们利用CREATE TABLE 语句在其中创建表。CREATE TABLE 语句的语法如下所示
语法1-2 创建表的CREATE TABLE语句
CREATE TABLE ( , , , ,..., ,……);该语法清楚地形貌了我们要创建一个包含< 列名1>、< 列名2>、 ……的名称为< 表名> 的表,非常容易理解。每一列的数据类型(后述)是必须要指定的,还要为需要的列设置约束(后述)。约束可以在定义列的时候进行设置,也可以在语句的末尾进行设置。
在数据库中创建表1-2 中的商品表(Product 表)的CREATE TABLE 语句,如代码清单1-2 所示。
代码清单1-2 创建Product表的CREATE TABLE语句
CREATE TABLE Product(product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,sale_price INTEGER ,purchase_price INTEGER ,regist_date DATE ,PRIMARY KEY (product_id));定名规则
我们只能利用半角英文字母、数字、下划线(_)作为数据库、表和列的名称 。比方,不能将product_id 写成product-id,由于尺度SQL 并不答应利用连字符作为列名等名称。$、#、? 如许的符号同样不能作为名称利用。
尽管有些RDBMS 答应利用上述符号作为列的名称,但这也仅限于在该RDBMS 中利用,并不能包管在其他RDBMS 中也能利用。虽然大家可能会觉得限制有点太多了,但还是请遵守规则利用半角英文字母、数字和下划线(_)吧。
此外, 名称必须以半角英文字母开头 。以符号开头的名称并不多见,但有时会碰到类似1product 大概2009_sales 如许以数字开头的名称。虽然可以理解,但这在尺度SQL 中是被禁止的。请大家利用product1 大概sales_2009 如许符合规则的名称。
末了还有一点,在同一个数据库中不能创建两个雷同名称的表,在同一个表中也不能创建两个名称雷同的列。如果出现如许的情况,RDBMS会返回错误信息。
接下来我们根据上述规则,利用代码清单1-2 中的CREATE TABLE 语句来创建表2 中的商品表。表名为Product,表中的列名如表3 所示。
表3 商品表和Product表列名的对应关系
数据类型的指定
Product 表所包含的列,定义在CREATE TABLE Product( )的括号中。列名右边的INTEGER 大概CHAR 等关键字,是用来声明该列的数据类型的,所有的列都必须指定数据类型。
数据类型表示数据的种类,包括数字型、字符型和日期型等。每一列都不能存储与该列数据类型不符的数据。声明为整数型的列中不能存储'abc' 如许的字符串,声明为字符型的列中也不能存储1234 如许的数字。
数据类型的种类许多,各个RDBMS 之间也存在很大差别。根据业务需要实际创建数据库时,肯定要根据不同的RDBMS 选用最恰当的数据类型。在学习SQL 的时候,利用最基本的数据类型就足够了。下面我们就来介绍四种基本的数据类型。
● INTEGER型
用来指定存储整数的列的数据类型(数字型),不能存储小数。
● CHAR型
CHAR 是CHARACTER(字符)的缩写,是用来指定存储字符串的列的数据类型(字符型)。可以像CHAR(10) 大概CHAR(200) 如许,在括号中指定该列可以存储的字符串的长度(最大长度)。字符串超出最大长度的部分是无法输入到该列中的。RDBMS 不同,长度单位也不一样,既存在利用字符个数的情况,也存在利用字节长度的情况。
字节是计算机内部的数据单位。一个字符通常需要1到3个字节来表示(根据字符的种类和表现方式有所不同)。
字符串以定长字符串的情势存储在被指定为CHAR 型的列中。所谓定长字符串,就是当列中存储的字符串长度达不到最大长度的时候,利用半角空格进行补足。比方,我们向CHAR(8) 类型的列中输入'abc'的时候,会以'abc '(abc 后面有5 个半角空格)的情势保存起来。
另外,虽然之前我们说过SQL 不区分英文字母的大小写,但是表中存储的字符串却是区分大小写的。也就是说,'ABC' 和'abc' 代表了两个不同意义的字符串。
● VARCHAR型
同CHAR 类型一样,VARCHAR 型也是用来指定存储字符串的列的数据类型(字符串类型),也可以通过括号内的数字来指定字符串的长度(最大长度)。但该类型的列是以 可变长字符串 的情势来保存字符串的。定长字符串在字符数未达到最大长度时会用半角空格补足,但可变长字符串不同,即使字符数未达到最大长度,也不会用半角空格补足。比方,我们向VARCHAR(8) 类型的列中输入字符串'abc'的时候,保存的就是字符串'abc'。
该类型的列中存储的字符串也和CHAR 类型一样,是区分大小写的。
特定的SQL
Oracle中利用VARCHAR2型(Oracle中也有VARCHAR这种数据类型,但并不保举利用)。
● DATE型
用来指定存储日期(年月日)的列的数据类型(日期型)。
特定的SQL
除了年月日之外,Oracle中利用的DATE型还包含时分秒。
约束的设置
约束是除了数据类型之外,对列中存储的数据进行限制大概追加条件的功能。Product 表中设置了两种约束。
Product 表的product_id 列、product_name 列和product_type 列的定义如下所示。
product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,数据类型的右侧设置了NOT NULL 约束。NULL 是代表空白(无记录)的关键字。在NULL 之前加上了表示否定的NOT,就是给该列设置了不能输入空白,也就是必须输入数据的约束(如果什么都不输入就会堕落)。
NULL这个词是无或空的意思,NULL是利用SQL时的常见关键字,请大家牢记。
如许一来,Product 表的product_id(商品编号)列、product_name(商品名称)列和product_type(商品种类)列就都成了必须输入的项目。
另外,在创建Product 表的CREATE TABLE 语句的后面,还有下面如许的记述。
PRIMARY KEY (product_id)这是用来给product_id 列设置主键约束的。所谓键,就是在指定特定数据时利用的列的组合。键种类多样,主键(primary key)就是可以特定一行数据的列B。也就是说,如果把product_id 列指定为主键,就可以通过该列取出特定的商品数据了。
反之,如果向product_id 列中输入了重复数据,就无法取出唯一的特定数据了(由于无法确定唯一的一行数据)。如许就可以为某一列设置主键约束了。
表的删除(DROP TABLE语句)
此前介绍的都是关于Product 表的内容的创建,下面我们就来介绍一下删除表的方法。删除表的SQL 语句非常简单, 只需要一行DROP TABLE 语句即可。
语法1-3 删除表时利用的DROP TABLE语句
DROP TABLE ;如果想要删除Product 表,只需要像代码清单1-3 那样书写SQL语句即可。
代码清单1-3 删除Product表
DROP TABLE Product;DROP 在英语中是“丢掉”“舍弃”的意思。需要特别注意的是,删除的表是无法恢复的。即使是被误删的表,也无法恢复,只能重新创建,然后重新插入数据。
其实许多RDBMS 都预留了恢复的功能,但还是请大家认为是无法恢复的。
如果不小心删除了重要的业务表,那就太悲剧了。特别是存储了大量数据的表,恢复起来费时费力,请大家务必注意!
表定义的更新(ALTER TABLE语句)
有时好不容易把表创建出来之后才发现少了几列,其实这时无需把表删除再重新创建,只需利用变更表定义的ALTER TABLE 语句就可以了。ALTER 在英语中就是“改变”的意思。下面就给大家介绍该语句通常的利用方法。
首先是添加列时利用的语法。
语法1-4 添加列的ALTER TABLE语句
ALTER TABLE ADD COLUMN ;特定的SQL
Oracle 和SQL Server 中不用写COLUMN。
ALTER TABLE ADD ;另外,在Oracle 中同时添加多列的时候,可以像下面如许利用括号。
ALTER TABLE ADD (,,……);比方,我们可以利用代码清单1-4 中的语句在Product 表中添加如许一列,product_name_pinyin(商品名称(拼音)),该列可以存储100 位的可变长字符串。
代码清单1-4 添加一列可以存储100位的可变长字符串的product_name_pinyin列
DB2 PostgreSQL MySQLALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);OracleALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100));SQL ServerALTER TABLE Product ADD product_name_pinyin VARCHAR(100);反之,删除表中某列利用的语法如下所示。
语法1-5 删除列的ALTER TABLE语句
ALTER TABLE DROP COLUMN ;特定的SQL
Oracle 中不用写COLUMN。
ALTER TABLE DROP ;另外,在Oracle 中同时删除多列的时候,可以像下面如许利用括号来实现。
ALTER TABLE DROP (,,……);比方,我们可以利用代码清单1-5 中的语句来删除之前添加的product_name_pinyin 列。
代码清单1-5 删除product_name_pinyin列
SQL Server DB2 PostgreSQL MySQLALTER TABLE Product DROP COLUMN product_name_pinyin;OracleALTER TABLE Product DROP (product_name_pinyin);ALTER TABLE 语句和DROP TABLE 语句一样,执行之后无法恢复。误添的列可以通过ALTER TABLE 语句删除,大概将表全部删除之后重新再创建。
向Product表中插入数据
末了让我们来尝试一下向表中插入数据。向Product 表中插入数据的SQL 语句如代码清单1-6 所示。
代码清单1-6 向Product表中插入数据的SQL语句
SQL Server PostgreSQL-- DML :插入数据BEGIN TRANSACTION;—————————①INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服',1000, 500, '2009-09-20');INSERT INTO Product VALUES ('0002', '打孔器', '办公用品',500, 320, '2009-09-11');INSERT INTO Product VALUES ('0003', '运动T恤', '衣服',4000, 2800, NULL);INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具',3000, 2800, '2009-09-20');INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具',6800, 5000, '2009-01-15');INSERT INTO Product VALUES ('0006', '叉子', '厨房用具',500, NULL, '2009-09-20');INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具',880, 790, '2008-04-28');INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品',100, NULL,'2009-11-11');COMMIT;特定的SQL
DBMS 不同,代码清单1-6中的DML语句也略有不同。
在MySQL 中运行时,需要把①中的BEGIN TRANSACTION;改写成
START TRANSACTION;在Oracle 和DB2中运行时,无需利用①中的BEGIN TRANSACTION;(请予以删除)。
利用插入行的指令语句INSERT,就可以把表1-2 中的数据都插入到表中了。开头的BEGIN TRANSACTION 语句是开始插入行的指令语句,结尾的COMMIT 语句是确定插入行的指令语句。
怎么入门SQL?
近年来,和其他体系范畴一样,数据库范畴也实现了飞速发展,应用范围不断扩大,不光出现了具有新功能的数据库,而且操作的数据量也大幅增长。
估计许多读者今后都会慢慢积累各个范畴、各种规模的体系开发经验(大概可能已经开始从事开发方面的工作了),到那时,所有的体系必定都需要利用数据库。它们利用的数据库,即便不是关系数据库,也肯定是以关系数据库为基础的数据库。从这个意义上看,如果把握了关系数据库和 SQL,就能成为任何体系开发都需要的数据库专家了。
下面分享一本口碑不错的SQL入门书,它介绍了时下最流行的数据库——关系数据库,这也是理解其他数据库的基础。在体系范畴,通常所讲的数据库指的就是关系数据库,其重要性可见一斑。
- 日本着名数据库工程师写给初学者的实用指南!
- 107张图表+209段代码+88个法则,让菜鸟完美进阶!
- 基于尺度SQL编写,明示各RDBMS(PostgreSQL/DB2/MySQL/Oracle/SQL Server)的差别!
本书是编程学习系列的 SQL 和关系数据库篇。该系列注重对初学者编程能力的培养,本书秉承了这一宗旨。本书不仅可以用于自学,也可以作为大学、专科学校和企业新人的培训用书。书中提供了大量的示例程序和详实的操作步调说明,大家可以亲自动手解决具体的问题,切实提高自身的编程能力。
另外,在各章的结尾处还安排了习题来帮助大家复习该章的知识要点,习题的答案和解说收录在附录中。
本文内容节选自《SQL基础教程(第2版)》。 |