PostgreSQL学习笔记(二)—— 概览
数据库
创建数据库:
createdb dbname指定用户名创建数据库:
createdb -U username dbname删除数据库:
dropdb dbname访问数据库:
psql [-U username] dbname交互式环境下数据库内执行
select version();会进入到一个新页面,要返回按q退出数据库:
\q、exit、quit
表
创建表:
CREATE TABLE weather (city varchar(80), temp_low int, temp_high int, date date);查看表结构:
\d tablename;创建表时
--表示注释,--到行尾的东西都会被忽略删除表:
drop table tablename;表中增加行:
insert into weather values('San Francisco', 46, 50, 0.25, '1994-11-27');COPY命令可以一次性向表中装填大量数据:COPY weather FROM '/home/user/weather.txt';查询表:
select city, (temp_lo+temp_hi)/2, date from weather;查询结果消除重复行:
SELECT DISTINCT city FROM weather;指定表的列查询:
select weather.city, cities.location from weather, cities where cities.name = weather.city;设置别名:
select * from weather w, cities c where w.city = c.name;聚集函数:
最大值:
select max(temp_lo) from weather;子查询:
select city from weather where temp_lo = (select max(temp_lo) from weather);组合:
select city, max(temp_lo) from weather group by city;Having:
select city, max(temp_lo) from weather group by city having max(temp_lo) < 40;like:
select city, max(temp_lo) from weather where city like 's%' group by city having max(temp_lo) < 40;where 和 having:
WHERE在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而HAVING在分组和聚集之后选取分组行。因此,WHERE子句不能包含聚集函数;因为试图用聚集函数判断哪些行应输入给聚集运算是没有意义的。相反,HAVING子句总是包含聚集函数(严格说来,你可以写不使用聚集的HAVING子句, 但这样做很少有用。同样的条件用在WHERE阶段会更有效)
更新行:
update weather set temp_hi = temp_hi - 2 where date > '1994-11-28';删除行:
delete from weather where city = 'Hayward';- 注:
delete from tablename;会直接删除表中所有行而删除之前系统不会请求确认
- 注:
增加主键:
alter table weather add primary key (city);增加外键:
alter table weather add constraint foreignkeyName foreign key (city) references cities(name);
高级特性
视图:
create view myview as select city, temo_lo, date, location from weather, cities where city = name;select * from myview;
事务
开启一个事务需要将SQL命令用
BEGIN和COMMIT命令包围起来,如下:在事务中如果并不想提交,可以发出
ROLLBACK命令而不是COMMIT,这样所有目前的更新将被取消
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
-- etc etc
COMMIT;
- 保存点
在使用
SAVEPOINT定义一个保存点后,我们可以在必要时利用ROLLBACK TO回滚到该保存点。该事务中位于保存点和回滚点之间的数据库修改都会被放弃,但是早于该保存点的修改则会被保存在回滚到保存点之后,它的定义依然存在,因此我们可以多次回滚到它。如果确定不再需要回滚到特定的保存点,它可以被释放以便系统释放一些资源。记住不管是释放保存点还是回滚到保存点都会释放定义在该保存点之后的所有其他保存点
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
-- oops ... forget that and use Wally's account
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Wally';
COMMIT;
窗口函数
- 一个窗口函数调用总是包含一个直接跟在窗口函数名及其参数之后的
OVER子句。这使得它从句法上和一个普通函数或非窗口函数区分开来。OVER子句决定究竟查询中的哪些行被分离出来由窗口函数处理。 OVER子句中的PARTITION BY子句指定了将具有相同PARTITION BY表达式值的行分到组或者分区- eg:
SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary DESC) FROM empsalary; - 窗口函数只允许出现在查询的
SELECT列表和ORDER BY子句中。它们不允许出现在其他地方,例如GROUP BY、HAVING和WHERE子句中。这是因为窗口函数的执行逻辑是在处理完这些子句之后
- 一个窗口函数调用总是包含一个直接跟在窗口函数名及其参数之后的
-- 展示如何将每一个员工的薪水与他/她所在部门的平均薪水进行比较
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
/* depname | empno | salary | avg
-----------+-------+--------+-----------------------
develop | 11 | 5200 | 5020.0000000000000000
develop | 7 | 4200 | 5020.0000000000000000
develop | 9 | 4500 | 5020.0000000000000000
develop | 8 | 6000 | 5020.0000000000000000
develop | 10 | 5200 | 5020.0000000000000000
personnel | 5 | 3500 | 3700.0000000000000000
personnel | 2 | 3900 | 3700.0000000000000000
sales | 3 | 4800 | 4866.6666666666666667
sales | 1 | 5000 | 4866.6666666666666667
sales | 4 | 4800 | 4866.6666666666666667
*/
--最开始的三个输出列直接来自于表empsalary,并且表中每一行都有一个输出行。第四列表示对与当前行具有相同depname值的所有表行取得平均值(这实际和非窗口avg聚集函数是相同的函数,但是OVER子句使得它被当做一个窗口函数处理并在一个合适的窗口帧上计算。)
- 继承
--创建两个表:cities、capitals。自然地,首都也是城市,所以我们需要有某种方式能够在列举所有城市的时候也隐式地包含首都。
CREATE TABLE cities (
name text,
population real,
altitude int -- (in ft)
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
--在这种情况下,一个capitals的行从它的父亲cities继承了所有列(name、population和altitude)
-- 查找所有海拔高于500尺且不是州首府的城市
SELECT name, altitude
FROM ONLY cities
WHERE altitude > 500;
-- ONLY用于指示查询只在cities表上进行而不会涉及到继承层次中位于cities之下的其他表。很多我们已经讨论过的命令 — SELECT、UPDATE 和DELETE — 都支持这个ONLY记号
-- 尽管继承很有用,但是它还未与唯一约束或外键集成,这也限制了它的可用性
PostgreSQL学习笔记(二)—— 概览的更多相关文章
- PostgreSQL学习笔记(二)-安装pgAdmin
继上篇安装PostgreSQL后,我们需要安装一个PostgreSQL的图形化管理工具. pgadmin管理工具 创建Python的虚拟环境 cd /root/venv python -m venv ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
随机推荐
- 编译lua固件NodeMcu 8266
https://www.cnblogs.com/yangfengwu/p/10547024.html 因为我现在的Wifi的教程是lua语言编写的,但是有些功能需要自己编译lua固件才可以,这篇文章就 ...
- 链表 | 递归删除不带头结点链表所有x元素
王道P37 T1 : 设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点. 王道上的答案绝对是错的,我自己想了一个 函数主体 LinkList* del_x(LinkList* prior, ...
- 一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...
- shell 给文件每一行都添加指定字符串
[admin@localhost file]$ cat file hello hello hello hello hello [admin@localhost file]$ cat test.sh # ...
- js正则表达式之解决html解析<>标签问题
应用场景:以博客写文章为例,有的时候我们不经意间写的字符串带标签,然后浏览器将其解析了,实际上我们并不希望其被解析,于是可通过核心代码解决该问题. 核心代码如下: data.codeSource.re ...
- ansible-playbook-常用
创建软链:file: - name: create link hosts: "{{hosts_ip}}" tasks: - name: create link file: src= ...
- 淘宝接口-IP返回运营商
#!/usr/bin/evn python# -*- coding:utf-8 -*-import jsonimport urllib2import datetimeimport reimport Q ...
- 【深入学习linux】在linux系统下怎么编写c语言程序并运行
1. 首先安装下 gcc : centos yum -y gcc 2. 编写c程序保存hello.c: #include <stdio.h> #include <stdlib.h&g ...
- android双进程守护,让程序崩溃后一定可以重启
由于我们做的是机器人上的软件,而机器人是24小时不间断服务的,这就要求我们的软件不能退出到系统桌面.当然最好是能够做到程序能够不卡顿,不崩溃,自己不退出.由于我们引用了很多第三方的开发包,也不能保证他 ...
- cisco 交换机设置时区、时间、同步日志本地时间
Core-Switch-1#show clockCore-Switch-1#show ntp statusCore-Switch-1#conf tCore-Switch-1(config)# cloc ...