对数据库的基本操作

1.插入表数据:

sql 复制代码
insert into 表名1 (字段1,字段2) values(字段1值,字段2值);

2.删除表数据:

delete:delete from 表名1 where 范围(删除表内符合条件的内容)

delete from 表名1(清空数据表内容,不释放空间,即:下次插入表数据,id依然接着删除数据的id继续增加)

truncate:truncate table 表名1(清空表数据,释放空间,即:下次插入表数据,id从1重新开始)

drop:drop table 表名1(整张表被删除,要使用该表必须重新建)

3.修改表数据:

sql 复制代码
update 表名1 set 字段名 = '新值' where 范围

​

4.查询表数据:

查询:

sql 复制代码
select 列名1,列名2.。。。from 表名 
where 条件 
group by 条件 having 筛选条件 
order by 顺序

查询数据:select * from table1 where 范围

总数:select count (*) from table1 where 范围

select count (distinct(字段1) from table1 where 范围(distinct可去重)

求和:select sum (字段1) from table1 where 范围

平均:select avg (字段1) from table1 where 范围

最大:select max (字段1) from table1 where 范围

最小:select min (字段1) from table1 where 范围

排序:select * from table1 where 范围 order by 排序字段名 desc(desc逆序排序。默认是正序排

序asc)

5.复杂查询:

嵌套查询:多个查询语句嵌套在一起查询,一般嵌套的查询语句放在where 或 having 的后面

例:

sql 复制代码
select * from table1 where status in(select status from table2)

多表连接查询

table1:table2:

(1)内联查询inner join......on......)

sql 复制代码
​select * from table1 a inner join table2 b on a.id=b.id

查询结果:
(2)左外联(left outer join......on......)

sql 复制代码
select * from table1 a left outer join table2 b on a.id=b.id

查询结果:
(3)右外联(right outer join......on......)

sql 复制代码
select * from table1 a right outer join table2 b on a.id=b.id

(4)全外联(full outer join......on......)

sql 复制代码
select * from table1 a full outer join table2 b on a.id=b.id

6.group by分组

根据某一个或多个列表字段进行分组统计。

table1:

查询每个用户的最高成绩:

select name,max(score) as max_score from table1 group by name

查询结果:先按用户名分组,再在每个组中查询找到最高分数

查询全班每科课程平均分

select course,avg(score) as avg_score from table1 group by course

查询结果:先按课程分组,再在每个组中查询找到平均分数

having的用法:同where用法,having与group by连用。where是筛选单个记录,having是筛选分组记录(先分组,后筛选)

用SQL语句来验证数据:

通过校验主、外键完整性和数据唯一性,我们可以发现数据中的问题。随后,通过删除重复记录、更新外键引用和修改重复数据,我们可以修复数据的错误和损坏。

1、数据校验

1.1 校验主键完整性

主键是表中唯一标识每一条记录的字段。在某些情况下,可能会出现主键重复或缺失的情况。为了校验主键完整性,我们可以使用以下的SQL语句:

sql 复制代码
SELECT COUNT(*) FROM table_name GROUP BY primary_key HAVING COUNT(*) > 1;

上述SQL语句可以找出主键重复的记录。如果返回结果大于0,那么表中存在主键重复的情况。

1.2 校验外键完整性

外键用于表与表之间的关联。在某些情况下,可能会存在外键指向不存在的记录的情况。为了校验外键完整性,我们可以使用以下的SQL语句:

sql 复制代码
SELECT t1.foreign_key

FROM table_name_1 AS t1 LEFT JOIN table_name_2 AS t2

ON t1.foreign_key = t2.primary_key

WHERE t2.primary_key IS NULL;

上述SQL语句可以找出外键指向不存在记录的情况。如果返回结果大于0,那么表中存在外键完整性问题。

1.3 校验数据唯一性

在某些情况下,可能需要确保某个字段的值在整个表中是唯一的。为了校验数据唯一性,我们可以使用以下的SQL语句:

sql 复制代码
SELECT field_name, COUNT(*) FROM table_name GROUP BY field_name HAVING COUNT(*) > 1;

上述SQL语句可以找出字段值重复的记录。根据返回结果,我们可以确定表中是否存在数据唯一性问题。

2、数据修复

2.1 删除重复记录

当我们校验出存在重复记录时,我们需要删除其中的冗余数据。假设我们需要删除表中的重复记录,可以使用以下的SQL语句:

sql 复制代码
DELETE FROM table_name

WHERE primary_key NOT IN (

  SELECT MIN(primary_key)

  FROM table_name

  GROUP BY field_name

  HAVING COUNT(*) > 1

);

上述SQL语句可以根据指定字段的值删除重复记录,只保留一条记录。

2.2 更新外键引用

当我们校验出外键完整性问题时,我们需要更新外键引用,确保其指向正确的记录。假设我们需要更新外键引用,可以使用以下的SQL语句:

sql 复制代码
UPDATE table_name_1 AS t1 LEFT JOIN table_name_2 AS t2

ON t1.foreign_key = t2.primary_key

SET t1.foreign_key = t2.new_primary_key

WHERE t2.primary_key IS NULL;

上述SQL语句可以根据外键引用关系更新外键值,确保其指向正确的记录。

2.3 修改重复数据

当我们校验出某个字段存在数据唯一性问题时,我们需要修改字段的值,确保其在整个表中是唯一的。假设我们需要修改字段的值,可以使用以下的SQL语句:

sql 复制代码
UPDATE table_name AS t1 INNER JOIN (

  SELECT field_name, MIN(primary_key) as min_pk

  FROM table_name

  GROUP BY field_name

  HAVING COUNT(*) > 1

) as t2 ON t1.field_name = t2.field_name AND t1.primary_key > t2.min_pk

SET t1.field_name = CONCAT(t1.field_name, '_duplicate');

上述SQL语句可以将字段值修改为原值加上"_duplicate"后缀,以确保其在整个表中是唯一的。

相关推荐
夏木~1 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21551 小时前
Liunx下MySQL:表的约束
数据库·mysql
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
一个程序员_zhangzhen2 小时前
sqlserver新建用户并分配对视图的只读权限
数据库·sqlserver
zfj3212 小时前
学技术学英文:代码中的锁:悲观锁和乐观锁
数据库·乐观锁··悲观锁·竞态条件
吴冰_hogan2 小时前
MySQL InnoDB 存储引擎 Redo Log(重做日志)详解
数据库·oracle
nbsaas-boot2 小时前
探索 JSON 数据在关系型数据库中的应用:MySQL 与 SQL Server 的对比
数据库·mysql·json
cmdch20172 小时前
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
数据库·sql·mybatis
程序员学习随笔2 小时前
PostgreSQL技术内幕21:SysLogger日志收集器的工作原理
数据库·postgresql