【笔记】PostgreSQL数据库命令整理及使用样例

秒速五厘米 2022-04-06 03:58 411阅读 0赞

文章目录

      • 前言
      • 数据库 表格操作 (创建、切换、查看)
      • 数据操作(增删改查)
      • 条件查询 / 复杂查询
      • 连接

在这里插入图片描述

前言

自从MySQL被Oracle收购之后,Postgresql逐渐成为主流关系型数据库。
查看本笔记需要有一定的MySQL基础。
PS: 数据宝贵,文档中涉及到删除的内容,建议进行逻辑删除。表格添加is_delete字段。

数据库 表格操作 (创建、切换、查看)

  1. # 连接postgres
  2. # 建议 方法一
  3. su - postgres
  4. # 非建议 方法二
  5. su root # 有些酌情切换权限
  6. su postgres
  7. # 进入数据库
  8. psql
  9. # 或者
  10. psql -d databasename
  11. # 退出
  12. \q
  13. # 退出bash
  14. exit
  15. # 创建数据库
  16. CREATE DATABASE database_name;
  17. create database testdb; # 示例
  18. # 查看数据库
  19. \l
  20. # 删除数据库
  21. DROP DATABASE database_name;
  22. drop database testdb; # 示例
  23. # 切换数据库
  24. \c [database_name]
  25. \c ×××_db; # 示例
  26. # 查看当前数据库表格
  27. \dt
  28. # 切换用户
  29. \c - [user_name]
  30. \c - ×××_user; # 示例
  31. # 创建表格
  32. CREATE TABLE table_name(
  33. column1 datatype,
  34. column2 datatype,
  35. column3 datatype,
  36. .....
  37. columnN datatype,
  38. PRIMARY KEY( one or more columns )
  39. );
  40. CREATE TABLE public.student
  41. (
  42. id integer NOT NULL,
  43. name character(100),
  44. subjects character(1),
  45. CONSTRAINT student2_pkey PRIMARY KEY (id)
  46. )
  47. WITH (
  48. OIDS=FALSE
  49. );
  50. ALTER TABLE public.student2
  51. OWNER TO postgres;
  52. COMMENT ON TABLE public.student2
  53. IS '这是一个学生信息表'; # 示例 学生表
  54. # 删除表格
  55. DROP TABLE table_name;
  56. drop table student2;
  57. 模式(也叫架构)是指定的表集合。
  58. 模式还可以包含视图,索引,序列,数据类型,运算符和函数。
  59. 创建模式在PostgreSQL中,CREATE SCHEMA语句用于创建模式。
  60. 模式不能嵌套。
  61. 使用架构的优点:
  62. 模式有助于多用户使用一个数据库,而不会互相干扰。
  63. 它将数据库对象组织成逻辑组,使其更易于管理。
  64. 可以将第三方模式放入单独的模式中,以避免与其他对象的名称相冲突。
  65. 语法:
  66. # 创建模式
  67. CREATE SCHEMA schema_name;
  68. CREATE SCHEMA myschema; # 示例
  69. # 在模式中创建表
  70. -- Table: myschema.tb_test
  71. -- DROP TABLE myschema.tb_test;
  72. CREATE TABLE myschema.tb_test
  73. (
  74. id integer,
  75. name character(254)
  76. )
  77. WITH (
  78. OIDS=FALSE
  79. );
  80. ALTER TABLE myschema.tb_test
  81. OWNER TO postgres;

数据操作(增删改查)

  1. # 增
  2. # 插入数据
  3. INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
  4. VALUES (value1, value2, value3,...valueN);
  5. INSERT INTO EMPLOYEES( ID, NAME, AGE, ADDRESS, SALARY)
  6. VALUES
  7. (1, 'Maxsu', 25, '海口市人民大道2880号', 109990.00 ),
  8. (2, 'minsu', 25, '广州中山大道 ', 125000.00 ),
  9. (3, '李洋', 21, '北京市朝阳区', 185000.00),
  10. (4, 'Manisha', 24, 'Mumbai', 65000.00),
  11. (5, 'Larry', 21, 'Paris', 85000.00); # 示例
  12. # 查询数据
  13. SELECT "column1", "column2".."column" FROM "table_name";
  14. SELECT * FROM "table_name";
  15. SELECT id,name FROM EMPLOYEES; # 示例
  16. SELECT ID, NAME, AGE, SALARY FROM EMPLOYEES; # 示例
  17. # 改
  18. # 更新数据
  19. UPDATE table_name
  20. SET column1 = value1, column2 = value2...., columnN = valueN
  21. WHERE [condition];
  22. # 删
  23. # 逻辑删除 更新 is_delete字段。没有的话,添加字段
  24. update table_name set is_delete = 1 where [condition];
  25. # 不建议的删除方法
  26. DELETE FROM table_name WHERE [condition];
  27. DELETE FROM EMPLOYEES WHERE ID = 1; # 示例

条件查询 / 复杂查询

  1. # order by
  2. # 在一列或多列的基础上进行(升序/降序)排序。
  3. SELECT column-list
  4. FROM table_name
  5. [WHERE condition]
  6. [ORDER BY column1, column2, .. columnN] [ASC | DESC];
  7. # 升序 asc
  8. # 降序 desc
  9. SELECT * FROM EMPLOYEES ORDER BY name DESC;
  10. # group by
  11. # 将具有相同数据的表中的这些行分组在一起 配合select一起使用
  12. SELECT column-list
  13. FROM table_name
  14. WHERE [conditions ]
  15. GROUP BY column1, column2....columnN
  16. ORDER BY column1, column2....columnN
  17. SELECT NAME, SUM(SALARY) FROM EMPLOYEES GROUP BY NAME; # 示例 可以消除重复
  18. 消除重复冗余示例:https://www.yiibai.com/postgresql/postgresql-group-by-clause.html
  19. # having
  20. # HAVING子句与GROUP BY子句组合使用,用于选择函数结果满足某些条件的特定行
  21. SELECT column1, column2
  22. FROM table1, table2
  23. WHERE [ conditions ]
  24. GROUP BY column1, column2
  25. HAVING [ conditions ]
  26. ORDER BY column1, column2
  27. # 示例 显示名称(name)数量小于2的记录
  28. SELECT NAME FROM EMPLOYEES GROUP BY NAME HAVING COUNT (NAME) < 2;
  29. # 示例 查询表“EMPLOYEES”中name字段值计数大于1的名称
  30. SELECT NAME,COUNT (NAME) FROM EMPLOYEES GROUP BY NAME HAVING COUNT (NAME) > 1;
  31. # 条件
  32. # 条件用于从数据库获取更具体的结果。 它们通常与WHERE子句一起使用。 具有子句的条件就像双层过滤器。
  33. # AND
  34. SELECT column1, column2, ..... columnN
  35. FROM table_name
  36. WHERE [search_condition]
  37. AND [search_condition];
  38. # 示例 所有ID小于4并且薪水大于120000的员工数据信息
  39. SELECT * FROM EMPLOYEES WHERE SALARY > 120000 AND ID <= 4;
  40. # OR
  41. # OR条件与WHERE子句一起使用,以从表中的一列或多列列中选择唯一数据
  42. SELECT column1, column2, ..... columnN
  43. FROM table_name
  44. WHERE [search_condition]
  45. OR [search_condition];
  46. # 示例 查询名字是Minsu或者地址为Noida员工信息
  47. SELECT *FROM EMPLOYEES WHERE NAME = 'Minsu' OR ADDRESS = 'Noida';
  48. # AND & OR
  49. # AND&OR条件在仅一个查询中提供了AND和OR条件的优点
  50. SELECT column1, column2, ..... columnN
  51. FROM table_name
  52. WHERE [search_condition] AND [search_condition]
  53. OR [search_condition];
  54. # 示例 查询名字的值为Minsu和地址的值为’Delhi‘,或者ID值大于等8的记录信息
  55. SELECT *FROM EMPLOYEES WHERE (NAME = 'Minsu' AND ADDRESS = 'Delhi') OR (ID>= 8);
  56. # NOT
  57. # NOT条件与WHERE子句一起使用以否定查询中的条件
  58. SELECT column1, column2, ..... columnN
  59. FROM table_name
  60. WHERE [search_condition] NOT [condition];
  61. # 示例 查询那些地址不为NULL的记录信息
  62. SELECT * FROM EMPLOYEES WHERE address IS NOT NULL ;
  63. # 示例 查询那些年龄不是21和24的所有记录
  64. SELECT * FROM EMPLOYEES WHERE age NOT IN(21,24) ;
  65. # LIKE
  66. # LIKE条件与WHERE子句一起用于从指定条件满足LIKE条件的表中获取数据
  67. SELECT column1, column2, ..... columnN
  68. FROM table_name
  69. WHERE [search_condition] LIKE [condition];
  70. # 示例 查询名字以Ma开头的数据记录
  71. SELECT * FROM EMPLOYEES WHERE NAME LIKE 'Ma%';
  72. # 示例 查询名字以su结尾的数据记录,如下查询语句:SELECT *
  73. FROM EMPLOYEES WHERE NAME LIKE '%su';
  74. # 示例 查询地址中含有大道的数据记录,如下查询语句:SELECT *
  75. FROM EMPLOYEES WHERE address LIKE '%大道%';
  76. # IN
  77. # IN条件与WHERE子句一起使用,从指定条件满足IN条件的表中获取数据
  78. SELECT column1, column2, ..... columnN
  79. FROM table_name
  80. WHERE [search_condition] IN [condition];
  81. # 示例 查询employee表中那些年龄为19,21的员工信息
  82. SELECT * FROM EMPLOYEES WHERE AGE IN (19, 21);
  83. # NOT IN
  84. # NOT IN条件与WHERE子句一起使用,以从指定条件否定IN条件的表中获取数据。
  85. SELECT column1, column2, ..... columnN
  86. FROM table_name
  87. WHERE [search_condition] NOT IN [condition];
  88. # 示例 查询那些年龄不是19,25的数据
  89. SELECT * FROM EMPLOYEES WHERE AGE NOT IN (19, 25);
  90. # 示例 查询那些名字不是Minsu,Maxsu的数据信息
  91. SELECT * FROM EMPLOYEES WHERE name NOT IN ('Maxsu', 'Minsu');
  92. # BETWEEN
  93. # BETWEEN条件与WHERE子句一起使用,以从两个指定条件之间的表中获取数据。
  94. SELECT column1, column2, ..... columnN
  95. FROM table_name
  96. WHERE [search_condition] BETWEEN [condition];
  97. # 示例 查询employees表中年龄在24~27之间(含24,27)的数据
  98. SELECT * FROM EMPLOYEES WHERE AGE BETWEEN 24 AND 27;

连接

连接类型:

  • 内连接(INNER JOIN)
  • 左外连接(LEFT OUTER JOIN)
  • 右外连接(RIGHT OUTER JOIN)
  • 全连接(FULL OUTER JOIN)
  • 跨连接(CROSS JOIN)

    INNER JOIN

    内连接也称连接或简单连接。 这是最常见的连接类型。 此连接返回满足连接条件的多个表中的所有行。

    SELECT table1.columns, table2.columns
    FROM table1
    INNER JOIN table2
    ON table1.common_filed = table2.common_field;

    连接两个表

    SELECT EMPLOYEES.ID, EMPLOYEES.NAME, DEPARTMENT.DEPT FROM EMPLOYEES
    INNER JOIN DEPARTMENT ON EMPLOYEES.ID = DEPARTMENT.ID;

    左外连接

    左外连接返回从“ON”条件中指定的左侧表中的所有行,只返回满足条件的另一个表中的行

    SELECT table1.columns, table2.columns
    FROM table1
    LEFT OUTER JOIN table2
    ON table1.common_filed = table2.common_field;

    示例

    SELECT EMPLOYEES.ID, EMPLOYEES.NAME, DEPARTMENT.DEPT FROM EMPLOYEES
    LEFT OUTER JOIN DEPARTMENT ON EMPLOYEES.ID = DEPARTMENT.ID;

    右外连接

    右外连接返回从“ON”条件中指定的右侧表中的所有行,只返回满足条件的另一个表中的行

    SELECT table1.columns, table2.columns
    FROM table1
    RIGHT OUTER JOIN table2
    ON table1.common_filed = table2.common_field;

    示例

    SELECT EMPLOYEES.ID, EMPLOYEES.NAME, DEPARTMENT.DEPT FROM EMPLOYEES
    RIGHT OUTER JOIN DEPARTMENT ON EMPLOYEES.ID = DEPARTMENT.ID;

    全外连接

    全外连接从左表和左表中返回所有行。 它将NULL置于不满足连接条件的位置。

    SELECT table1.columns, table2.columns
    FROM table1
    FULL OUTER JOIN table2
    ON table1.common_filed = table2.common_field;

    示例

    SELECT EMPLOYEES.ID, EMPLOYEES.NAME, DEPARTMENT.DEPT FROM EMPLOYEES
    FULL OUTER JOIN DEPARTMENT ON EMPLOYEES.ID = DEPARTMENT.ID;

    交叉连接 / 跨连接

    跨连接(CROSS JOIN)将第一个表的每一行与第二个表的每一行相匹配。

    它也被称为笛卡尔积。 如果table1具有“x”行,而table2具有“y”行,则所得到的表将具有(x * y)行。

    SELECT coloums
    FROM table1
    CROSS JOIN table2

    示例

    SELECT NAME, DEPT
    FROM EMPLOYEES
    CROSS JOIN DEPARTMENT;

样例整理自:https://www.yiibai.com/postgresql

发表评论

表情:
评论列表 (有 0 条评论,411人围观)

还没有评论,来说两句吧...

相关阅读