目录
- PostgreSQL学习笔记
-
- 一、PostgreSQL创建、删除数据库(表)、架构
- 二、PostgreSQL数据类型
- 三、PostgreSQL查询工具
- 四、PostgreSQL条件查询
- 五、PostgreSQL连接(内连接)
- 六、PostgreSQL高级
- 七、Python链接PostgreSQL
- 八、c# 连接pgsql数据库
- 九、c# 使用ef连接数据库postgreSQL
- 十、问题处理
PostgreSQL学习笔记
一、PostgreSQL创建、删除数据库(表)、架构
1、创建数据库 CREATE DATABASE
在PostgreSQL中,可以使用CREATE DATABASE命令创建数据库。
语法:
CREATE DATABASE database_name;
这里,database_name是指定要创建的数据库的名称。
PostgreSQL使用查询工具创建数据库
打开SQL Shell(psql),执行以下创建语句
CREATE DATABASE database_name;
2、查看数据库
postgres=# \l
3、删除数据库
postgres=# drop database testdb;
4、创建表
在PostgreSQL中,CREATE TABLE语句用于在任何给定的数据库中创建一个新表。
语法:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);
PostgreSQL使用UI创建表 -
首先选择要创建表的数据库。
左键单击与所选数据库关联的框类型结构,将看到目录和模式(架构)。
左键单击与模式(架构)关联的框类型结构。现在可以看到 public 。
左键单击与公共( public )关联的框类型结构,就可以看到有数据表。
选择数据表,右键单击数据表,会得到一个新的弹出表框,创建所需的表。
示例:
CREATE TABLE public.student2
(
id integer NOT NULL,
name character(100),
subjects character(1),
CONSTRAINT student2_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.student2
OWNER TO postgres;
COMMENT ON TABLE public.student2
IS '这是一个学生信息表2';
5、删除表
postgres=#
postgres=# drop table student2;
DROP TABLE
postgres=#
6、架构
模式(也叫架构)是指定的表集合。 它还可以包含视图,索引,序列,数据类型,运算符和函数。
创建模式
在PostgreSQL中,CREATE SCHEMA语句用于创建模式。 模式不能嵌套。
语法:
CREATE SCHEMA schema_name;
通过SQL命令行直接创建 -
CREATE SCHEMA myschema;
示例:
-- Table: myschema.tb_test
-- DROP TABLE myschema.tb_test;
CREATE TABLE myschema.tb_test
(
id integer,
name character(254)
)
WITH (
OIDS=FALSE
);
ALTER TABLE myschema.tb_test
OWNER TO postgres;
二、PostgreSQL数据类型
PostgreSQL中主要有三种类型的数据类型:
数值数据类型
字符串数据类型
日期/时间数据类型
1、数值数据类型
decimal(size,d)
numeric(size,d)
容纳带有小数的数字。
“size” 规定数字的最大位数。“d” 规定小数点右侧的最大位数。
2、字符串数据类型
3、日期/时间数据类型
4、 一些其他数据类型
三、PostgreSQL查询工具
插入INSERT
查询SELECT
更新UPDATE
删除 DELETE
ORDER BY子句
分组(GROUP BY子句)
Having字句
1、插入INSERT
在PostgreSQL中, INSERT 查询用于在表中插入新行。 您可以一次插入单行或多行到表中。
语法:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
注意:column1, column2, column3,…columnN是要插入数据的表中的列的名称。
示例:
CREATE TABLE public.table01
(
ID integer NOT NULL,
NAME character(100),
AGE integer,
ADDRESS character(100),
SALARY decimal
);
INSERT INTO public.table01( ID, NAME, AGE, ADDRESS, SALARY)
VALUES
(1, 'Maxsu', 25, '海口市人民大道2880号', 109990.00 ),
(2, 'minsu', 25, '广州中山大道 ', 125000.00 ),
(3, '李洋', 21, '北京市朝阳区', 185000.00),
(4, 'Manisha', 24, 'Mumbai', 65000.00),
(5, 'Larry', 21, 'Paris', 85000.00);
2、查询SELECT
在PostgreSQL中,SELECT语句用于从数据库表中检索数据。 数据以结果表格的形式返回。 这些结果表称为结果集。
语法:
SELECT "column1", "column2".."column" FROM "table_name";
这里,column1,column2,… columnN指定检索哪些数据的列。 如果要从表中检索所有字段,则必须使用以下语法:
SELECT * FROM "table_name";
示例:
执行以下查询从表中检索指定字段:
SELECT id,name FROM table01;
3、更新UPDATE
在PostgreSQL中,UPDATE语句用于修改表中现有的记录。 要更新所选行,您必须使用WHERE子句,否则将更新所有行。
语法:
以下是 update 语句的基本语法:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
示例
将ID为1的员工(“EMPLOYEES”表)记录更新AGE的值为29和SALARY的值为9800。
UPDATE public.EMPLOYEES_test
SET age = 29, salary = 9800
WHERE id=1;
更改前:
SELECT * FROM public.employees_test
更改后:
您可以看到ID为1的记录的已更新:AGE和SALARY列。
4、删除 DELETE
DELETE语句用于从表中删除现有记录。 “WHERE”子句用于指定删除所选记录的条件,如是不指定条件则将删除所有记录。
语法:
以下是DELETE语句的基本语法:
DELETE FROM table_name
WHERE [condition];
示例:
DELETE FROM public.EMPLOYEES_test
WHERE ID = 1;
注意:如果不使用“WHERE”条件,整个表中的记录都将被删除。
5、 ORDER BY子句
ostgreSQL ORDER BY 子句用于按升序或降序对数据进行排序。数据在一列或多列的基础上进行排序。
语法:
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
参数说明:
column_list:它指定要检索的列或计算。
table_name:它指定要从中检索记录的表。FROM子句中必须至少有一个表。
WHERE conditions:可选。 它规定必须满足条件才能检索记录。
ASC:升序。也是可选的。它通过表达式按升序排序结果集(默认,如果没有修饰符是提供者)。
DESC:降序。也是可选的。 它通过表达式按顺序对结果集进行排序。
示例:
SELECT *
FROM public.EMPLOYEES_test
ORDER BY AGE ASC;
6、 分组(GROUP BY子句)
PostgreSQL GROUP BY 子句用于将具有相同数据的表中的这些行分组在一起。 它与SELECT语句一起使用。
GROUP BY 子句通过多个记录收集数据,并将结果分组到一个或多个列。 它也用于减少输出中的冗余。
语法:
SELECT column-list
FROM table_name
WHERE [conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
注意:在 GROUP BY 多个列的情况下,您使用的任何列进行分组时,要确保这些列应在列表中可用。
示例:
SELECT AGE, SUM(SALARY)
FROM public.EMPLOYEES_test
GROUP BY AGE;
如何减少冗余数据:
再来看看下面这个例子:
我们在“EMPLOYEES”表中插入一些重复的记录。添加以下数据:
INSERT INTO public.EMPLOYEES_test VALUES (6, '李洋', 24, '深圳市福田区中山路', 135000);
INSERT INTO public.EMPLOYEES_test VALUES (7, 'Manisha', 19, 'Noida', 125000);
INSERT INTO public.EMPLOYEES_test VALUES (8, 'Larry', 45, 'Texas', 165000);
INSERT INTO public.EMPLOYEES_test( ID, NAME, AGE, ADDRESS, SALARY)
VALUES
(6, '李洋', 24, '深圳市福田区中山路', 135000),
(7, 'Manisha', 19, 'Noida', 125000),
(8, 'Larry', 45, 'Texas', 165000);
SELECT * FROM public.EMPLOYEES_test; //检索所有字段
执行以下查询以消除冗余:
SELECT NAME, SUM(SALARY)
FROM public.EMPLOYEES_test
GROUP BY NAME;
上面的SQL语句是按名字 ( NAME ) 执行分组统计每个名字的薪水总额,如:两个名字叫作李洋的薪水总额是:320000等等,得到结果如下 -
7、Having字句
在PostgreSQL中,HAVING子句与GROUP BY子句组合使用,用于选择函数结果满足某些条件的特定行。
语法:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
示例1:
在这个例子中,它将显示名称(name)数量小于2的记录。
执行以下查询:
SELECT NAME
FROM public.EMPLOYEES_test
GROUP BY NAME HAVING COUNT (NAME) < 2;
示例2:
执行以下查询表“EMPLOYEES”中name字段值计数大于1的名称。
SELECT NAME,COUNT (NAME)
FROM public.EMPLOYEES_test
GROUP BY NAME HAVING COUNT (NAME) > 1;
四、PostgreSQL条件查询
AND 条件
OR 条件
AND & OR 条件
NOT 条件
LIKE 条件
IN 条件
NOT IN 条件
BETWEEN 条件
检索所有字段
SELECT * FROM public.EMPLOYEES_test;
1、AND 条件
PostgreSQL AND条件与WHERE子句一起使用,以从表中的多个列中选择唯一的数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition]
AND [search_condition];
示例:
下面来查询所有ID小于4并且薪水大于120000的员工数据信息,执行以下查询语句:
SELECT *
FROM public.EMPLOYEES_test
WHERE SALARY > 120000
AND ID <= 4;
2、OR 条件
PostgreSQL OR条件与WHERE子句一起使用,以从表中的一列或多列列中选择唯一数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition]
OR [search_condition];
示例:
查询名字是李洋或者地址为Noida员工信息,执行以下查询:
SELECT *
FROM public.EMPLOYEES_test
WHERE NAME = '李洋'
OR ADDRESS = 'Noida';
3、AND & OR 条件
PostgreSQL AND&OR条件在仅一个查询中提供了AND和OR条件的优点。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] AND [search_condition]
OR [search_condition];
示例:
查询名字的值为李洋和地址的值为’北京市朝阳区‘,或者ID值大于等7的记录信息,执行以下查询:
SELECT *
FROM public.EMPLOYEES_test
WHERE (NAME = '李洋' AND ADDRESS = '北京市朝阳区')
OR (ID>= 7);
4、NOT 条件
PostgreSQL NOT条件与WHERE子句一起使用以否定查询中的条件。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] NOT [condition];
示例:
查询那些年龄不是21和24的所有记录,执行以下查询:
SELECT *
FROM public.EMPLOYEES_test
WHERE age NOT IN(21,24);
5、LIKE 条件
PostgreSQL LIKE条件与WHERE子句一起用于从指定条件满足LIKE条件的表中获取数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] LIKE [condition];
示例1:
查询名字以Ma开头的数据记录,如下查询语句:
SELECT *
FROM public.EMPLOYEES_test
WHERE NAME LIKE 'Ma%';
‘Ma%’——以Ma开头
‘%su’——以su结尾
%大道% ’——含有大道
6、IN 条件
PostgreSQL IN条件与WHERE子句一起使用,从指定条件满足IN条件的表中获取数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] IN [condition];
示例:
SELECT *
FROM public.EMPLOYEES_test
WHERE AGE IN (19, 21);
7、NOT IN 条件
PostgreSQL NOT IN条件与WHERE子句一起使用,以从指定条件否定 IN 条件的表中获取数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] NOT IN [condition];