一篇文章搞定数据库所有增删改查操作!!

思维导图:

必要说明:

  • 需知SQL对大小写不敏感:SELECT 与 select 是相同的。
  • 本文使用postgreSQL,代码可能也可能不在其他数据库中适用。

目录

1.查

1.1普通查询

1.2列中不显示重复条件

1.3要求按升/降序排列

1.4只取前面几项

1.5查找某些样式的数据

1.6多表结合查询

1.7以视图方式展示

1.8在查询中使用函数求最小值,平均值等

2.改

2.1改变表中某行数据

2.2改变表中某列的数据类型

3.增

3.1增加表中的列

3.2增加表中的记录(行)

3.3新表中增加旧表的数据

4.删

4.1删除索引/表/数据库

4.2删除表中的列

4.3删除表中的行(即数据)

4.4一次删除表中的所有数据


1.查

1.1普通查询

关键字【select】【from】【where】【and】【or】

最最基础操作:

//查找表中某几列的数据
select 列1,列2 from 表1

//查找表中全部数据
select * from 表1

如果查询中要符合某些条件:

//若查找的数据要符合全部条件用and
select 列1,列2 from 表1 where 条件1 and 条件2

//若查找的数据只需符合几个条件中的某一个用or
select 列1,列2 from 表1 where 条件1 or 条件2

1.2列中不显示重复条件

在表中,一个列可能会包含多个重复值,有时您只希望仅仅列出不同的值。

关键词【distinct】

值得注意的是,distinct关键词只在查询单独一列时有效,若是查询多列则无效。

//有效
select distinct 列1 from 表1 where 条件1

//无效
select distinct 列1,列2 from 表1 where 条件1

验证如下:

①先看看表数据

②查询单列数据

③查询多列数据

1.3要求按升/降序排列

关键词【(升序排序)order by】【(降序排序)order by desc】

//升序
select 列1,列2 from 表1 where 条件1 order by 列1

//降序
select 列1,列2 from 表1 where 条件1 order by 列1 desc

例:

①先看表数据

②升序排列

③降序排列

1.4只取前面几项

关键词【limit】

//只取表中的前n项数据
select * from 表1 limit n;

//那么假设取表前50%的数据呢?
select top 50 percent * from 表1
//但top % percent是Microsoft SQL Server中才能使用的语句

//在postgreSQL中我们可以巧妙地利用limit与count()构建出来,count()后面会讲
select * from 表1 limit 0.5*(select count(*) from 表1)

验证如下:

1.5查找某些样式的数据

关键字【like】【_(下划线,用来代替一个字符)】【%(可以代替多个字符)】

//注意:where中的条件式一定要配合like使用,不能使用“=”号
select * from 表1 where 列1 like '_oo%'

//错误示范:
select * from 表1 where 列1 = '_oo%'

例:

①查看表中数据

②查找列2数据为?oo????的样式的数据

1.6多表结合查询

这个知识点是个有趣的点也是个小难点,在学习多表结合查询之前,我们得先了解一下什么是内连接,左连接,右连接和全连接。

①内连接:假设两表A、B。内连接之后只剩下A、B表共有的部分。

图中只有一个共有列name,而name中只有a、c是共有的属性。

②左连接:假设A是左表,B是右表。以A表为基础,将B表中与A表匹配上的数据贴上去。

③右连接:假设A是左表,B是右表。以B表为基础,将A表中与B表匹配上的数据贴上去。

④全连接:将两表共有列所有的数据都并在一起。

注意:旧的postgreSQL没有数据都显示为空,新版本则显示NULL。

那么表连接的代码样式与作用是什么呢?

代码样式:

//内连接
select * from 表1 join 表2 on 表1.某列名 = 表2.某列名 where 条件1  //默认就为内连接
select * from 表1 inner join 表2 on 表1.某列名 = 表2.某列名 where 条件1

//左连接
select * from 表1 left join 表2 on 表1.某列名 = 表2.某列名 where 条件1

//右连接
select * from 表1 right join 表2 on 表1.某列名 = 表2.某列名 where 条件1

//全连接
select * from 表1 
full outer join 表2
on 表1.某列名 = 表2.某列名
where 条件1

使用范例:

//存在两张表:
//学生表:student(sNo,sName)
//选课信息表:sc(sNo,cNo)

//题目:查询所有学生及其选课信息(包括没有选课的学生)
select student.sno,sc.cno
from student
left join sc
on student.sno = sc.sno;

//分析:
//并不是所有的学生都选课,所以选课信息表中没有全部的学生
//而学生表中有所有的学生,但没有选课信息
//所以学生表与选课信息表左外连接
//结果既显示所有的学生又显示学生对应的选课信息

1.7以视图方式展示

视图是建立在基本表之上的表,是一张虚拟的表,随着基本表的数据变化而变化。

视图的作用:

  • 提高了SQL语句的重用性。(视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。)
  • 提高了安全性。(可以像查询基本表一样查询视图)
  • 提高了用户的可读性。

关键词【create view as】【drop view】

//创建视图
create view 视图名1 as
select 列1,列2 
from 表1
where 条件1

//更新视图:增加列3。注意视图名不变
create view 视图名1 as
select 列1,列2,列3
from 表1
where 条件1

//删除视图
drop view 视图名1

1.8在查询中使用函数求最小值,平均值等

关键词【max、min、avg等具体看下表】【group by】【having】

①SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

AVG()返回平均值

COUNT()

返回行数
FIRST()返回第一个记录的值
MAX()返回最大值
MIN()返回最小值
SUM()返回总和
LAST()返回最后一个记录的值

②SQL Scalar 函数基于输入值,返回一个单一的值。

UCASE()

将某个字段转换为大写
LCASE()将某个字段转换为小写
MID()从某个文本字段提取字符,MySql 中使用
SubString(字段,1,end)从某个文本字段提取字符
LEN()返回某个文本字段的长度
ROUND()对某个数值字段进行指定小数位数的四舍五入
NOW()返回当前的系统日期和时间
FORMAT()

格式化某个字段的显示方式

使用范例:

//直接查询表中某列的平均值
select avg(列1) from 表1

//分组查询某列的平均值。值得注意的是按列2分类,那么select中也要加上列2
select avg(列1),列2
from 表1
group by 列2

//where与having的区别:使用having的原因是where关键字无法与聚合函数一起使用。
select avg(列1),列2
from 表1
where 条件1
group by 列2
having avg(列1) > 200

2.改

2.1改变表中某行数据

关键词【update set】

update 表1
set 列1 = 某值
where 列2 = 某值;

//若没有where条件则会将所有列1改成那个值
update 表1
set 列1 = 某值;

例:

①查看所有表数据:

②修改lie1为4的行的lie3为'okokok'

③查看修改后的表

2.2改变表中某列的数据类型

关键词【alter】【table】【column】【type】【using】

alter table 表1
alter column 列1 type 数据类型

//注意:可能存在数据类型转换失败的可能,可以使用强制类型转换
//慎用!强制类型转换可能会破坏原本表中的数据
alter table 表1 alter column 列1 type 数据类型 using (列1::数据类型);

例:

①查看表数据,注意lie1的数据类型

②修改lie1的数据类型

③查看修改后的表

3.增

3.1增加表中的列

关键词【alter】【add】

alter table 表1
add 列1 数据类型

示例:

3.2增加表中的记录(行)

//第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
insert into 表1
values(列1值,列2值,列3值,...);

//第二种形式需要指定列名及被插入的值:
insert into 表1(列1,列2,列3,...)
values(列1值,列2值,列3值,...);

示例:

3.3新表中增加旧表的数据

关键词【INSERT INTO】

//选择旧表中的列数据插入新表
insert into 表1(列1,列2)
select 列1,列2
from 表2;

示例:

①先来看看表test与表test1的内容:

②将在表test中插入表test1的内容:

③查看test表中的数据:

4.删

4.1删除索引/表/数据库

关键词【drop】

//删除索引
drop index 索引1;

//删除表
drop table 表1;

//删除数据库
drop database 数据库名1;

顺便附上索引的创建、查看:postgresql 查看索引、创建、删除索引

4.2删除表中的列

关键词【alter】【drop】【column】

alter table 表1 drop column 列1;

示例:

①查看test1表:

②删除test1表中的lie5:

③查看是否删除lie5成功:

4.3删除表中的行(即数据)

关键词【delete】

delete from 表1
where 列1 = 某值;

示例:

①查看test1表数据:

②删除test1表中lie2数据为'z'的数据:

③查看是否删除数据成功:

4.4一次删除表中的所有数据

关键词【truncate】

truncate table 表1;

示例:

①查看test1表中的所有数据:

②一次删除test1表中的所有数据:

③查看是否删除成功:

欢迎勘误揪虫,若后续发现遗漏将继续补充,建议收藏

posted @ 2022-06-17 22:47  东东咚咚东  阅读(522)  评论(0编辑  收藏  举报