sql周报
数据库分类
1.关系型数据库
Mysql Qracle MariaDB PostgreSQL
mysql:开源免费 使用最广 性价比最高
Oracle:收费 但安全性高
PostgreSQL:开源免费 优点支持二次开发 兼容性较高
MariaDB:和mysql是一个作者,免费开源
特征:拥有固定的表结构
数据之间可以建立数据库层面的关系
2.非关系型数据库
redis mongoDB
redis:目前最火 使用频率最高的非关系型数据库,基于内容缓存数据
数据读写速度都非常快 是基于内存坐数据存取的但是也具有持久化的功能
mongoDB:文档型数据库,最像关系型的非关系型数据库 主要用于爬虫 大数据等领域
特征:没有固定的表结构 数据存储采用kv键值对的形式
数据之间无法建立数据库层面的关系 需要使用代码建立逻辑关系
SQL与NOSQL
数据库服务端是可以服务多种类型的客户端
客户端可以是自己开发的 也可以是python代码编写 也可以是java代码编写
SQL
操作关系型数据库的语言 mysql oracle mariadb
NoSQL
操作非关系型数据库的语言 redis mongodb
ps:要想跟数据库交互就必须使用数据库指定的语言
"""
SQL有时候也指代关系型数据库
NoSQL有时候也指代非关系型数据库
"""
基本的SQL语句
修改密码
set password=password('新密码')
建立库
create database 库名
查看库
show databases;
编辑库
alter database 库名 要修改的东西
删除库
drop database 库名
切换当前库
use 库名;
创建表
create table 表名
查看表结构
desc 表名
查看当下库里面的所有表名
show tables;
查看创建表时语法
show create table(字段名称 字段类型 字段约束条件)
表重命名
alter table l1 rename l2
删除表
drop table l1;
插入数据 添加数据
insert into l1 values 数据
查看表内数据详情
select * from l1;
编辑数据
update l1 set 字段名=新数据 where 约束条件;
删除数据
delete form 表名;
delete from 表名 where 筛选条件
数据库储存引擎
查看数据引擎
show engines
指定储存引擎
create table l1(id int primary) engine = innodb
存储引擎的优缺点
innoDB :储存速度相对较慢 但是安全性高 创建后生成包含 表结构 表数据 表索引 ,支持事务 行锁 外键等
myisam:mysql 5.5版本之前的默认引擎,安全性较低 因没有事务 行锁等功能,优点 存取数据速度快
Memory
基于内存存储数据,一旦服务端关闭 数据也会消失
仅用于临时数据的存取
blakhole
存入的任何数据都会立即消失
MYSQL基本字段类型
创建表时确定数据类型
eg:create table l1(id int,name char(6),age
enum('男','女'),
hobby set('读书','上网','游戏'))
1.整型
tinyint
smalint
int 最高10位数
bigint 最高20位数
2.浮点型
float(10,2)
# 总共储存10位数 小数点后保留2小数
douule(m,d)
decimal(m.d)
三者不同处 在于精确度不同
float < douule < decimal
3.字符串
char(m)
定长字符串
varchar(m)
变长字符串
char:
优点:存取速度更快 因为是整存整取速度会很快
缺点:占用额外的内容空间,导致内存空间浪费
varchar:
优点:节约储存内容
缺点:存取速度相对没有char那么快
text:
存储文章类数据
3.时间
datetime 年月日时分秒
date 年月日
time 时分秒
4.枚举
enum('内容1','内容2')
单选
5.集合
set('内容1','内容2','内容3')
多选
MYSQL字段约束条件
create table l1(id 数据类型 约束条件1 约束条件2,name char(4))
1.unsigned
去除符号 正负号
一般用于 整型 浮点型的约束
2.zerofill
填充0
整型 浮点型的约束
int(6) zerofill
insert into l3 values(1);
+--------+
| id |
+--------+
| 000001 |
+--------+
3.not null
非空
默认情况下所有的数据类型 都是可以为空的 null 可以不用强制输入
非空就是添加约束 不允许输入空 空字符串除外
4.default
默认值
给字段一个默认数据,
5.unique
唯一值
改字段下数据不可以重复,
联合唯一
unique(字段1,字段2)
数据值相加唯一
6.primary key
主键 自带 非空且唯一属性
一个表里只能有一个主键
主键查询速度较快 一般都是查询主键 所以一般都是把ID设为主键
7.自增
auto_increment
一般搭配ID使用
自增是每次输入过数据后 此数据会自动加一
表数据的筛选 查询 select where
查询语句关键词
select * *查询展示所有字段
select id,name 查询展示指定字段
from
from l1 数据来源于L1;
查询关键字之where筛选
select id from l1 where id > 3;
where id >3 and id <6;
可以使用and链接
where id in(1002,2871,2811);
准确查询 只要符合的条件都显示
where id >3 or id <10;
条件 和 条件 并存
where id like '%66'
模糊查询 %匹配任意字符 尾数为66的id
where id like '66%'
开头为66的id
% 代表 任意个数的任意字符
_代表一个任意字符
where id like '___'
# 查找id为3个字符的
null 代表空
where name is null;
# 也可以查找为空的数据
查询关键字之group by
按照指定的条件将数据组成一个个整体
eg:将所有数据 按照 性别 分组
所有数据 按照 等级 分组 等等
这样可以方便我们更好地统计
eg 查看每个等级 里面的人数
查看分组后 这个组的人均收入
等等
分组后可以使用集合函数
max最大值
min最小值
sun求和
avg平均值
count计数 计算个数
起别名
select post,avg(saraly) as '部门平均薪资' from l1 group by post;
group_concat
把分组内的指定数据返回成一个列表
例如 获取某个部门的所有姓名
select post group_coucat(name) from l1 group by post;
查询关键字之having过滤
having 和 where 作用一样都是作为筛选的
having 是二次筛选 是针对分组后的数据进行筛选的
例如:统计各部门年龄在30岁以上的员工平均工资,并保留大于10000的数据
select post '部门',avg(salary) as a_salary from l1 group by post having a_salary > 10000;
查询关键词去重distinct
去除展示时 某个字段的重复数据
select distinct name from l1;
# 将l1 里面的重复数据去除
必须要完全一模一样
'联合去重'
select distinct name,age from l1;
# 将姓名和年龄一样的去除,必须姓名加年龄都一样哦
关键字之order by 排序
单字段排序
select * from l1 order by age;
单字段排序 默认 从小到大
select distinct age from l1 order by age;
对排序的内容进行去重
select * from l1 order by age desc;
# 改为降序 从大到小
统计各部门年龄在10岁以上的员工平均工资,并且保留平均工资大于1000的部门,然后对平均工资进行排序.
select post,avg(salary) as a_s from l1 where age > 10 group by post having a_s > 1000 order by a_s;
# 展示 各部门 平均工资 筛选条件为 年龄大于10 平均工资大于1000的 并排序
查询之regexp正则表达式
sql语句也可以利用正则表达式 搜索
select * from l1 where name regexp('^j.*');
这里的正则表达式如果不理解的话 可以去搜索一下相正则表达式的编写哦
多表查询
select * from 表1,表2;
这样得到的是交叉数据 是不准确的 也是没有意义的
我们可以使数据对应正确
select * from 表1,表2 where 表一.id = 表二.id
# 这样就对上了哦 会根据筛选结果对应起来
小练习
5. 查询岗位名以及各岗位的最高薪资
select post,max(salary) from l1 group by post;
6. 查询岗位名以及各岗位的最低薪资
select post,min(salary) from l1 group by post;
7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
select gender,avg(salary) from l1 group by gender;
8. 统计各部门年龄在30岁以上的员工平均工资
select post,avg(salary) from l1 where age > 30 group by post;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了