使用 pgAdmin 工具操作数据库对象
使用sql语言删除修改操作数据库对象
选中对应的数据库,打垮工具栏下的sql编辑器。
create database db_test; -- 注释: 创建数据库create database db_test2 with owner=postgres encoding="utf-8";alter database db_test rename to db_test1; -- 修改数据库名称
使用 pgAdmin 工具操作数据表对象
使用sql语言操作数据表对象
选中模式/架构,打开sql编辑器
create table police(id int,name varchar(30),birthday date,score numeric(5,2))alter table studentl rename to student2; -- 修改表名称alter table student1 rename id to bh; -- 修改字段名称alter table student1 alter column name type varchar(40); -- 修改字段属性alter table student1 drop column birthday; -- 删除子字段alter table student1 add column address varchar(200); --添加字段drop table student1; -- 删除数据表
数据类型
任意任意精度浮点数类型:
REAL: 6位十进制数字精度
NUMERIC(m,n) : 任意精度类型, 最常用
时间类型
TIME: 只用于一日内的时间 8字节 举例 ‘10:05:08’
DATE: 只用于日期 4字节 举例 ‘1987-04-23’
TIMESTAMP: 时间戳 日期和时间 8字节 ‘1987-04-23 10:05:08’
字符串类型
CHAR(n) / CHARACTER(n) : 固定长度字符串,不足补空白
VARCHAR(n)/ CHARACTER VARYING(n) : 变长字符串,有长度限制
TEXT: 变长字符串,无长度限制
选择正确的数据类型:
主要目的: 优化存储,提高数据库性能
正确使用整数类型和浮点数类型
运算符介绍
算术运算符
比较运算符
= 等于
<>或者 != 不等于
<= 小于等于
>= 大于等于
> 大于
< 小于
LEAT 在有两个或者多个参数时,返回最小值
GREATEST’ 在有两个或者多个参数时,返回最大值
BETWEEN AND 判断一个值是否落在两个值之间, 包含两边边界
IN 判断一个值是否是IN列表中的任意一个值
LIKE 通配符匹配
- 如果比较的两个参数有一个为空,那么返回空。
- 如果比较的两个参数一个是字符串另一个为数值,那么就将字符串转化成数字与另一个进行比较。
逻辑运算符
NOT 非
AND 且
OR 或
运算符优先级
| 优先级 | 运算符 |
|---|---|
| 最低 | = |
| 优先级向下依次递增 | OR |
| AND | |
| NOT | |
| BRTWEEN,CASE,WHEN,THEN,LESE | |
| =,>=,> , <=, < ,<>,!=,IS,like,in | |
| -,+ | |
| *, /, %, | |
| -(负号) | |
| 最高 | ! |
postgreSQL函数,索引,视图
常用函数
函数作用
常用数值函数
- avg 返回某列平均值
- count 返回某列行数
- max 返回某列最大值
- min 返回某列最小值
- sum返回某列的值之和 ```sql select * from employee; select max(e_salayry)from employee;
<a name="KOrG8"></a>### 常用字符串函数- length(s) 计算字符串长度- concat(s1,s2,...) 字符串合并函数- ltrim(s)/ rtrim(s)/trim(s) 删除字符串前后空格函数- replace(s,s1,s2) 字符串替换函数- substring(s,n,len) 获取子串函数- s1||s2 拼接两个字符串```sqlselect e_name, length(e_name), concat(e_name,birthday) from employee;
常用日期和时间函数
- extract(type from d) 获取日期指定值函数
- current_date 获取当前日期函数
- current_time 获取当前日期函数
- now 获取当前日期时间函数
select current_date,current_time, now();select e_birthday, extract(year from e_birthday ),extract(month from e_birthday) from employee;
自定义函数
函数的创建
```sql create function — 声明创建函数 add(integer,integer) — 定义函数名称,参数类型 returns integer — 定义函数返回值 as ‘select $1 +$2;’ — 定义函数体 language sql — 定义实现函数的语言 returns null on null input — 定义参数为null时处理情况
<a name="HKHMU"></a>### 函数的删除drop function 函数名 : 删除函数<a name="y8zmp"></a>## 索引介绍| 索引名称 | 使用场景 || --- | --- || B-tree | 适合处理那些能够顺序存储数据 || hash索引 | 只能狐狸简单的等于比较 || gist索引 | 一种索引架构 || gin索引 | 反转索引,处理包含多个值的键 |使用索引的优点:- 提高了数据的查询速度- 加快表与表之间的连接缺点:- 创建和维护索引需要耗费时间- 需要占用磁盘空间<a name="NAAdD"></a>## 视图介绍<a name="nuLGl"></a>### 视图的含义视图是以多张真实表进行关联的,<a name="m5m6x"></a>### 视图的创建与删除```sqlcreate view v_emp as select e_no, e_namefrom employee where e_name = '小王';select * from v_emp;drop view viwe v_emp;
视图的作用
简单化
安全性
逻辑数据独立性
数据操作和数据表约束介绍
简单数据插入
create table student(id int,name varchar(30),birthday date,score numeric(5,2))insert into student values (1,'zhangsan','1990-01-01',null); -- 数据表有多少字段,就得穿多少个参数insert into student(id, name) values(2,'lisi'); -- 指定字段传参
批量数据插入
-- insert批量插入数据语法格式insert into student (id,name,birthday) values(3,'zhangsan1','1990-02-01'),(4,'zhagnsan2','1990-02-04'),(5,'zhangsan3','1991-04-04');-- select批量插入数据语法格式:insert into table1 (属性列表) select 属性列表 from table2 where 查询条件;-- 举例子insert into table1 (name,age) select name,age from table2 where age=19;
数据更新操作
-- 指定条件更新数据update student set name="lisi1"where id=2;-- 批量更新数据update student set score = '0';-- 将指定结果更新到对应字段update student set score = 1.1 + 2.3 where id = 1;
数据删除操作
删除操作select * from student;-- 条件删除delete from student where id=4;-- 条件范围删除delete from student where birthday between '1990-01-01' and '1990-02-01';delete from student; // 删除表中的所有数据truncate清空操作truncate table student; // 清空数据
delete 和 truncate 操作区别
| delete | truncate | |
|---|---|---|
| 执行速度 | 慢· | 快 |
| 可指定条件 | 可以 | 不可以 |
| 语句分类 | DML数据操纵语言 | DDL数据定义语言 |
| 可以回滚事务 | 可以 | 不可以 |
| 删除操作记录日志 | 记录 | 不记录 |
主键和外键介绍
如何定义主键约束
-- 使用primary key 关键字创建主键create table emp(id int primary key, -- 设置主键name varchar(30),salary numeric(9,2));insert into emp values(1, 'zhangsan',3000);insert into emp values(1,'lisi',4000); // 执行失败, 主键不能重复-- 使用constraint primary key(id)额外指定主键create table emp(id int , -- 设置主键name varchar(30),salary numeric(9,2)constraint pk_empl primary key(id));
如何定义外键约束
-- 外键关联的字段一定是另一个表的主键create table emp2(id int primary key,name varchar(30),salary numeric(9,2),depId int,constraint fk_emp2_dept foreign key(deptId) references dept(id));
主键约束作用:
- 唯一标识一条记录
- 提高数据的检索效率
外键约束作用:
- 保证数据完整性
- 提高数据的检索效率
非空约束,唯一约束,默认值约束
如何定义 ```sql create table emp4( id int primary, name varchar(30) not null, salary numeric(9,2) );
insert into emp4 values(i,’lisi’,3000); insert into emp4 values(2,null,3000); // 报错, 第二个参数name 有非空约束
create table emp5( id int primary key, name varchar(30) not null, phone varchar(30) unique, // 唯一约束,表示不能重复 salary numeric(9,2) );
主键和唯一约束区别 主键必须非空且不重复, 一个表只有一个主键 唯一约束只要求不重复, 一个表可以有多个唯一约束
— 默认值约束 create table emp6( id int primary key, name varchar(30) not null, salary numeric(9, 2) default 0.0 )
约束作用:- 维护数据的完整性- 在业务层面保证数据正确性<a name="k96jO"></a># 数据查询操作```sqlselect {*|<字段列表>}from {查询数据表}where <查询条件>group by <字段> 根据某个字段分组having <条件> 筛选条件必须是select中的查询字段order by 字段 根据某个字段排序limit <offset> 限制结果显示数量
简单数据查询操作
单表指定条件操作
单表指定条件复杂查询操作
多表连接查询操作
子查询操作
查询结果集合合并操作
