me

Postgresql


Postgres

安装请参见:https://gist.github.com/fwqaaq/d2a4b7c63a062cdc739c592921867625

FROM(确定表/视图) > JOIN(邻接 FROM 子句中的表) > WHERE(删选邻接之后的表) > GROUP BY(将数据分组以进行聚合计算) > HAVING(在数据分组和聚合之后对分组的结果筛选) > SELECT(选择要返回的列) > DISTINCT(删除重复的行) > ORDER BY(对结果进行排序) > LIMIT/OFFSET(限制返回的行数或跳过前面的行数)

单引号和双引号

双引号

在 postgres 中,标识符默认都当作小写(例如 FOO,则在 postgres 中则是 foo,SELECT FOO FROM database;)这里的 SQL 语句等同于 SELECT foo FROM database; 如果默认大写,则需要使用受限字符("")SELECT "FOO" FROM database;

单引号

在 Postgres 中,使用单引号('')包裹表示常量,例如(SELECT 'foo')。

$$

可以使用 $$ 表示多行字符串,以及嵌入引号

SELECT $$This is a
multiline "string"
using dollar-quoting.$$;

||

用于将两个字符串连接成一个字符串

SELECT first_name || ' ' || last_name AS full_name FROM users;

创建表单

CREATE TABLE table_name
(
column_name data_type column_constraint,
column_name data_type,
...,
table_constraint
);

字段级别的约束(column constraint)

表级别的约束(table constraint),CONSTRAINT 是声明一个约束的关键字,之后紧接约束的名称

CREATE TABLE employees( 
  employee_id INTEGER NOT NULL,
  first_name CHARACTER VARYING(20),
  last_name CHARACTER VARYING(25) NOT NULL,
  email CHARACTER VARYING(25) NOT NULL,
  phone_number CHARACTER VARYING(20),
  hire_date DATE NOT NULL,
  salary NUMERIC(8,2),
  commission_pct NUMERIC(2,2),
  manager_id INTEGER,
  department_id INTEGER,
  CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id), 
  CONSTRAINT emp_salary_min CHECK (salary > 0), 
  CONSTRAINT emp_email_uk UNIQUE (email), 
  CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), 
  CONSTRAINT emp_manager_fk FOREIGN KEY (manager_id) REFERENCES employees(employee_id)
);

视图

视图的概念:视图是基于 SQL 语句结果集的虚拟表。视图可以包含一个表的所有列或选定的几列,也可以来自一个或多个表,这取决于创建视图时所用的 SQL 查询。

CREATE VIEW department_average_salary AS
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;

视图作为虚拟表也可以像表一样使用,例如 JOIN、WHERE、GROUP BY、HAVING、ORDER BY 等。

索引

索引的概念:索引的主要目的就是为了加速查询操作,帮助数据库快速定位到表中的特定记录。索引是一种特殊的数据结构,它以某种方式引用表中的记录,以便于快速检索表中的特定信息。索引类似于书籍的目录,它们提供了关于数据的快速访问路径。

警告⚠️:索引不能用于较小的表上;大批量的插入、更新和删除操作的表上;也不应该使用在含大量 NULL 值的列上。