PostgreSQL7.0手册-教程 -72. 查询语言
第七十二章. 查询语言
内容
SQL 界面
概念
创建新表
向表中加入记录
查询一个表
重新定向 SELECT 查询
联接表
更新
删除
使用聚集函数
Postgres 的查询语言是一个 SQL 下一代标准 SQL3 初稿的一个变种.它有许多扩展,比如可扩展的类型系统,继承,函数和使用(?production) 规则等.这些特性是从最初的 Postgres 查询语言, PostQuel,上继承过来的.本节概要的介绍如何使用 PostgresSQL 进行一些简单操作.这本手册只是试图给你一些我们熟知的SQL的概念,而不是一个SQL的完整的教程.有大量的介绍SQL92的书,包括 Melton and Simon, 1993 和 Date and Darwen, 1997.你同时也要明白有些语言特性并非 ANSI 标准.
SQL 界面
在下面的例子里,我们假定你已经创建了mydb 数据库并且启动了psql.本手册的例子也可以在/usr/local/pgsql/src/tutorial/ 目录下找到.关于如何使用他们,请参阅该目录下的 README 文件.要开始教程,键入下面命令:
% cd /usr/local/pgsql/src/tutorial
% psql -s mydb
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: postgres
mydb=> \i basics.sql
\i 命令从指定的文件里读入查询.-s 选项让你进入单步模式,这样在把查询送给后端之前会停下来.本节的查询语句都在 basics.sql 文件里.
psql 有一系列 \d 命令用于显示系统信息.使用这些命令去获得更多详细信息; 或在 psql 提示符下键入 \? 查看列表.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
概念
Postgres 里最基本的概念是表(class),表是一个命名的对象实例/记录(instance)的集合.每一实例/记录由一组相同的命名属性/字段(attributes)组成.而且每一属性有一特定的类型.另外,每个实例都有一个唯一的永久对象标识 (OID).因为 SQL 语法中使用表(tables)的概念,我们这里class和talbes是可以互换的.同样, SQL行(row) 是一个实例(instance) 而 SQL列(columns) 是 属性(attributes).正如前面所述,一组表组成数据库,一组由某一postmaster 进程管理的数据库构成一个安装或节点.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
创建新表
你可以通过指定表名和表中各字段属性和字段类型的方法创建一个新表:
CREATE TABLE weather (
city varchar(80),
temp_lo int, -- low temperature
temp_hi int, -- high temperature
prcp real, -- precipitation
date date
);
注意:所有关键字和标识都是大小写无关的; SQL92 允许使用双引号将标识括起来实现大小写相关. PostgresSQL支持通常的 SQL 类型 int, float, real, smallint, char(N),varchar(N), date, time,和 timestamp,还支持其他的通用类型和丰富的数组类型.我们稍后将看到,Postgres 可以定制任意的用户定义的数据类型.因而类型名并不是语法关键字,除了SQL92 标准要求支持的特例外.所以, Postgres 用于建表的命令 CREATE 和传统的关系型系统的命令几乎一模一样.不过,我们很快就会看到这里的表是关系型模型的扩展.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
向表中加入记录
INSERT 语句用于向表中添加记录:
INSERT INTO weather
VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994');
你还可以使用 copy 命令从一个平面(ASCII)文件里向表中添加大数量的记录。这样做通常要快一些,因为数据是做为单个量化事务从目标表中读取或者写入到目标表中去的。例如:
COPY weather FROM '/home/user/weather.txt'
USING DELIMITERS '|';
这里源文件的路径必须是后端服务器机器可以访问的,而不是客户端可访问的路径,因为后端服务器直接从文件中读取数据。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
查询表
我们可以用通常的关系查询选择和影射查询检索 weather 表.一个 SQL select 语句可以用于此事. 该语句分成目标列表(返回的字段)部分和条件(限制条件)部分.例如,我们检索weather表中的所有行,键入:
SELECT * FROM weather;
输出为:
+--------------+---------+---------+------+------------+
|city | temp_lo | temp_hi | prcp | date |
+--------------+---------+---------+------+------------+
|San Francisco | 46 | 50 | 0.25 | 11-27-1994 |
+--------------+---------+---------+------+------------+
|San Francisco | 43 | 57 | 0 | 11-29-1994 |
+--------------+---------+---------+------+------------+
|Hayward | 37 | 54 | | 11-29-1994 |
+--------------+---------+---------+------+------------+
你可以在目标列表中输入任意的表达式.例如:
SELECT city, (temp_hi+temp_lo)/2 AS
内容
SQL 界面
概念
创建新表
向表中加入记录
查询一个表
重新定向 SELECT 查询
联接表
更新
删除
使用聚集函数
Postgres 的查询语言是一个 SQL 下一代标准 SQL3 初稿的一个变种.它有许多扩展,比如可扩展的类型系统,继承,函数和使用(?production) 规则等.这些特性是从最初的 Postgres 查询语言, PostQuel,上继承过来的.本节概要的介绍如何使用 PostgresSQL 进行一些简单操作.这本手册只是试图给你一些我们熟知的SQL的概念,而不是一个SQL的完整的教程.有大量的介绍SQL92的书,包括 Melton and Simon, 1993 和 Date and Darwen, 1997.你同时也要明白有些语言特性并非 ANSI 标准.
SQL 界面
在下面的例子里,我们假定你已经创建了mydb 数据库并且启动了psql.本手册的例子也可以在/usr/local/pgsql/src/tutorial/ 目录下找到.关于如何使用他们,请参阅该目录下的 README 文件.要开始教程,键入下面命令:
% cd /usr/local/pgsql/src/tutorial
% psql -s mydb
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: postgres
mydb=> \i basics.sql
\i 命令从指定的文件里读入查询.-s 选项让你进入单步模式,这样在把查询送给后端之前会停下来.本节的查询语句都在 basics.sql 文件里.
psql 有一系列 \d 命令用于显示系统信息.使用这些命令去获得更多详细信息; 或在 psql 提示符下键入 \? 查看列表.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
概念
Postgres 里最基本的概念是表(class),表是一个命名的对象实例/记录(instance)的集合.每一实例/记录由一组相同的命名属性/字段(attributes)组成.而且每一属性有一特定的类型.另外,每个实例都有一个唯一的永久对象标识 (OID).因为 SQL 语法中使用表(tables)的概念,我们这里class和talbes是可以互换的.同样, SQL行(row) 是一个实例(instance) 而 SQL列(columns) 是 属性(attributes).正如前面所述,一组表组成数据库,一组由某一postmaster 进程管理的数据库构成一个安装或节点.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
创建新表
你可以通过指定表名和表中各字段属性和字段类型的方法创建一个新表:
CREATE TABLE weather (
city varchar(80),
temp_lo int, -- low temperature
temp_hi int, -- high temperature
prcp real, -- precipitation
date date
);
注意:所有关键字和标识都是大小写无关的; SQL92 允许使用双引号将标识括起来实现大小写相关. PostgresSQL支持通常的 SQL 类型 int, float, real, smallint, char(N),varchar(N), date, time,和 timestamp,还支持其他的通用类型和丰富的数组类型.我们稍后将看到,Postgres 可以定制任意的用户定义的数据类型.因而类型名并不是语法关键字,除了SQL92 标准要求支持的特例外.所以, Postgres 用于建表的命令 CREATE 和传统的关系型系统的命令几乎一模一样.不过,我们很快就会看到这里的表是关系型模型的扩展.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
向表中加入记录
INSERT 语句用于向表中添加记录:
INSERT INTO weather
VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994');
你还可以使用 copy 命令从一个平面(ASCII)文件里向表中添加大数量的记录。这样做通常要快一些,因为数据是做为单个量化事务从目标表中读取或者写入到目标表中去的。例如:
COPY weather FROM '/home/user/weather.txt'
USING DELIMITERS '|';
这里源文件的路径必须是后端服务器机器可以访问的,而不是客户端可访问的路径,因为后端服务器直接从文件中读取数据。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
查询表
我们可以用通常的关系查询选择和影射查询检索 weather 表.一个 SQL select 语句可以用于此事. 该语句分成目标列表(返回的字段)部分和条件(限制条件)部分.例如,我们检索weather表中的所有行,键入:
SELECT * FROM weather;
输出为:
+--------------+---------+---------+------+------------+
|city | temp_lo | temp_hi | prcp | date |
+--------------+---------+---------+------+------------+
|San Francisco | 46 | 50 | 0.25 | 11-27-1994 |
+--------------+---------+---------+------+------------+
|San Francisco | 43 | 57 | 0 | 11-29-1994 |
+--------------+---------+---------+------+------------+
|Hayward | 37 | 54 | | 11-29-1994 |
+--------------+---------+---------+------+------------+
你可以在目标列表中输入任意的表达式.例如:
SELECT city, (temp_hi+temp_lo)/2 AS
Tags:PostgreSQL,手册,教程,查询,语言

