PostgreSQL Serial类型和序列及子查询(五)
来源:互联网 发布:程序员用机械键盘推荐 编辑:程序博客网 时间:2024/06/06 02:42
一、Serial类型:自动增长
PostgreSQL具有数据类型smallserial
,serial
和bigserial
; 这些不是真正的类型,而只是在创建唯一标识符列的标志以方便使用。 这些类似于一些其他数据库支持的AUTO_INCREMENT
属性。
如果您希望某列具有唯一的约束或是主键,则必须使用其他数据类型进行指定。
类型名称serial
用于创建整数列。 类型名称bigserial
创建一个bigint
类型的列。 如果您期望在表的使用期限内使用超过2^31
个标识符,则应使用bigserial
。 类型名称smallserial
创建一个smallint
列。
SERIAL
数据类型的基本用法如下:
CREATE TABLE tablename ( colname SERIAL);操作如下:
CREATE TABLE COMPANY( ID SERIAL PRIMARY KEY, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);--添加自动递增INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ( 'Paul', 32, 'California', 20000.00 );INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ('Allen', 25, 'Texas', 15000.00 );INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ('Teddy', 23, 'Norway', 20000.00 );INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 );INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ( 'David', 27, 'Texas', 85000.00 );INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ( 'Kim', 22, 'South-Hall', 45000.00 );INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)VALUES ( 'James', 24, 'Houston', 10000.00 );效果图:
二、序列语法:
CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ]具体说明:
INCREMENT BY : 每次序列增加(或减少)的步长
MINVALUE : 序列最小值,NO MINVALUE表示没有最小值
MAXVALUE : 序列最大值,NO MAXVALUE表示没有最大值
START WITH :以什么序列值开始
CYCLE : 序列是否循环使用
OWNED BY : 可以直接指定一个表的字段,也可以不指定。
操作如下:
--创建序列create sequence seq_no increment by 1 minvalue 1 no maxvalue start with 1000;--删除表drop table student;--创建表create table student( sno integer default nextval('seq_no') primary key, sname varchar(20) );--添加数据insert into student(sname) values('zhang');insert into student(sname) values('fei');insert into student(sname) values('liu');--查询数据select *from student;
三、子查询
子查询或内部查询或嵌套查询是一个PostgreSQL查询中的查询,它可以嵌入到WHERE
子句中。子查询用于返回将在主查询中使用的数据作为进一步限制要检索的数据的条件。
子查询可以与SELECT
,INSERT
,UPDATE
和DELETE
语句以及运算符(如=
,<
,>
,>=
,<=
,IN
等)一起使用。
子查询必须遵循以下规则:
- 子查询必须括在括号中。
- 子查询在SELECT子句中只能有一列,除非主查询中有多个列用于比较其所选列的子查询。
ORDER BY
不能用于子查询,尽管主查询可以使用ORDER BY
。GROUP BY
可用于执行与子查询中的ORDER BY
相同的功能。- 返回多行的子查询只能与多个值运算符一起使用,例如:
IN
,EXISTS
,NOT IN
,ANY / SOME
,ALL
运算符。 BETWEEN
运算符不能与子查询一起使用; 但是,BETWEEN
可以在子查询中使用。
--(1) 子查询语法:SELECT column_name [, column_name ]FROM table1 [, table2 ]WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])select * from company;--查询工资>35000的信息 (子查询in)select * from company where id in (select id from company where salary>35000);--查询工资>45000的信息(子查询exists)select * from company c where exists (select * from company cc where c.id=cc.id and cc.salary>45000);--(2)带INSERT语句的子查询语法:INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]--备份一个表COMPANY_Back --a)复制一个company的结构create table company_back as select * from company where 1!=1; --b)查询 select *from company_back; --(c)批量添加数据 insert into company_back select * from company where id>3; --(3) 带UPDATE语句的子查询:UPDATE tableSET column_name = new_value[ WHERE OPERATOR [ VALUE ](SELECT COLUMN_NAME FROM TABLE_NAME)[ WHERE) ]--在company_back表中AGE大于或等于27的将COMPANY表中的SALARY更新为0.50倍:update company set salary=salary*0.5 where id in (select id from company_back where age>=27); --b)查询 select *from company;--(4) 带有DELETE语句的子查询:DELETE FROM TABLE_NAME[ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]--在company_back表中AGE大于或等于27的将COMPANY表中删除:delete from company where age in (select age from company_back where age>=27);
阅读全文
0 0
- PostgreSQL Serial类型和序列及子查询(五)
- PostgreSQL查询代价估算(五)
- postgresql创建序列查询序列
- mysql(五、子查询)
- 数据结构之一(引论及最大子序列和问题)
- 区间子序列查询
- MYSQL五子查询
- 数组中连续子序列的最大和及子串(js实现)
- 在Hibernate和PostgreSQL中使用SERIAL字段
- PostgreSQL 数据操作和查询(四)
- PostgreSQL查询优化的分享---PG优化器的框架和子查询
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(一)
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(二)
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(三)
- 【经典DP类型】 最大连续子序列和
- PostgreSQL 序列(SEQUENCE)
- PostgreSQL 序列(SEQUENCE)
- PostgreSQL 序列(SEQUENCE)
- ThinkPhp5 | 模块分析
- vue第一篇(基础及指令)
- Hibernate的学习之路十(持久化对象的三个状态)
- eclipse开发birt报表时预览数据错误修改方案
- Hive编程(九)【模式设计】
- PostgreSQL Serial类型和序列及子查询(五)
- Unity2017 UnityAds 问题
- 编译错误"/usr/bin/ld: cannot find -lz"
- poj2891 Strange Way to Express Integers【解一元线性同余方程组模板】
- java中的泛型
- vuex入门教程
- 【云星数据---Scala实战系列(精品版)】:Scala入门教程061-Scala实战源码-Scala包引用的语法
- python全局变量小心得
- Linux下php安装Redis扩展