|
PostgreSQL 7.3 文档
Prev Next
Chapter 2. SQL 语言
Table of Contents
2.1. 介绍
2.2. 概念
2.3. 创建新表
2.4. 向表中添加行
2.5. 查询一个表
2.6. 在表之间连接
2.7. 聚集函数
2.8. 更新
2.9. 删除
2.1. 介绍
本章提供一个如何使用 SQL 执行简单操作的概述. 本教程的目地只是给你一个介绍,并非完整的 SQL 教程.都许多关于 SQL 的书,包括 Understanding the New SQLMelton and Simon, 1993A complete guideJimMeltonAlan R.Simon1-55860-245-31993Morgan Kaufmann1993Morgan Kaufmann Publishers, Inc. 和 A Guide to the SQL StandardDate and Darwen, 1997A user's guide to the standard database language SQLFourth EditionC. J.DateHughDarwen0-201-96426-01997Addison-Wesley1997Addison-Wesley Longman, Inc..而且你还要知道有些 PostgreSQL语言特性是对标准的扩展.
在随后的例子里,我们假设你已经创建了名为 mydb 的数据库,就象在前面的章里面介绍的一样,并且已经启动了 psql.
本手册的例子也可以在PostgreSQL 源代码发布里的目录 src/tutorial/ 中找到. 请参考该目录中的 README 文件获取如何使用 它们的信息.要开始这个教程,按照下面说的进行∶
$ cd ..../src/tutorial
$ psql -s mydb
...
mydb=> \i basics.sql
\i 命令从指定的文件中读取命令. -s 选项把你置于单步模式,它在向服务器发送每个语句之前 暂停.在本节使用的命令都在文件 basics.sql 中.
Prev Home Next
访问数据库 Up 概念
PostgreSQL 7.3 文档
Prev Chapter 2. SQL 语言 Next
2.2. 概念
PostgreSQL 是一种 关系型数据库管理系统 (RDBMS). 这意味着它是一种用于管理那些以关系 形式存储的数据的系统.关系实际上是表的 数学称呼.今天,把数据存储在表里的概念已经快成了固有的常识了, 但是还有其它的一些方法用于组织数据库.在类 Unix 操作系统上的 文件和目录就形成了一种层次数据库的例子.更现代的发展是面向对象的数据库.
每个表都是一个命名的行的集合. 每一行由一组相同的命名 列组成. 而且每一列都有一特定的类型. 虽然每列在每行里的位置是固定的,但一定要记住 SQL 并未 对行在表中的顺序做任何保证(但你可以对它们进行明确的排序进行显示).
表组成数据库,一个由某个 PostgreSQL 服务器管理的数据库集合组成一个数据库集群.
Prev Home Next
SQL 语言 Up 创建新表
PostgreSQL 7.3 文档
Prev Chapter 2. SQL 语言 Next
2.3. 创建新表
你可以通过声明表的名字和所有字段的名字及其类型来创建表∶
CREATE TABLE weather (
city varchar(80),
temp_lo int, -- low temperature
temp_hi int, -- high temperature
prcp real, -- precipitation
date date
);
你可以在 psql 里连换行符一起键入这些东西. psql 可以识别该命令直到分号才结束.
你可以在 SQL 命令中自由使用空白(也就是空格,tab,和换行符). 这就意味着你可以用和上面不同的对齐方式键入命令. 两个划线("--") 引入注释. 任何跟在它后面的东西直到该行的结尾都被忽略. SQL 是对关键字和标识符大小写不敏感的语言,只有在标识符用 双引号引起时才能保留它们的大小写属性(上面没有这么干).
varchar(80) 声明一个可以存储最长 80 个字符的 任意字符串的数据类型.int 是普通的整数类型. real 是一种用于存储单精度浮点数的类型. date 类型应该可以自解释.(没错,类型为 date 的字段名字也是 date. 这么做可能比较方便,也可能容易让人混淆 -- 你自己看啦.)
PostgresSQL 支持通常的 SQL 类型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,还支持其他的通用类型和丰富的几何类型. PostgreSQL 客户化 为定制任意的用户定义的数据类型.因而类型名并不是语法关键字, 除了 SQL92 标准要求支持的特例外.
第二隔例子将保存城市和它们相关的地理位置∶
CREATE TABLE cities (
name varchar(80),
location point
);
类型 point 就是一种 PostgreSQL 特有数据类型的例子.
最后,我们还要提到如果你不再需要某个表,或者你想创建一个不同的 表,那么你可以用下面的命令删除它∶
DROP TABLE tablename;
Prev Home Next
概念 Up 向表中添加行
PostgreSQL 7.3 文档
Prev Chapter 2. SQL 语言 Next
2.4. 向表中添加行
INSERT 用于向表中添加行∶
INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
请注意所有数据类型都使用了相当明了的输入格式. 那些不是简单数字值的常量必需用单引号(')包围, 就象在例子里一样. date 类型实际上对可接收的格式相当灵活, 不过在本教程里,我们应该坚持使用这里显示的格式.
point 类型要求一个座标对作为输入,如下∶
INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
到目前为止使用的语法要求你记住字段的顺序.一个可选的 语法允许你明确地列出字段∶
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
如果你需要,你可以用另外一个顺序列出字段或者是忽略某些字段, 也就是说,以未知的顺序∶
INSERT INTO weather (date, city, temp_hi, temp_lo)
VALUES ('1994-11-29', 'Hayward', 54, 37);
许多开发人员认为明确列出字段要比依赖隐含的顺序是更好的风格.
请输入上面显示的所由命令,这样你在随后的各节中才有可用的数据.
你还可以使用 COPY 从文本文件中装载大量 数据.这么干通常更快,因为 COPY 命令就是为 这类应用优化的,同时还有比 INSERT 少一些的 灵活性.比如∶
COPY weather FROM '/home/user/weather.txt';
这里源文件的文件名必须是后端服务器可访问的, 而不是客户端可访问的,因为后端服务器直接读取文件.你可以在 PostgreSQL 7.3 参考手册 中读到更多有关 COPY 命令的信息.
Prev Home Next
创建新表 Up 查询一个表
PostgreSQL 7.3 文档
Prev Chapter 2. SQL 语言 Next
2.5. 查询一个表
要从一个表中检索数据就是查询这个表. SQL 的 SELECT 就是做这个用途的. 该语句分为选择列表(列出要返回的字段部分),表列表(列出从中检索数据 的表的部分),以及可选的条件(声明任意限制的部分).比如,要检索 表 weather 的所有行,键入∶
SELECT * 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 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 子句是如何给输出字段 重新命名的.(它是可选的.)
允许你使用任意布尔操作符(AND,OR, 和 NOT)给查询施加条件.比如,下面的查询检索 旧金山的下雨天的天气∶
SELECT * FROM weather
WHERE city = 'San Francisco'
AND prcp > 0.0;
Result:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
(1 row)
最后再提醒一下,你可以要求选出来的结果按照某种顺序排序, 并且消除重复的行输出:
SELECT DISTINCT city
FROM weather
ORDER BY city;
city
---------------
Hayward
San Francisco
(2 rows)
当然, DISTINCT 和 ORDER BY 可以独立使用.
Prev Home Next
向表中添加行 Up 在表之间连接 |
|