Postgresql 8.0.0
1.创建新表
CREATE TABLE weather (
cityvarchar(80),
temp_loint,-- 最低气温
temp_hiint,-- 最高气温
prcpreal,-- 降水量
datedate
);
注:1).在 sql 命令中自由使用空白(也就是空格,tab,和换行符)。
2).两个划线("--") 引入注释。任何跟在它后面的东西直到该行的结尾都被忽略。
3).sql是对关键字和标识符大小写不敏感的语言,只有在标识符用双引号包围时
才能保留它们的大小写属性
4).类型名并不是语法关键字
CREATE TABLE cities (
namevarchar(80),
locationpoint
);
注:类型 point 就是一种 Postgresql 特有数据类型的例子。
2.删除已有表:DROP TABLE tablename;
3.向表中添加行
INSERT 用于向表中添加行:
INSERT INTO weather VALUES ('San Francisco',46,50,0.25,'1994-11-27');
注:1).不是简单数字值的常量必须用单引号('')包围。
2).point类型要求一个坐标对作为输入,如下:
INSERTINTO cities VALUES ('San Francisco','(-194.0,53.0)');
3).明确列出字段而不用依赖隐含的顺序是更好的风格。
4.查询一个表
SELECT * FROM weather; --*是"所有字段" 的缩写。
SELECT city,temp_lo,temp_hi,prcp,date FROMweather;--与上面一句的查
询结果相同。
注:1).可以在选择列表中写任意表达式,而不仅仅是字段列表。比如:
SELECT city,(temp_hi+temp_lo)/2 AS temp_avg,date FROMweather;
2).AS子句是如何给输出字段重新命名的。(AS 子句是可选的。)
3).输出结果为:
city| temp_avg |date
---------------+----------+------------
San Francisco|48 | 1994-11-27
San Francisco|50 | 1994-11-29
Hayward|45 | 1994-11-29
(3 rows)
4).一个查询可以使用 WHERE 子句"修饰",声明需要哪些行。
SELECT * FROM weather WHERE city = 'San Francisco' AND prcp> 0.0;
5).要求返回的查询是排好序的:SELECT * FROM weather ORDER BY city;
6).要求查询的结果按照某种顺序排序, 并且消除重复的行输出:
SELECT DISTINCT city FROM weather;
7). DISTINCT 和 ORDER BY 可以组合使用来获取一致的结果。
5.在表之间连接
查询可以一次访问多个表,或者用某种方式访问一个表,而同时处理该表的多个行。一个同时访问同一个或者不同表的多个行的查询叫连接(join)查询。
SELECT * FROM weather,cities WHERE city = name;
city| temp_lo | temp_hi | prcp|date|name| location
---------------+---------+---------+------+------------+---------------+-----------
San Francisco|46|50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
San Francisco|43|57 | 0 |1994-11-29 | San Francisco | (-194,53)
(2 rows)
观察结果集的两个方面:
注:1).没有城市Hayward的结果行。这是因为在 cities 表里面没有 Hayward的匹配行,所以连
接忽略weather表里的不匹配行。我们稍后将看到如何修补这个毛病。
2).有两个字段包含城市名字。这是正确的, 因为 weather 和 cities表的字段是接在一
起的。不过,实际上我们不想要这些, 因此你将可能希望明确列出输出字段而不是使用 *
SELECT city,date,location FROM weather,cities
WHERE city = name;
3).在连接查询里使用字段全称是很好的风格:
SELECTweather.city,weather.temp_lo,weather.temp_hi,weather.prcp,weather.date,cities.location
FROMweather,cities
WHEREcities.name = weather.city;
4).到目前为止,这种类型的连接查询也可以用下面这样的形式写出来:
SELECT * FROM weather INNER JOIN cities ON (weather.city =cities.name);
5).将看看如何能把Hayward记录找回来。 我们想让查询干的事是扫描 weather 表, 并且
对每一行都找出匹配的 cities 表里面的行。 如果我们没有找到匹配的行,那么我们需要
一些"空值"代替cities表的字段。 这种类型的查询叫外连接。 (我们在此之前看到的连接
都是内部连接。)这样的命令看起来象这样:
SELECT*
FROM weatherLEFT OUTER JOIN cities ON (weather.city = cities.name);
city| temp_lo | temp_hi | prcp|date|name| location ---------------+---------+---------+------+------------+---------------+----------- Hayward|37|54|| 1994-11-29|| San Francisco|46|50 | 0.25 | 1994-11-27 | San Francisco | (-194,53) San Francisco|43|57 | 0 |1994-11-29 | San Francisco | (-194,53) (3 rows)
原文链接:https://www.f2er.com/postgresql/195827.html