日期:2013-06-13  浏览次数:20549 次

 且不说你能否正在从事编程方面的任务或者不打算学习SQL,可理想上几乎每一位开发者最终都会遭遇它。你多半还用不着担任创建和维持某个数据库,但你怎样着也该知道以下的一些有关的SQL知识。 
    我为那些感兴味的开发者或者能从数据库操作中得益的读者撰写了这篇关于基本SQL语法的概述性文章。本文次要讨论基本的数据操作查询,后续的文章还会继续讨论如何修正数据库本身以及更高级的查询概念。

SQL数据库是怎样回事?
  
SQL(结构化查询言语)就是担任与ANSI维护的数据库交互的标准。最新的版本是SQL-99,还有一个新标准SQL-200n尚处于制定过程中。大多数的数据库都至少恪守ANSI-92标准的部分子集。不过,目前对最新标准的无效性还存在一些争论。专无数据库制造商依据这些标准开发本人的产品,同时制定出本人特有的数据库存储操作新概念。几乎各种不同的数据库都包含了本人特有的语法集合,只是通常很类似ANSI标准。在大多数情况下,虽然有一些数据库实例基于特定的扩展语法会因数据库的不同而产生不同的结果,但总的说来,这些新加的语法不过是对原有标准的扩充。如果数据库操作并没有得到你希望的结果,那么你不妨事先读一读数据库制造商提供的产品说明。

假如到目前为止你头回遭遇SQL言语,那么你怎样也得先理解一些基本的SQL概念。我尽量把这些基本知识阐述得简明扼要,如果你对那些数据库术语还能忍耐,你尽可跳到下一节,此外你还可以把本人的问题提交给以下的讨论区。

笼统地说,“SQL数据库”其实就是关系型数据库管理系统(RDMS)通俗的叫法。对某些系统来说,“数据库”也指一组数据表、数据以及互相区分但结构类似的配置信息。在这种情况下,每一SQL数据库的安装都可能由若干数据库组成。在有些系统上,这种数据库则指的是表空间。

数据表是一种包含多行数据的数据库结构,这种数据库结构由命名的列组成。通常数据表结构为包含关系信息,同一数据库或表空间以内可以创建若干数据表。

表内的列保存某一品种型的数据而且应依据其保存数据的内容得以命名。例如,被称为“LastName”的列就应该在每一行包含姓氏条目。正是这一前提的存在才能让关系数据库查询前往分歧的结果。

字段(field)指的是某一行某一列对应的数据(或保存数据的地方)。另外,数据集合(data set)则指的是多行多列的数据,而且数据集合通常说明你的数据库或数据表内的全部数据。结果集合(result set)就是从数据库查询前往的数据;它能够描述从单一字段到数据库内全部数据这一范围内的全部信息。

数据库查询就是发送给数据库的SQL指令,这些指令向数据库请求某种施加在数据集合或数据库上的功用。

如今我们就来看看基本的数据库查询,这些查询次要涉及到对数据库内数据的操作。在本文中,所有的例子都采用了标准SQL言语,而且这些基本功用可以转换为使用在几乎各种环境下。

数据查询类型

SQL言语中的数据查询分为4种基本类型:

SELECT:这条语句要求数据库前往指定结果的数据集合;你可以用这一语句检索数据库中保存的信息。 
INSERT:这条语句用来给数据表添加新一行数据。 
DELETE:该语句从你的数据库中删除若干行数据。 
UPDATE:该语句修正数据库内的现无数据。 
以上的这些语句都有各种各样的限定词和函数供你用来定义有关的数据集合,同时控制查询前往的结果集合。SELECT语句的选项最多。有许多种组合SELECT的查询选项,例如JOIN和UNION等。不过就我们目前来说,本文次要还是关注基本用途。

用SELECT语句检索保存的信息
为了获得数据库中保存的信息就必须采用SELECT语句。其基本功用限制在针对单一数据表操作,当然,其他范围的结构也是有的。为了前往特定列所对应的所无数据行,你可以使用以下语句:

SELECT column1, column2 FROM table_name;

另外,使用通配符“*”可以从表中选出所有的列:

SELECT * FROM table_name;

你要情愿本人编码分析以上前往的结果当然也没问题,不过你完全可以采用方便的WHERE子句限制前往的结果集合,该子句可以让你为选择数据定义某些条件。以下查询就会前往“column1”数值等于3的所以数据行:
SELECT * FROM table_name WHERE column1 = 3;

除了“=”(等于)条件之外你还可以用到下列条件运算符:

表A
 
= 等于
 
<> 不等于
 
> 大于
 
< 小于
 
>= 大于或等于
 
<= 小于或等于
 

SQL 条件语句

另外,你还可以联合WHERE语句使用BETWEEN、LIKE等比较运算符以及AND和OR这类逻辑运算符。留意,OR语句是包含性的的。以下有一个例子组合了以上这些概念:

SELECT * FROM table_name WHERE ((Age < 18) AND (LastName BETWEEN ‘Anderson’ AND ‘Miller’)) OR Company LIKE ‘%School%’;

用自然言语来说,这条选择语句的含义是这样的:从数据表中选出年龄小于18岁而且姓氏在“Anderson”和“MIller”之间的或者其公司名称类中有“School”字样的数据行。

用INSERT语句加入新数据
使用INSERT语句可以创建新的数据行。如果你希望在某一行的某个字段中赋值则要用到UPDATE语句。

插入语句的语法如下:
INSERT INTO table_name (column1, column2, column3)
VALUES (‘data1’, ‘data2’, ‘data3’);

如果你想按照表内现有列的同一顺序插入所有的值,那么你不必指定列名,当然,从可读性考虑最好不要这样做。另外,如果你列出列名则不必要按照它们在数据库中出现的顺序包括它们,只需你列出的值与它们逐一对应即可。有些列你并没无为其输入新的信息所以你自然没有必要列出它们来。

一旦数据库中有了数据要修正起来也与此很类似。

UPDATE语句和WHERE子句
UPDATE用来修正现有的值或行里的空字段,因此它必须在婚配现有的数据集合同时提供可接受的值。除非你真地想要修正所无数据行上的值,否则你必须使用WHERE子句。
UPDATE table_name SET column1 = ‘data1’, column2 = ‘data2’
      WHERE column3 = ‘data3’;

你可以采用WHERE子句随意婚配任何一列,正在修正的一列都可以。这样会有助于你把某一特定的值修正为另一个值:

UPDATE table_name SET FirstName = ‘Shelley’
WHERE FirstName = ‘Shelly’ AND LastName = ‘Doll’;


小心DELETE语句
DELETE语句会从数据库的数据表中删除整行。如果你仅仅想删除单一的字段则应该使用UPDATE语句把它修正为代表使用程序中的NULL的其他空值。一定要小心使用带WHERE子句的DELETE语句,否则你可能会遭遇清空全部数据表的风险。
DELETE FROM table_name WHERE column1 = ‘data1’;

一旦你数据库中删除