PostgreSQL命令笔记

教程传送门 -> PostgreSQL 教程 | 菜鸟教程

(1) 连接数据库 

[root@xxx ~]# psql -U postgres -h localhost
Password for user postgres:
psql (13.4)
Type "help" for help.

postgres=#

说明:

-h host 指定服务器的主机名
-p port 指定服务器监听的端口,或者 socket 文件
-U username 连接数据库的用户名

(2)查看数据库 \list

postgres-# \list
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

postgres-#

(3) 创建数据库
方法一:SQL命令 CREATE DATABASE

postgres=# CREATE DATABASE firstdb;
CREATE DATABASE
postgres=# \list firstdb
                               List of databases
  Name   |  Owner   | Encoding |   Collate   |    Ctype    | Access privileges
---------+----------+----------+-------------+-------------+-------------------
 firstdb | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(1 row)

postgres=#

方法二:createdb命令,注:createdb 是一个 SQL 命令 CREATE DATABASE 的封装

[root@xxx bin]# pwd
/usr/pgsql-13/bin
[root@xxx bin]# createdb test -U postgres -h localhost
Password:
[root@xxx bin]#

(4) 选择数据库 \c <dbname>

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 firstdb   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(5 rows)

postgres=# \c firstdb
Password:
You are now connected to database "firstdb" as user "postgres".
firstdb=#

也可以连接的时候指定数据库

[root@xxx bin]# psql -U postgres -h 127.0.0.1 firstdb
Password for user postgres:
psql (13.4)
Type "help" for help.

firstdb=#


(5) 删除数据库

方法一:SQL命令 DROP DATABASE

postgres=# DROP DATABASE test;
DROP DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 firstdb   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

postgres=#

方法二:dropdb 命令
 

[root@xxx bin]# pwd
/usr/pgsql-13/bin
[root@xxx bin]# createdb test1 -U postgres -h localhost
Password:
[root@xxx bin]#

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 firstdb   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test1     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(5 rows)

postgres=#
-----------------------------------------------------

[root@xxx bin]# dropdb test1 -U postgres -h localhost
Password:
[root@xxx bin]#

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 firstdb   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

postgres=#

(6) 创建表格 CREATE TABLE

postgres=# \c firstdb
You are now connected to database "firstdb" as user "postgres".
firstdb=#
firstdb=# CREATE TABLE COMPANY(
firstdb(#    ID INT PRIMARY KEY     NOT NULL,
firstdb(#    NAME           TEXT    NOT NULL,
firstdb(#    AGE            INT     NOT NULL,
firstdb(#    ADDRESS        CHAR(50),
firstdb(#    SALARY         REAL
firstdb(# );
CREATE TABLE
firstdb=#
firstdb=# CREATE TABLE DEPARTMENT(
firstdb(#    ID INT PRIMARY KEY      NOT NULL,
firstdb(#    DEPT           CHAR(50) NOT NULL,
firstdb(#    EMP_ID         INT      NOT NULL
firstdb(# );
CREATE TABLE
firstdb=#

(7) 查看表 

查看本数据库的全部表 \d(说明:除了可以看到table,还可以看到sequence)

firstdb=# \d 
           List of relations
 Schema |    Name    | Type  |  Owner
--------+------------+-------+----------
 public | company    | table | postgres
 public | department | table | postgres
(2 rows)

firstdb=#

查看本数据库的某张表 \d <table name>

firstdb=# \d company
                  Table "public.company"
 Column  |     Type      | Collation | Nullable | Default
---------+---------------+-----------+----------+---------
 id      | integer       |           | not null |
 name    | text          |           | not null |
 age     | integer       |           | not null |
 address | character(50) |           |          |
 salary  | real          |           |          |
Indexes:
    "company_pkey" PRIMARY KEY, btree (id)

firstdb=#

查看本数据库的某个序列 \d <sequence name>

firstdb=# \d oplog_id_seq
                        Sequence "public.company_id_seq"
  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
 bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
Owned by: public.company.id

firstdb=# 

(8) 删除表 DROP TABLE 

firstdb=# drop table department, company;
DROP TABLE
firstdb=# \d
Did not find any relations.
firstdb=#

(9) 插入 INSERT INTO
插入1行所有字段赋值

firstdb=# CREATE TABLE COMPANY(
firstdb(#    ID INT PRIMARY KEY     NOT NULL,
firstdb(#    NAME           TEXT    NOT NULL,
firstdb(#    AGE            INT     NOT NULL,
firstdb(#    ADDRESS        CHAR(50),
firstdb(#    SALARY         REAL,
firstdb(#    JOIN_DATE      DATE
firstdb(# );
CREATE TABLE
firstdb=#
firstdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');
INSERT 0 1

插入1行部分字段赋值

firstdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,JOIN_DATE) VALUES (2, 'Allen', 25, 'Texas', '2007-12-13');
INSERT 0 1
firstdb=#

说明:返回 INSERT 0 1,第2个数字代表插入的行数

插入的字段使用默认值 DEFAULT

firstdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (3, 'Teddy', 23, 'Norway', 20000.00, DEFAULT );
INSERT 0 1
firstdb=#
firstdb=# SELECT * FROM COMPANY;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  3 | Teddy |  23 | Norway                                             |  20000 |
(3 rows)

firstdb=#

插入多行

firstdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00, '2007-12-13' ), (5, 'David', 27, 'Texas', 85000.00, '2007-12-13');
INSERT 0 2
firstdb=# SELECT * FROM COMPANY;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  3 | Teddy |  23 | Norway                                             |  20000 |
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
(5 rows)

firstdb=#

(10) 查询 SELECT

firstdb=# SELECT ID,NAME FROM company;
 id | name
----+-------
  1 | Paul
  2 | Allen
  3 | Teddy
  4 | Mark
  5 | David
(5 rows)

firstdb=#

查询当前时间

firstdb=# SELECT CURRENT_TIMESTAMP;
       current_timestamp
-------------------------------
 2021-10-12 15:27:59.351699+08
(1 row)

firstdb=#

(11) WHERE子句

firstdb=# SELECT * FROM COMPANY WHERE SALARY > 50000;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
(2 rows)

firstdb=#

firstdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
(2 rows)

firstdb=#

@字段不为空 IS NOT NULL

firstdb=# SELECT * FROM COMPANY WHERE JOIN_DATE IS NOT NULL;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
(4 rows)

firstdb=#

@LIKE

firstdb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';
 id | name | age |                      address                       | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------
  1 | Paul |  32 | California                                         |  20000 | 2001-07-13
(1 row)

firstdb=#

@IN
以下 SELECT 语句列出了 AGE(年龄) 字段为 25 或 27 的数据:

firstdb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
(3 rows)

firstdb=#

@NOT IN
以下 SELECT 语句列出了 AGE(年龄) 字段不为 25 或 27 的数据:

firstdb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  3 | Teddy |  23 | Norway                                             |  20000 |
(2 rows)

firstdb=#

@BETWEEN
以下 SELECT 语句列出了 AGE(年龄) 字段在 25 和 27 之间数据:

firstdb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
(3 rows)

firstdb=#

(12) UPDATE语句

首先创建表COMPANY

DROP TABLE COMPANY;
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'David', 27, 'Texas', 85000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );

INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );

更新该表 id = 3 的记录

firstdb=# SELECT * FROM company;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  2 | Allen |  25 | Texas                                              |  15000
  3 | Teddy |  23 | Norway                                             |  20000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  5 | David |  27 | Texas                                              |  85000
  6 | Kim   |  22 | South-Hall                                         |  45000
  7 | James |  24 | Houston                                            |  10000
(7 rows)

firstdb=# UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;
UPDATE 1
firstdb=# SELECT * FROM COMPANY WHERE ID = 3;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  3 | Teddy |  23 | Norway                                             |  15000
(1 row)

firstdb=#

更新全部记录的某字段

firstdb=# UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;
UPDATE 1
firstdb=# SELECT * FROM COMPANY WHERE ID = 3;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  3 | Teddy |  23 | Norway                                             |  15000
(1 row)

firstdb=# UPDATE COMPANY SET ADDRESS = 'Texas', SALARY=20000;
UPDATE 7
firstdb=# SELECT * FROM company;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | Texas                                              |  20000
  2 | Allen |  25 | Texas                                              |  20000
  4 | Mark  |  25 | Texas                                              |  20000
  5 | David |  27 | Texas                                              |  20000
  6 | Kim   |  22 | Texas                                              |  20000
  7 | James |  24 | Texas                                              |  20000
  3 | Teddy |  23 | Texas                                              |  20000
(7 rows)

firstdb=#

(13) DELETE语句
删除ID为2~4的记录

firstdb=# DELETE FROM COMPANY WHERE ID BETWEEN 2 AND 4;
DELETE 3
firstdb=# SELECT * FROM company;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | Texas                                              |  20000
  5 | David |  27 | Texas                                              |  20000
  6 | Kim   |  22 | Texas                                              |  20000
  7 | James |  24 | Texas                                              |  20000
(4 rows)

firstdb=#

删除整张表的数据

firstdb=# DELETE FROM COMPANY;
DELETE 4
firstdb=# SELECT * FROM company;
 id | name | age | address | salary
----+------+-----+---------+--------
(0 rows)

firstdb=#

(14) LIMIT 子句
取前4条记录

firstdb=# SELECT * FROM COMPANY LIMIT 4;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  2 | Allen |  25 | Texas                                              |  15000
  3 | Teddy |  23 | Norway                                             |  20000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
(4 rows)

firstdb=#

跳过前两条记录,从第三条记录开始取3条记录

firstdb=# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  3 | Teddy |  23 | Norway                                             |  20000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  5 | David |  27 | Texas                                              |  85000
(3 rows)

firstdb=#

(15) ORDER BY 语句

firstdb=# SELECT * FROM COMPANY ORDER BY AGE, NAME;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  6 | Kim   |  22 | South-Hall                                         |  45000
  3 | Teddy |  23 | Norway                                             |  20000
  7 | James |  24 | Houston                                            |  10000
  2 | Allen |  25 | Texas                                              |  15000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  5 | David |  27 | Texas                                              |  85000
  1 | Paul  |  32 | California                                         |  20000
(7 rows)

firstdb=#
firstdb=#
firstdb=# SELECT * FROM COMPANY ORDER BY AGE, NAME DESC;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  6 | Kim   |  22 | South-Hall                                         |  45000
  3 | Teddy |  23 | Norway                                             |  20000
  7 | James |  24 | Houston                                            |  10000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  2 | Allen |  25 | Texas                                              |  15000
  5 | David |  27 | Texas                                              |  85000
  1 | Paul  |  32 | California                                         |  20000
(7 rows)

firstdb=# SELECT * FROM COMPANY ORDER BY AGE DESC, NAME DESC;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  5 | David |  27 | Texas                                              |  85000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  2 | Allen |  25 | Texas                                              |  15000
  7 | James |  24 | Houston                                            |  10000
  3 | Teddy |  23 | Norway                                             |  20000
  6 | Kim   |  22 | South-Hall                                         |  45000
(7 rows)

firstdb=# SELECT * FROM COMPANY ORDER BY AGE DESC, NAME;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  5 | David |  27 | Texas                                              |  85000
  2 | Allen |  25 | Texas                                              |  15000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  7 | James |  24 | Houston                                            |  10000
  3 | Teddy |  23 | Norway                                             |  20000
  6 | Kim   |  22 | South-Hall                                         |  45000
(7 rows)

firstdb=#

(16) GROUP BY 语句

firstdb=# SELECT * FROM COMPANY ORDER BY NAME;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  2 | Allen |  25 | Texas                                              |  15000
  5 | David |  27 | Texas                                              |  85000
  7 | James |  24 | Houston                                            |  10000
 10 | James |  45 | Texas                                              |   5000
  9 | James |  44 | Norway                                             |   5000
  6 | Kim   |  22 | South-Hall                                         |  45000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  1 | Paul  |  32 | California                                         |  20000
  8 | Paul  |  24 | Houston                                            |  20000
  3 | Teddy |  23 | Norway                                             |  20000
(10 rows)

firstdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
 name  |  sum
-------+-------
 Allen | 15000
 David | 85000
 James | 20000
 Kim   | 45000
 Mark  | 65000
 Paul  | 40000
 Teddy | 20000
(7 rows)

firstdb=#

(17) WITH 子句
http://www.jasongj.com/sql/cte/

(18) HAVING 子句

说明:HAVING 子句必须放置于 GROUP BY 子句后面,ORDER BY 子句前面

firstdb=# SELECT * FROM COMPANY;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  2 | Allen |  25 | Texas                                              |  15000
  3 | Teddy |  23 | Norway                                             |  20000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  5 | David |  27 | Texas                                              |  85000
  6 | Kim   |  22 | South-Hall                                         |  45000
  7 | James |  24 | Houston                                            |  10000
(7 rows)

firstdb=#
firstdb=# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
 name
-------
 Teddy
 David
 Paul
 Kim
 Mark
 Allen
 James
(7 rows)

firstdb=# INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT 0 1
firstdb=# INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT 0 1
firstdb=# INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
INSERT 0 1
firstdb=# SELECT * FROM COMPANY;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  2 | Allen |  25 | Texas                                              |  15000
  3 | Teddy |  23 | Norway                                             |  20000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  5 | David |  27 | Texas                                              |  85000
  6 | Kim   |  22 | South-Hall                                         |  45000
  7 | James |  24 | Houston                                            |  10000
  8 | Paul  |  24 | Houston                                            |  20000
  9 | James |  44 | Norway                                             |   5000
 10 | James |  45 | Texas                                              |   5000
(10 rows)

firstdb=#

firstdb=# SELECT address FROM COMPANY GROUP BY address HAVING count(address) > 1;
                      address
----------------------------------------------------
 Houston
 Norway
 Texas
(3 rows)

firstdb=# SELECT address FROM COMPANY GROUP BY address HAVING count(address) > 2;
                      address
----------------------------------------------------
 Texas
(1 row)

firstdb=#

(19)DISTINCT 关键字

firstdb=# INSERT INTO COMPANY VALUES (11, 'James', 45, 'Texas', 15000.00);
INSERT 0 1
firstdb=#
firstdb=# SELECT address,name FROM COMPANY;
                      address                       | name
----------------------------------------------------+-------
 California                                         | Paul
 Texas                                              | Allen
 Norway                                             | Teddy
 Rich-Mond                                          | Mark
 Texas                                              | David
 South-Hall                                         | Kim
 Houston                                            | James
 Houston                                            | Paul
 Norway                                             | James
 Texas                                              | James
 Texas                                              | James
(11 rows)

firstdb=# SELECT DISTINCT address,name FROM COMPANY;
                      address                       | name
----------------------------------------------------+-------
 Texas                                              | James
 Norway                                             | James
 Rich-Mond                                          | Mark
 Texas                                              | Allen
 Houston                                            | James
 California                                         | Paul
 Houston                                            | Paul
 Texas                                              | David
 South-Hall                                         | Kim
 Norway                                             | Teddy
(10 rows)

firstdb=# SELECT DISTINCT address FROM COMPANY;
                      address
----------------------------------------------------
 Rich-Mond
 Houston
 South-Hall
 California
 Norway
 Texas
(6 rows)

firstdb=# SELECT DISTINCT NAME FROM COMPANY;
 name
-------
 Teddy
 David
 Paul
 Kim
 Mark
 Allen
 James
(7 rows)

firstdb=#
firstdb=# SELECT * FROM COMPANY;
 id | name  | age |                      address                       | salary
----+-------+-----+----------------------------------------------------+--------
  1 | Paul  |  32 | California                                         |  20000
  2 | Allen |  25 | Texas                                              |  15000
  3 | Teddy |  23 | Norway                                             |  20000
  4 | Mark  |  25 | Rich-Mond                                          |  65000
  5 | David |  27 | Texas                                              |  85000
  6 | Kim   |  22 | South-Hall                                         |  45000
  7 | James |  24 | Houston                                            |  10000
  8 | Paul  |  24 | Houston                                            |  20000
  9 | James |  44 | Norway                                             |   5000
 10 | James |  45 | Texas                                              |   5000
 11 | James |  45 | Texas                                              |  15000
(11 rows)

firstdb=#

猜你喜欢

转载自blog.csdn.net/wy_hhxx/article/details/120725592