keyfall / xuexibiji

3 stars 0 forks source link

postgresql #40

Open keyfall opened 4 years ago

keyfall commented 4 years ago

安装看#39

换成数据库超级用户postgres sudo -i -u postgres

使用psql进入数据库

~$ psql
psql (9.5.17)
Type "help" for help.

postgres=# 

创建数据库

使用 CREATE DATABASE SQL 语句来创建 postgres=# CREATE DATABASE runoobdb;

createdb 命令创建数据库 createdb 是一个 SQL 命令 CREATE DATABASE 的封装。 image

pgadmin工具创建数据库

选择数据库

\l 查看已经存在的数据库

\c+数据库名进入数据库

删除数据库

DROP DATABASE 删除数据库 DROP DATABASE 会删除数据库的系统目录项并且删除包含数据的文件目录。 DROP DATABASE 只能由超级管理员或数据库拥有者执行。 DROP DATABASE [ IF EXISTS ] name 参数IF EXISTS:如果数据库不存在则发出提示信息,而不是错误信息。

dropdb 命令删除数据库 dropdb 命令只能由超级管理员或数据库拥有者执行。 image

创建数据库表

CREATE TABLE 是一个关键词,用于告诉数据库系统将创建一个数据表。 表名字必需在同一模式中的其它表、 序列、索引、视图或外部表名字中唯一。

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

删除数据库表

DROP TABLE 语句来删除表格,包含表格数据、规则、触发器等 DROP TABLE table_name;

keyfall commented 4 years ago

模式 模式例子

keyfall commented 4 years ago

insert into

# 指定字段
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);

#插入全部值
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

可以插入多行,用逗号分隔

runoobdb=# 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');

select查询

SELECT column1, column2,...columnN FROM table_name;

运算符

update 修改

runoobdb=# UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;

delete删除

runoobdb=# DELETE FROM COMPANY WHERE ID = 2;

like模糊查询

使用%,占位多个 使用_,占位一个 image

limit和offset

offset:从第几条开始提取,初始是0 limit:提取多少条数据 第三位开始提取 3 个记录: runoobdb=# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

order by排序

ASC 表示升序,DESC 表示降序。 runoobdb=# SELECT * FROM COMPANY ORDER BY AGE ASC;

group by分组

runoobdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

keyfall commented 4 years ago

with子句 通过with子句,使得复杂的大型查询分解为更简单的表单

With CTE AS
(Select
 ID
, NAME
, AGE
, ADDRESS
, SALARY
FROM COMPANY )
Select * From CTE;`

这里Select ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY变成CTE,在后面Select * From CTE使用

having子句 筛选分组后的各组数据 SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;

distinct关键字 去除重复记录,与select一起使用 SELECT DISTINCT name FROM COMPANY;

keyfall commented 4 years ago

with子句 将复杂的大型查询分解为更简单的表单

With CTE AS
(Select
 ID
, NAME
, AGE
, ADDRESS
, SALARY
FROM COMPANY )
Select * From CTE;

令语句结果变成CTE表,下面使用CTE去调用

having子句 筛选分组后的各组数据。 SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;

distinct关键字 DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录。 runoobdb=# SELECT DISTINCT name FROM COMPANY;