当前位置:网站首页>SQL(一) —— 增删改查
SQL(一) —— 增删改查
2022-08-05 05:13:00 【share16】
SQL基础模块
SQL(一) —— 增删改查
大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。
一、初识数据库
数据库
是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database,DB);用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)。
1.1 DBMS的种类
DBMS主要通过数据的保存格式(数据库的种类)来进行分类,现阶段主要有以下5种类型:
- 层次数据库(Hierarchical Database,HDB);
- 关系数据库(Relational Database,RDB),如Oracle Database、SQL Server、MySQL等;
- 面向对象数据库(Object Oriented Database,OODB);
- XML数据库(XML Database,XMLDB);
- 键值存储系统(Key-Value Store,KVS),如MongoDB;
1.2 RDBMS的常见系统结构
使用RDBMS时,最常见的系统结构是客户端 / 服务器类型(C/S类型),如下:
1.3 SQL
数据库中存储的表结构类似于excel中的行和列,在数据库中,行称为记录,它相当于一条记录;列称为字段,它代表了表中存储的数据项目;行和列交汇的地方称为单元格,一个单元格中只能输入一条记录。
SQL是为操作数据库而开发的语言,可分为三类(如下),实际使用的SQL语句当中有90%属于 DQL。
- DDL(数据定义语言):用于创建和重构数据库对象,如创建和删除表;其指令有CREATE(创建数据库和表等)、DROP(删除数据库和表等)、ALTER(修改数据库和表等);
- DML(数据操作语言):用于操作关系型数据库对象内部的数据;其指令有INSERT(向表中插入新数据)、UPDATE(更新表中的数据)、DELETE(删除表中的数据);
- DQL(数据查询语言):用于构成对关系型数据库的查询;其指令有SELECT(查询表中的数据)、其可与count/sum/group by/order by/having等组合在一起使用;
- DCL(数据控制语言):用于创建与用户访问相关的对象,以及控制用户的权限;其指令有COMMIT(保存数据库事务)、ROLLBACK(撤销数据库事务)、GRANT(赋予用户操作权限)、REVOKE(取消用户的操作权限);
二、增删改查
2.1 数据类型
数据库创建的表,所有的列都必须指定数据类型,每一列都不能存储与该列数据类型不符的数据。
- CHAR型:用来存储定长字符串,当列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补足,由于会浪费存储空间,所以一般不使用;
- VARCHAR型:用来存储可变长度字符串,定长字符串在字符数未达到最大长度时会用半角空格补足,但可变长字符串不同,即使字符数未达到最大长度,也不会用半角空格补足;
- INTEGER型:用来指定存储整数的列的数据类型(数字型),不能存储小数;
- DATE型:用来指定存储日期(年月日)的列的数据类型(日期型);
- 此外,还有bigint、float、datetime、year等;
约束
是除了数据类型之外,对列中存储的数据进行限制或追加条件的功能。
- NOT NULL:是非空约束,即该列必须输入数据;
- PRIMARY KEY:是主键约束,代表该列是唯一值,可通过该列取出特定的行的数据;
2.2 数据库操作
创建数据库:
CREATE DATABASE < 数据库名称 >;
删除数据库:
DROP DATABASE < 数据库名称 >;
2.3 数据表操作
创建数据表:
CREATE TABLE < 表名 >
(< 列名1 > < 数据类型 > < 该列所需约束 >,
< 列名2 > < 数据类型 > < 该列所需约束 >,
< 列名3 > < 数据类型 > < 该列所需约束 >,
< 列名4 > < 数据类型 > < 该列所需约束 >,
......
< 该表的约束1 >, < 该表的约束2 >, ......);
修改数据表:(注意:修改后的表是无法恢复的)
修改表名: ALTER TABLE < 表名 > rename to < 新表名 >;
添加列(自动添加到末尾): ALTER TABLE < 表名 > ADD COLUMN < 列名 > < 数据类型 >;
添加列(设为第一列): ALTER TABLE < 表名 > ADD COLUMN < 列名 > < 数据类型 > first;
添加列(设在某个字段后): ALTER TABLE < 表名 > ADD COLUMN < 列名 > < 数据类型 > after C;
修改列名: ALTER TABLE < 表名 > change <列名> <新列名> <数据类型>;
删除列: ALTER TABLE < 表名 > DROP COLUMN < 列名 >;
清空数据表:(相比drop/delete,truncate用来清除数据时,速度最快)
TRUNCATE TABLE < 表名 > ;
删除数据表:(注意:删除的表是无法恢复的,只能重新插入)
DROP TABLE < 表名 > ;
2.4 表中数据的操作
插入数据:
INSERT INTO < 表名 >
(列1, 列2, 列3,......) -- 若全列插入,此语句可省略
VALUES(值1, 值2, 值3,......);
INSERT INTO < 表名 >
(列1, 列2, 列3,......) -- 若全列插入,此语句可省略
select < 需要的列名 >
from < 要查询的表 >;
where condition -- 可选;
insert ignore into < 表名 > ...... -- 若没有数据就插入,否则跳过
更新数据:
UPDATE < 表名 >
SET < 列名 > = < 表达式 > [,< 列名2 > = < 表达式2 >...];
WHERE condition; -- 可选
ORDER BY 子句; --可选
LIMIT 子句; --可选
查询数据:
SELECT * (或 < 列1, 列2, 列3,... > )
FROM < 表名 >
where condition -- 可选
oeder by 某列名 -- 可选
删除数据:
DELETE FROM < 表名 >
where condition
三、操作符和聚合函数
操作符
是一个保留字或字符,主要用于SQL语句的where子句来执行操作,其和python中的运算符基本一致。
- 算术运算符:加减乘除( + - * / );
- 比较运算符:等于、不等于、大于、小于、大于等于等(=、<>或!=、 >、<、>=、<=);
- 逻辑运算符:between、is null、like、in、all、any、is not null、not in等;
- 连接运算符:and(且,交集)、or(或,并集);
聚合函数
也叫汇合函数,其为SQL语句提供合计信息,如计数、总和、平均等。
- COUNT函数:一般用于统计不包含null值的记录数(行数),如count(col_name);但count(*)会统计表中全部记录数,包含null和重复值;可与
distinct
一起使用(去重); - SUM函数:返回某字段的总和;可与
distinct
一起使用,这时只会计算不同记录的和,一般无意义,可忽略;只适用于数值类型的列; - AVG函数:返回某字段的平均值;可与distinct一起使用,这时只会计算不同记录的平均值,一般无意义,可忽略;只适用于数值类型的列;
- MAX函数:返回某字段的最大值,null值不在计算范围之内;适用于所有数据类型;
- MIN函数:返回某字段的最小值,null值不在计算范围之内;适用于所有数据类型;
四、数据排序和分组
数据分组
是按照逻辑次序把具有重复值的字段进行合并;其是通过在select语句里使用group by子句来实现。
排序
用于对查询得到的数据进行排序,用order by子句来实现(默认升序(即asc),降序为desc)。
SELECT < 列1 >,< 列2 >,< 列3 >,...
FROM < 表名 >
GROUP BY < 列1 >,< 列2 >,< 列3 >,...
ORDER BY < 列m >[asc/desc], < 列n >[asc/desc], ...
书写顺序:
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
五、练习题
# 创建表
create table addressbook
(regist_no INTEGER NOT NULL COMMENT '注册编号',
name VARCHAR(128) NOT NULL COMMENT '姓名',
address VARCHAR(256) NOT NULL COMMENT '地址',
tel_no CHAR(10) COMMENT '电话号码',
mail_address CHAR(20) COMMENT '邮箱地址',
PRIMARY KEY (regist_no));
# postal_code、定长字符串类型(长度为8)、不能为 NULL
ALTER TABLE addressbook ADD COLUMN postal_code char(8) NOT NULL COMMENT '邮政编码'
# 删除 addressbook
DROP TABLE addressbook
'删除掉的addressbook表,不能恢复,只能重新创建'
可通过以下操作,创建表(以Navicat为例):
谢谢大家
边栏推荐
- [Software Exam System Architect] Software Architecture Design ③ Domain-Specific Software Architecture (DSSA)
- A blog clears the Redis technology stack
- RL reinforcement learning summary (1)
- The underlying mechanism of the class
- Structured light 3D reconstruction (1) Striped structured light 3D reconstruction
- MySQL Foundation (1) - Basic Cognition and Operation
- Wise Force Deleter强制删除工具
- How can Flutter parent and child components receive click events
- u-boot debugging and positioning means
- Flutter Learning 4 - Basic UI Components
猜你喜欢
结构光三维重建(二)线结构光三维重建
flex布局青蛙游戏通关攻略
[Study Notes Dish Dog Learning C] Classic Written Exam Questions of Dynamic Memory Management
The difference between span tag and p
多线程查询结果,添加List集合
【转】什么是etcd
ESP32 485光照度
Flutter学习5-集成-打包-发布
Error creating bean with name 'configDataContextRefresher' defined in class path resource
Dephi reverse tool Dede exports function name MAP and imports it into IDA
随机推荐
Detailed Explanation of Redis Sentinel Mode Configuration File
【cesium】Load and locate 3D Tileset
【解码工具】Bitcoin的一些在线工具
u-boot debugging and positioning means
数字_获取指定位数的小数
Flutter学习-开篇
1.3 mysql batch insert data
Dephi reverse tool Dede exports function name MAP and imports it into IDA
分布式和集群
结构光三维重建(二)线结构光三维重建
【cesium】3D Tileset 模型加载并与模型树关联
Basic properties of binary tree + oj problem analysis
位运算符与逻辑运算符的区别
【记一下1】2022年6月29日 哥和弟 双重痛苦
The mall background management system based on Web design and implementation
Structured light 3D reconstruction (1) Striped structured light 3D reconstruction
What field type of MySQL database table has the largest storage length?
Geek卸载工具
延迟加载js方式async与defer区别
[Decoding tools] Some online tools for Bitcoin