SQL语言外文翻译资料

 2022-02-27 21:37:42

英语原文共 9 页,剩余内容已隐藏,支付完成后下载完整资料


SQL语言

2.1. 介绍

本章节概述了如何使用SQL语言执行简单的操作。本教程只是为您做一个介绍,并不是关于SQL的完整教程。有关SQL的书籍很多,包括理解这个新的SQL和SQL标准指南。您应该能意识到,PostgreSQL的一些语言特征是对标准的扩展。

在下面的示例中,我们假设您已经创建了一个名为mydb的数据库(如前一章所述),并且已经能够启动这个数据库。

本手册中的示例也可以在目录 src/tutorial/ 中的PostgreSQL源代码发行版中找到(PostgreSQL的二进制发行版可能无法编译这些文件。)要使用这些文件,首先要更改到该目录下并运行:

$ cd ..../src/tutorial

$ make

这创建了脚本并编译了包含用户所定义的函数和类型的C文件。然后,要开始教程,做如下操作:

$ cd ..../tutorial

$ psql -s mydb

. . .

mydb=gt; \i basics.sql

\i命令从指定文件读取命令。Psql中的 -s 选项使您处于单步执行模式,这会在将每个语句发送至服务器之前暂停。这个部分使用的命令都在basics.sql文件中。

2.2. 概念

PostgreSQL是一个关系型数据库管理系统(RDBMS)。这表示它是一个用于管理储存在关系之中的数据的系统。关系本质上是对表格的数学术语。将数据存储在表格中的概念在今天是如此的常见以至于从本质上看似显而易见,但还是有许多其他方法组织数据库。更现代的发展是面向对象的数据库。

每个表格都是指定的行集合。给定表的每一行都有相同的一组指定列,并且每一列都具有特定的数据类型。尽管列在每一行中都有固定的顺序,但重要的是要记住SQL并不以任何方式保证在表格中行的顺序(即便它们可以被明确地分类以便显示)。

表格在数据库中被分类,并且由单个PostgreSQL服务器实例管理的数据库集合构成数据库群。

2.3. 创建一个新表格

您可以通过指定表名和所有列名及其数据类型来创建一个新的表格:

CREATE TABLE weather (

city varchar(80),

temp_lo int, ——low temperature

temp_hi int, ——high temperature

prcp real, ——precipitation

);

您可以用换行符将这些输入psql中。psql会识别命令直到分号为止。

空白(即space,tabs和换行)可以在SQL命令中自由使用。这意味着您可以输入与上述命令对齐方式不同的命令,或者甚至可以在一行输入所有命令。两个破折号(“--”)引入注释。直到行末,它们后面的任何内容都会被忽略。SQL对关键字和标识符不区分大小写,除非当标识符被双引号括起来以保留大小写(上述操作没有这么做)。

varchar(80)指定了一种数据类型,它可以存储长度不超过80的任意字符串。int是常规的整数类型。real是一种用于存储单精度浮点数的类型。date应该就不用解释了。(是的,日期类型的列同样被命名为date,这可能很方便,也可能让你觉得困惑——看你的选择。)

PostgreSQL支持标准的SQL类型int,smallint,real,double precision。

char(N),varchar(N),date,time,timestamp和interval,以及其他一般功效的类型和一套丰富的几何类型。PostgreSQL可以使用任意数量的用户定义数据类型进行自定义定制。因此,类型名在语法中并不是关键词,除非在SQL标准中需要支持的特殊情况下。

第二个例子将展示存储城市及其相关地理位置:

CREATE TABLE cities (

Name varchar(80), location point

);

最后,需要提及的是,如果您不再需要一个表,或者想要以不同的方式重新创建它,您可以使用如下命令删除它:

DROP TABLE tablename;

2.4. 用行填充表

INSERT语句用于用行填充表:

INSERT INTO weather VALUES (lsquo;San Franciscorsquo;, 46, 50, 0.25, lsquo;1994-11-27rsquo;);

注意,所有数据类型使用相当明显的输入格式。非简单数值的常量通常必须使用单引号(lsquo;)括起来,如本例中所示。date类型实际上在它所接受的范围内非常灵活,但在本教程中,我们坚持这里显示的明确的格式。

point类型需要一个坐标对作为输入,如下所示:

INSERT INTO cities VALUES (lsquo;San Franciscorsquo;, lsquo;(-194.0, 53.0)rsquo;);

到目前为止使用的语法要求您记住列的顺序。另一种语法允许您明确地列出列。

INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)

VALUES (lsquo;San Franciscorsquo;, 43, 57, 0.0, lsquo;1994-11-29rsquo;);

如果你愿意,你可以按不同的顺序列出这些列,或者甚至可以省略一些列,例如,如果降水量未知:

INSERT INTO weather (date, city, temp_hi, temp_lo)

VALUES ( lsquo;1994-11-29rsquo;, lsquo;Haywardrsquo;, 54, 37);

许多开发人员认为明确地列出列在风格上优于不明确地依赖于顺序。

请输入上面显示的所有命令,以便在接下来的部分中您可以处理一些数据。

您还可以使用COPY从纯文本文件加载大量数据。这通常更快一点,因为COPY命令针对这个应用程序进行了最优化,而允许的灵活性比INSERT更小。例如:

COPY weather FROM lsquo;/home/user/weather.txtrsquo;;

其中源文件的文件名必须在运行后端进程的机器上可用,而不是在客户机上,因为后端进程是直接读取文件的。您可以在COPY中阅读关于COPY命令的更多信息。

2.5. 查询一个表

要从表中检索数据,需要查询表。使用SQL中SELECT语句就是来执行此操作的。语句分为选择列表(列出要返回值的列的部分)、表格列表(列出要从中检索数据的表的部分)和可选限定(列举任何限制条件的部分)。例如,要检索表weather的所有行,输入:

SELECT * FROM weather;

这里*是“所有列”的缩写。[1]所以如此会得到同样的结果:

SELECT city, temp_lo, temp_hi, prcp, date FROM weather;

输出的应该是:

City | temp_lo | temp_hi | prcp | date

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

San Francisco | 46 | 50 | 0.25 | 1994-11-27

San Francisco | 43 | 57 | 0 | 1994-11-29

Hayward | 37 | 54 | | 1994-11-29

(3 rows)

您可以在select列表中编写表达式,而不仅仅是简单的列引用。例如,你可以这样做:

SELECT city, (temp_hi temp_lo)/2 AS temp_avg, date FROM weather;

这会给出:

city |temp_avg | date

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --

San Francisco | 48 | 1994-11-27

San Francisco | 50 |1994-11-29

Hayward | 45 | 1994-11-29

(3 rows)

注意,如何使用AS子句被用于重新标记输出列。(AS子句是可选的。)

可以通过添加WHERE子句来“限定”查询,该子句指定需要哪些行。WHERE子句包含一个布尔(真值)表达式,只返回布尔表达式为true的行。通常的布尔运算符(AND, OR, AND NOT)在限定符中是允许出现的。例如,以下检索旧金山雨天的天气:

SELECT * FROM weather

WHERE city = lsquo;San Franciscorsquo; AND prcp gt; 0.0;

结果:

city | temp_lo | temp_hi | prcp | date

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

San Francisco | 46 | 50 | 0.25 | 1994-11-27

(1 row)

你可以要求查询结果返回排序顺序:

SELECT * FROM weather

ORDER BY city;

city | temp_lo | temp_hi | prcp | date

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Hayward | 37 | 54 | | 1994-11-29

San Francisco | 43 | 57 | 0 | 1994-11-29

San Francisco | 46 | 50 | 0.25 | 1994-11-27

在本例中,并没有完全指定排序顺序,因此您可能会以其他一种顺序获得旧金山的行。但如果你这样做,你将总会得到上面显示的结果:

SELECT * FROM weather

ORDER BY city, temp_lo;

您可以请求从查询结果中删除重复的行:

SELECT DISTINCT city

FROM weather;

city

- - - - - - - - - -

Hayward

San Francisco

(2 rows)

同样的,这里的结果行顺序可能有所不同。您可以通过组合使用DISTINCT和ORDER BY来确保结果一致:[2]

SELECT DISTINCT city

FROM weather

ORDER BY city;

2.6. 表连接

到目前为止,我们的查询一次只访问一个表。查询可以做到一次访问多个表,或者以多行的表数据同时被处理的方式访问同一个表。同时访问相同或不同表的多行数据的查询称为连接查询。例如,假设您希望列出所有天气记录并一起列出相关城市的位置。为此,我们需要将weather表中每一行的city列与cities表中所有行的name列进行比较,并选择这些值匹配的行对。

注意:这只是一个概念的模型。连接通常以一种比实际地比较每一对可能的行数据还要 更有效的方式执行,但这对用户是不可见的。

这可以通过以下查询来完成:

SELECT *

FROM weather, cities

WHERE city = name;

city | temp_lo | temp_hi | prcp | date | name | location

- - -

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[435655],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。