的结构化查询语言是现代数据库体系结构的基本构建块之一。SQL定义了用于在所有主要平台上创建和操作关系数据库的方法。乍一看,这门语言似乎令人生畏和复杂,但它并没有那么难。
关于SQL.
SQL的正确发音是数据库社区中的一个有争议的问题。在其SQL标准中,美国国家标准研究所宣布官方发音是“es队列el”。但是,许多数据库专业人士已经抓住了俚语发音“续集”。与发音一样GIF,没有正确的答案。
SQL有多种形式。Oracle数据库使用其专有的PL/SQL。Microsoft SQL Server使用了Transact-SQL。所有的变化都基于行业标准ANSI SQL。
本介绍使用适用于任何现代关系数据库系统的符合ansi的SQL命令。
DDL和DML.
SQL命令可以分为两种主要的子语言。数据定义语言包含用于创建和销毁数据库和数据库对象的命令。使用DDL定义数据库结构后,数据库管理员和用户可以使用数据操作语言插入、检索和修改其中包含的数据。
SQL支持称为第三种类型的语法数据控制语言。DCL管理对数据库内对象的安全访问。例如,一个DCL脚本授予或撤消特定用户帐户读取或写入数据库一个或多个已定义区域内的表的权限。在大多数托管多用户环境中,数据库管理员通常执行DCL脚本。
数据定义语言命令
数据定义语言用于创建和销毁数据库和数据库对象。这些命令主要由数据库管理员在数据库项目的设置和删除阶段使用。DDL围绕四个主要命令-创造,用,改变, 和下降。
创造
的创造命令在平台上建立数据库、表或查询。例如,该命令:
创建数据库的员工;
创建一个名为员工在你的数据库管理系统。创建数据库之后,下一步是创建包含数据的表。另一种变体创造命令完成此目的。命令:
CREATE TABLE personal_info (first_name char(20) not null, last_name char(20) not null, employee_id int not null);
建立一个标题为个人信息在当前数据库中。在这个例子中,表包含三个属性:first_name,姓, 和employee_id以及一些额外的信息。
用
的用命令指定主数据库。例如,如果你目前在销售数据库中工作,并且想发出一些影响员工数据库的命令,在它们之前使用以下SQL命令:
使用员工;
在发出操作数据的SQL命令之前,请仔细检查正在工作的数据库。
改变,更改
在数据库中创建了一个表后,通过该表修改其定义改变命令,该命令更改表的结构,而不删除和重新创建表。看看下面的命令:
ALTER TABLE Personal_info添加薪水金钱;
这个例子向personal_info表添加了一个新属性—雇员的薪水。的钱参数指定员工的工资使用美元和美分格式存储。最后,空值关键词告诉数据库这个字段不包含任何给定员工的值是可以的。
下降
数据定义语言的最终命令,下降,从我们的DBMS中删除整个数据库对象。例如,要永久删除我们创建的personal_info表,可以使用以下命令:
删除表Personal_info;
类似地,下面的命令将用于删除整个员工数据库:
删除数据库员工;
请谨慎使用此命令。的下降命令从数据库中删除整个数据结构。如果要删除个别记录,请使用删除数据操作语言的命令。
数据操作语言命令
数据操作语言用于检索、插入和修改数据库信息。这些DML命令提供了在例程基础上在数据库中进行交互的典型框架。
插入
的插命令将记录添加到现有表。从上一节返回personal_info示例,想象我们的人力资源部门需要将新员工添加到其数据库中。使用类似于此的命令:
插入personal_info
值(“巴特”、“辛普森”,12345年,45000美元);
注意,为记录指定了4个值。这些按照定义的顺序对应于表属性:first_name,姓,employee_id和工资。
选择
的选择command是SQL中最常用的命令。它从操作数据库中检索特定的信息。看几个例子,同样使用来自员工数据库的personal_info表。
下面显示的命令检索personal_info表中包含的所有信息。星号在SQL中是通配符。
选择 *
从personal_info;
或者,限制通过指定从数据库中检索的属性什么被选中。例如,人力资源部门可能需要本公司所有员工的姓氏清单。以下SQL命令只能检索该信息:
选择last_name
从personal_info;
的在哪里子句将检索到的记录限制为满足指定条件的记录。首席执行官可能有兴趣查看所有高薪员工的个人记录。下面的命令检索工资值大于$50,000的记录的personal_info中包含的所有数据:
选择 *
从personal_info
薪水> 50000美元;
更新
的更新命令修改表中包含的信息,可以批量修改,也可以单独修改。假设公司每年给所有员工增加3%的生活费。下面的SQL命令将这个bump应用到存储在数据库中的所有员工:
更新personal_info
设定工资=薪水* 1.03;
当新员工巴特·辛普森表现出超出职责范围的表现时,管理层希望以5000美元的加薪来表彰他的卓越成就。WHERE条款将巴特单独挑出来:
更新personal_info
设定工资=工资+ 5000
WHERE employee_id = 12345;
删除
最后,让我们看看删除命令。您会发现这个命令的语法与其他DML命令相似。DELETE命令,带有在哪里子句,从表中删除一条记录:
删除从personal_info
WHERE employee_id = 12345;
DML也支持聚合字段。在一个选择语句,数学运算符喜欢总和和数汇总查询中的数据。例如,查询:
Select count(*) from personal_info;
计数表中的记录数。
数据库连接
一个加入语句将多个表中的数据组合起来,以有效地处理大量数据。这些语句才是数据库真正强大的所在。
探索使用基本的使用加入操作来组合来自两个表的数据,继续使用personal_info表的示例,并向混合表中添加一个额外的表。假设您有一个名为disciplinary_action这是用下面的语句创建的:
CREATE TABLE subjinary_action (action_id int not null, employee_id int not null, comments char(500));
该表包含公司员工的纪律处分结果。除了员工编号外,它不包含任何关于员工的信息。
假设您已被任务创建一个列出针对所有员工的纪律行动,薪水超过40,000美元。在这种情况下,使用连接操作是简单的。使用以下命令检索此信息:
选择personal_info。first_name,个人信息。last_name、disciplinary_action.comments
FROM personal_info INNER JOIN discipline ary_action ON personal_info。employee_id = disciplinary_action.employee_id
哪里personal_info.salary> 40000;
连接的类型
加入有几种方式。在SQL语句中,第一个表(通常称为表一个或者左表)加入第二个表(通常被称为表B或者正确的表)以定位意识的方式。因此,如果在加入语句中更改表的顺序,则操作结果将不同。主要连接类型包括:
- 内连接:只有匹配的记录上条件匹配两个表中的相同记录。
- 外连接:只匹配来自两个表的记录排除结果确定在上条件。
- 正确的连接:匹配表B中的所有记录加上表A中匹配的记录上条件。
- 左连接:匹配表A中的所有记录和表B中匹配的记录上条件。
- 交叉连接:匹配所有记录,就好像表是相同的。这个过程会产生一种叫做笛卡尔积。交叉连接通常是不受欢迎的,因为它们分别匹配表A的每一行和表B的每一行。因此,如果表A提供了5条记录,表B提供了9条记录,那么交叉连接查询将提供45行结果。