复合类型字段
CREATE TYPE complex AS (
r double precision,
i double precision
);
声明复合字段
CREATE TYPE inventory_item AS (
name text,
supplier_id integer,
price numeric
);
利用复合字段建表
CREATE TABLE on_hand (
item inventory_item,
count integer
);
3、数据库的表的新建和操作
3.1 新建数据库和表的操作命令
1、CREATE DATABASE 创建数据库
postgres=# CREATE DATABASE runoobdb;
2、createdb 命令创建数据库
createdb [option...][dbname [description]]
3#创建表,以下创建了一个表,表名为 COMPANY 表格,主键为 ID,NOT NULL 表示字段不允许包含 NULL 值
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer ARRAY[4],
schedule text[][]);
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
UPDATE sal_emp SET pay_by_quarter ='{25000,25000,27000,27000}'
WHERE name ='Carol';
UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,27000]
WHERE name ='Carol';//以数组的放式更新
SELECT name FROM sal_emp WHERE pay_by_quarter[1]<> pay_by_quarter[2];
SELECT * FROM sal_emp WHERE pay_by_quarter[1]= 10000 OR
pay_by_quarter[2]= 10000 OR
pay_by_quarter[3]= 10000 OR
pay_by_quarter[4]= 10000;
SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);
以下的 SELECT 语句同样使用了 SQL 的子查询,子查询语句中读取 SALARY(薪资) 字段大于 65000 的 AGE(年龄) 字段数据,然后用 > 运算符查询大于该 AGE(年龄) 字段数据:
FROM COMPANY
WHERE AGE >(SELECT AGE FROM COMPANY WHERE SALARY > 65000);
下面实例将找出限定的数量的数据,即读取 4 条数据:
SELECT * FROM COMPANY LIMIT 4;
在某些情况下,可能需要从一个特定的偏移开始提取记录
下面是一个实例,从第三位开始提取 3 个记录:
SELECT * FROM COMPANY LIMIT 3 OFFSET 2;#进行分组
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;#HAVING 子句可以让我们筛选分组后的各组数据。
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
#DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录。
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]