DSP

结构化查询语言(SQL)原理

2019-07-13 13:02发布

第一部分:介绍
  
  结构化查询语言(SQL)是现代数据库体系结构的基本构成部分之一。SQL定义了在大多数平台上建立和操作关系数据库的方法。乍看这种语言很可怕,很复杂,但它真的不是那么糟。现在你将会知道它的原理,你会向往它,用它来操作数据库的。
  
  这周,我们SQL系列的第一篇文章会介绍SQL的基本概念,我们会快速的看看数据库的创建和修改命令。在整篇文章,请记住我们的意图:我们会了解SQL的大概――不是掌握那些单个的命令。我们会提供一些例子来说明这个意图和解释它的原理,但是读完这篇文章后如果你还不会写自己的SQL命令请不要灰心。我们将在以后几个星期会详细介绍那些主要命令的。
  
  随便说说,SQL的正确发音在数据库交流中是有争论的。对于SQL标准,美国标准协会认为官方发音是“es queue el.”。然而,许多数据库专家用行话“sequel”。这看你自己的选择。
  
  SQL有好几种版本。Oracle 数据库定义它的PL/SQL。Microsoft SQL Server 定义它的Transact-SQL。然而,所有这些版本都是基于工业标准的ANSI SQL。在该指南,我们坚持用适用于任何现代关系数据库系统的基于ANSI标准的SQL命令
  
  SQL命令可以分成两大子系统语言。数据定义语言(DDL)包含那写用用于建立和删除数据库以及数据库实体的命令。用DDL语言定义了数据库结构后,数据库管理者和用户就可以利用数据操作语言来插入、得到和修改数据内容。在本文章的下两个部分,我们将更详细地探讨DDL和DML。在以后的文章中我们将会对特殊的SQL命令做更深入的探讨。
  
  现在让我们看看数据定义语言。
  
  
  
  第二部分:数据定义语言
  
  数据定义语言(DDL)是用来定义和删除数据库以及数据库实体的。这些命令主要是被数据库管理者用来建立和删除数据库实体的。让我们来看看四种基本DDL命令的结构和用法。
  
  CREATE
  
  在计算机上安装一个数据库管理系统以便你建立和管理许多独立的数据库。比如,你要维护一个销售部门的消费者库和人力资源部的职员数据库。用CREATE命令就能在你的平台上建立这些数据库。例如下面的命令:
  
  CREATE DATABASE employees
  
  在你的数据库管理系统上建立一个叫“employees”的空库。建立数据库后,下一步你就建一些包含这些数据的表。(如果这个没有意义,你可以看看关于Microsoft Access原理的文章来得到数据库和表的总的看法)。CREATE的另一个参数可用于这个目的。看:
  
  CREATE TABLE personal_info
  
  (first_name char(20) not null, last_name char(20) not null, employee_id int not null)
  
  在当前的数据库中建一个叫“personal_info”的表。在我们的例子中,表包含三个属性:first_name,last_name 和employee_id。不要担心此命令所包含的其它信息――我们将在以后的文章中有所介绍。
  
  USE
  
  USE命令让你能在你的数据库管理系统中指定要操作的数据库。比如,我们当前使用的是sales数据库,而我们要发出一些操作employees数据库的命令,我们就的先执行以下的命令:
  
  USE employees
  
  在执行命令和操作数据库前,你要有意识地确定你要操作的数据库,这是很重要的。
  
  ALTER
  
  一旦你在数据库中建立了一个表,你也许想要修改它。ALTER命令能让你改变数据库的结构而不用删除它之后在重建。看看下面的命令:
  
  ALTER TABLE personal_info
  
  ADD salary money null
  
  这个例子给personal_info表添加了一列新的属性――employee's salary。“money”指定的格式使职员的薪水用美元和美分的格式存放。最后,为空(NULL)则告诉数据库对任何职员次列可以为空值。
  
  DROP
  
  数据定义语言的最后一个命令,DROP,允许我们从数据库管理系统中移去整个数据库实体。比如,如果你想永远的移去你建立了的personal_info表,我们就的用下面的命令:
  
  DROP TABLE personal_info
  
  同样的,下面的命令将用来移去整个employee数据库:
  
  DROP DATABASE employees
  
  请小心地使用这个命令!记住DROP命令会删除整个的数据库。如果你想删掉某个记录,用数据管理语言的DELETE命令。
  
  那只是数据定义语言的一小部分。在本文的下一部分,我们将看看数据操作语言怎样被用来操作数据库中的信息内容。请继续!
  
  
  
  第三部分:数据操作语言
  
  数据操作语言(DML)用来得到、插入和修改数据库信息的。用户在常规的数据库操作中使用这些命令。让我们来大概地了解一下基本的DML命令:
  
  INSERT
  
  在SQL中INSERT命令被用来在表中添加一些记录。回到上面的personal_info例子,假设人力资源部要往库中添加一个新的employee记录。他们会用到类似于下面的命令:
  
  INSERT INTO personal_info
  
  values('bart','simpson',12345,$45000)
  
  请注意,在记录中指定了四个值。这些对应表中定义的属性:first_name,last_name,employee_id,and salary。
  
  SELECT
  
  SELECT命令是SQL最常用的命令。它允许数据库使用者从一个数据库中得到他们想要的信息。让我们看点例子,继续用employees库中的personal_info表。
  
  下面的命令得到personal_info表中的所有信息。注意,星号在SQL中是通配符。下面的意思是:“从personal_info表中取所有信息”。
  
  SELECT *
  
  FROM personal_info
  
  作为选择,用户想限定从数据库中得到的数据列。比如,人力资源部想列出公司中所有职员的名字。下面的SQL命令就能得到这些信息:
  
  SELECT last_name
  
  FROM personal_info
  
  最后,WHERE子句用来限定得到的记录,使其合乎要求。CEO也许会想得到所有高薪的职员的信息。下面的命令将从personal_info表得到薪水高于50,000美元的记录:
  
  SELECT *
  
  FROM personal_info
  
  WHERE salary > $50000
  
  UPDATE
  
  UPDATE命令用来更新表的内容,无论是成批的还是单个的记录。每年公司给每个职员加30%的生活津贴。下面的命令用来快速地使所有的职员的记录实现这个目的:
  
  UPDATE personal_info
  
  SET salary = salary * 1.03
  
  另一方面,我们一个新的职员art Simpson超额完成工作。管理者想嘉奖他5,000美元。用WHERE子句就能单个地给Bart添加薪水:
  
  UPDATE personal_info
  
  SET salary = salary + $5000
  
  WHERE employee_id = 12345
  
  DELETE
  
  最后,我们来看看DELETE命令。你会发现它的语法类似于其它的DML命令。不幸的是,最新的公司收入报告比预想的还差,可怜的Bart被解雇了。用带WHERE的DELETE命令从personal_info表中删去他的记录。
  
  DELETE FROM personal_info
  
  WHERE employee_id = 12345