增加
进入到 PostgreSQL 的安装目录,并进入到 bin 目录,createdb 命令位于 PostgreSQL安装目录/bin 下,执行创建数据库的命令:
$ cd /Library/PostgreSQL/11/bin/ $ createdb -h localhost -p 5432 -U postgres runoobdb password ******
CREATE DATABASE dbname;
选择数据库
使用 \l 用于查看已经存在的数据库:
postgres=# \l
使用 \c + 数据库名 来进入数据库:
postgres=# \c runoobdb
连接数据库后面添加数据库名来选择数据库:
$ psql -h localhost -p 5432 -U postgress testdb Password for user postgress: ****
给定的数据库中创建一个新表
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);
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';
CREATE TABLE myschema.tb_test
(
id integer,
name character(254)
)
WITH (
OIDS=FALSE
);
ALTER TABLE myschema.tb_test
OWNER TO postgres;
创建模式
通过SQL命令行直接创建 -
CREATE SCHEMA myschema;
创建了一个表,表名为 COMPANY 表格,主键为 ID,NOT NULL 表示字段不允许包含 NULL 值:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
删除
使用SQL删除数据库
postgres=# drop database testdb;
DROP DATABASE
postgres=# drop table student2;
插入数据(INSERT语句)
语法:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
INSERT INTO EMPLOYEES( 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);
查询数据(SELECT语句)
SELECT语句用于从数据库表中检索数据。 数据以结果表格的形式返回。
语法:
SELECT "column1", "column2".."column" FROM "table_name";
这里,column1,column2,.. columnN
指定检索哪些数据的列。 如果要从表中检索所有字段,则必须使用以下语法:
SELECT * FROM "table_name";
执行以下查询从表中检索指定字段:
SELECT id,name FROM EMPLOYEES;
或者
SELECT ID, NAME, AGE, SALARY FROM EMPLOYEES;
更新数据(UPDATE语句)
UPDATE语句用于修改表中现有的记录。 要更新所选行,您必须使用WHERE子句,否则将更新所有行。
语法:
以下是update
语句的基本语法:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
删除数据(DELETE语句)
WHERE”子句用于指定删除所选记录的条件,如是不指定条件则将删除所有记录。
语法:
以下是DELETE语句的基本语法:
DELETE FROM table_name
WHERE [condition];
ORDER BY子句
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
:也是可选的。 它通过表达式按顺序对结果集进行排序。
升序排序 - ORDER BY [field] ASC
执行以下查询以按升序ORDER BY AGE
数据记录:
SELECT *
FROM EMPLOYEES
ORDER BY AGE ASC;
按照 age
字段升序排序
降序排序 - ORDER BY [field] DESC
执行以下查询以按降序ORDER BY name DESC
数据的记录:
SELECT *
FROM EMPLOYEES
ORDER BY name DESC;
按照 name
字段降序排序
GROUP BY子句
GROUP BY
子句用于将具有相同数据的表中的这些行分组在一起。 它与SELECT
语句一起使用。
GROUP BY
子句通过多个记录收集数据,并将结果分组到一个或多个列。 它也用于减少输出中的冗余。
语法:
SELECT column-list
FROM table_name
WHERE [conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
执行以下查询:
SELECT NAME, SUM(SALARY)
FROM EMPLOYEES
GROUP BY NAME;
如何减少冗余数据:
再来看看下面这个例子:
我们在“EMPLOYEES
”表中插入一些重复的记录。添加以下数据:
INSERT INTO EMPLOYEES VALUES (6, '李洋', 24, '深圳市福田区中山路', 135000);
INSERT INTO EMPLOYEES VALUES (7, 'Manisha', 19, 'Noida', 125000);
INSERT INTO EMPLOYEES VALUES (8, 'Larry', 45, 'Texas', 165000);
执行以下查询以消除冗余:
SELECT NAME, SUM(SALARY)
FROM EMPLOYEES
GROUP BY NAME;
使用GROUP BY NAME
时,可以看到重复的名字数据记录被合并。 它指定GROUP BY
减少冗余。
Having子句
HAVING子句与GROUP BY子句组合使用,用于选择函数结果满足某些条件的特定行。
语法:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
HAVING子句与GROUP BY子句组合使用,用于选择函数结果满足某些条件的特定行。
语法:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
在“EMPLOYEES
”表中插入一些重复的记录,首先添加以下数据:
INSERT INTO EMPLOYEES VALUES (7, 'Minsu', 24, 'Delhi', 135000);
INSERT INTO EMPLOYEES VALUES (8, 'Manisha', 19, 'Noida', 125000);
执行以下查询表“EMPLOYEES
”中name
字段值计数大于1
的名称。
SELECT NAME,COUNT (NAME)
FROM EMPLOYEES
GROUP BY NAME HAVING COUNT (NAME) > 1;
PostgreSQL条件查询
Having子句
HAVING子句与GROUP BY子句组合使用,用于选择函数结果满足某些条件的特定行。
语法:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
将显示名称(name
)数量小于2
的记录。
执行以下查询:
SELECT NAME
FROM EMPLOYEES
GROUP BY NAME HAVING COUNT (NAME) < 2;
在“EMPLOYEES
”表中插入一些重复的记录,首先添加以下数据:
INSERT INTO EMPLOYEES VALUES (7, 'Minsu', 24, 'Delhi', 135000);
INSERT INTO EMPLOYEES VALUES (8, 'Manisha', 19, 'Noida', 125000);
查询表“EMPLOYEES
”中name
字段值计数大于1
的名称。
SELECT NAME,COUNT (NAME)
FROM EMPLOYEES
GROUP BY NAME HAVING COUNT (NAME) > 1;
AND条件
AND条件与WHERE
子句一起使用,以从表中的多个列中选择唯一的数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition]
AND [search_condition];
查询所有ID小于4
并且薪水大于120000
的员工数据信息,执行以下查询语句:
SELECT *
FROM EMPLOYEES
WHERE SALARY > 120000
AND ID <= 4;
OR条件
OR条件与WHERE
子句一起使用,以从表中的一列或多列列中选择唯一数据。
语法
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition]
OR [search_condition];
查询名字是Minsu
或者地址为Noida
员工信息,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE NAME = 'Minsu'
OR ADDRESS = 'Noida';
AND & OR条件
AND&OR条件在仅一个查询中提供了AND
和OR
条件的优点。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] AND [search_condition]
OR [search_condition];
查询名字的值为Minsu
和地址的值为’Delhi
‘,或者ID值大于等8
的记录信息,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE (NAME = 'Minsu' AND ADDRESS = 'Delhi')
OR (ID>= 8);
NOT条件
NOT条件与WHERE子句一起使用以否定查询中的条件。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] NOT [condition];
查询那些地址不为NULL
的记录信息,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE address IS NOT NULL ;
查询那些年龄不是21
和24
的所有记录,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE age NOT IN(21,24) ;
LIKE条件
LIKE条件与WHERE子句一起用于从指定条件满足LIKE
条件的表中获取数据。
语法
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] LIKE [condition];
示例1
查询名字以Ma
开头的数据记录,如下查询语句:
SELECT *
FROM EMPLOYEES
WHERE NAME LIKE 'Ma%';
示例2
查询名字以su
结尾的数据记录,如下查询语句:
SELECT *
FROM EMPLOYEES
WHERE NAME LIKE '%su';
示例3
查询地址中含有大道
的数据记录,如下查询语句:
SELECT *
FROM EMPLOYEES
WHERE address LIKE '%大道%';
IN条件
IN条件与WHERE子句一起使用,从指定条件满足IN
条件的表中获取数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] IN [condition];
查询employee
表中那些年龄为19
,21
的员工信息,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE AGE IN (19, 21);
NOT IN条件
NOT IN条件与WHERE子句一起使用,以从指定条件否定IN
条件的表中获取数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] NOT IN [condition];
查询那些年龄不是19
,25
的数据,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE AGE NOT IN (19, 25);
查询那些名字不是Minsu
,Maxsu
的数据信息,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE name NOT IN ('Maxsu', 'Minsu');
BETWEEN条件
BETWEEN条件与WHERE子句一起使用,以从两个指定条件之间的表中获取数据。
语法:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition] BETWEEN [condition];
查询employees
表中年龄在24
~27
之间(含24
,27
)的数据信息,执行以下查询:
SELECT *
FROM EMPLOYEES
WHERE AGE BETWEEN 24 AND 27;
参考链接:
原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/postgresql/postgresql-between-condition.html