清华学姐熬了一个月肝出这份32W字知识SQL手册,在 Github标星31K+
Posted 程序员小濠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清华学姐熬了一个月肝出这份32W字知识SQL手册,在 Github标星31K+相关的知识,希望对你有一定的参考价值。
大家好,我是小濠,今天整理了一些SQL手册,希望能对你有帮助!
这里赠送一套软件测试相关资源:
软件测试相关工具
软件测试练习集
深入自动化测试
Python学习手册
Python编码规范
大厂面试题和简历模板
关注我公众号:【程序员小濠】即可免费领取!
交流群:175317069
目录
数据库知识总结
查找端口使用情况:netstat -ano | findstr 3306
一、数据库基础:
用户:
a.增
创建用户:create user ‘用户名’@‘服务器的ip地址’ identified by ‘密码’;
#数据库ip地址,如果是本地,则是loaclhost
b.删
drop user ‘用户名’@‘ip地址’;
c.改
修改用户名:rename user ‘用户名’@‘IP地址’ to ‘新用户名’@‘IP地址’;
修改密码:
(低级版本)set password for ‘用户名’@‘IP地址’=password(‘新密码’);
(高级版本)alter user ‘xiaoming'@'localhost' identified by ‘654321';
d.查
查看数据库:show databases;
切换库:use 数据库名;
查看数据表:show tables;
查询数据表数据:select * from 数据表名;
权限:
a.单词:授权(grant),回收(revoke),权限(privilege)
b.授予权限:
grant 权限名 on 库名.表名 to ‘用户名’@’IP地址’;
all privilege:一次授予所有权限
eg.
grant all privileges on *.* to ‘用户名’@’IP地址’;
授予 所有数据库的 所有表的 所有权限
c.刷新权限:flush privileges;
d.查看权限:
查看当前用户权限:show grants;
查看指定用户权限:show grants for ‘用户名’@’IP地址’;
e.回收权限:
revoke 权限名 on 库名.表名 from ‘用户名’@’IP地址’;
eg.
revoke all on *.* from ‘用户名’@’IP地址’;
回收 所有数据库的 所有表的 所有权限
二、数据库基本语法
引擎:
查看数据库引擎:show engines;
临时性修改数据库引擎:set default_storage_engine = “引擎名”;
两个常用引擎:
myisam:性能好,安全性低
innodb:性能差,安全性高。支持外键,支持事务
四大SQL语句:
数据定义语句DDL(操作表结构):create、alter、drop、truncate
数据操作语句DML(操作表数据):insert、delete、update、select
数据控制语句DCL:grant、revoke
事务控制语句TCL:begin、commit、rollback
1.DDL:
a.数据库
创建数据库:create database 数据库名;
显示创建的数据库信息:show create database 数据库名;
删除数据库:drop database 数据库名;
b.数据类型:
①整型:int
②小数:decimal,float
用法:decimal(长度,小数位)
eg. decimal(5,2)范围为:-999.99~999.99
③字符串:char,varchar
char和varchar区别:
char是定长,确定了长度之后,不管存放的数据有没有达到指定长度,都是按照指定的长度长度分配
varchar是不定长,确定了长度之后,如果存放的数据没有达到指定长度,就按照已经使用的长度来分配空间
c.表结构:
①增:创建表格
create table 表格名(
字段名 数据类型 【约束条件】,
字段名2 数据类型
)【其他选项(例如储存引擎,字符集等)】;
# “【】”中的内容选填,中文设置:DEFAULT CHARSET ='utf8'
自增:auto_increment ,随着数据的插入,该字段会自动增加
②删:drop table 表名;
③改:
alter table 表名 操作命令;
其中操作命令包括:
删除字段:drop 字段名;
新增字段:add 字段名 数据类型 约束条件;
修改字段名(可同时修改数据类型):change 旧字段名 新字段名 数据类型/新数据类型;
修改数据类型:modify 字段名 新数据类型;
修改表名:
rename table 旧表名 to 新表名;
alter table 旧表名 rename 新表名;
④查看创建表的详细信息:show create table 表名;
查看表结构:desc 表名;
2. DML:
a.增(insert)
基本语法:insert into 表名(字段名#不填默认为全部) values(数据);
b.删(delete,truncate)
delete删除:delete from 表名;
truncate删除:truncate table 表名;
区别:
truncate可以将自增字段清零,重新开始自增,delete不能清零
c.改(update)
基本语法:update 表名 set 字段名=新值 where 查询条件;
#如果不加查询条件,默认修改字段下的所有的值
替换(replace):
基础语法:replace into 表名 values(值);
insert,update,replace区别:
insert是插入语句,永远都是在最下面插入新的行,不会对已有数据造成影响;
update是更新语句,是在已有数据的基础上对数据内容做修改;
replace是替换语句,如果原数据已存在则覆盖原数据(类似update,但其字段需要有约束条件),如果不存在则插入新数据(类似insert)
d.查(select)
基本语法:select 字段名 from 表名 where 查询条件;
别名(as):给字段或者表在查询时设置的一个临时的名字:
SELECT 新表名.字段名1 AS ‘新字段名',新表名.字段名2 AS ‘新字段名2' FROM 表名 AS 新表名;
说明:AS可不填,旧字段名与新字段名用空格隔开即可。如果表名没有设新表名,则“字段名”前面的“新表名.”不填
eg.
SELECT name “姓名”,age “年龄” FROM student;
e.综合
①插入其他表的数据:
insert into 表名(字段名) select 查询字段名 from 表名 where 查询条件;
②使用已有表的表结构及数据,创建一个新的表:
CREATE TABLE stu SELECT * FROM student;
③创建一个新的表,只使用已有表的表结构
CREATE TABLE stu2 SELECT * FROM student 查询条件; #其中查询条件为恒假,例如1=2
④数据备份和还原(source):
第一步:新建一个数据库(新建new)
第二步:切换到新建的数据库(use new)
第三步:source 保存的sql文件路径(source d:/test.sql)
三、查询基础操作:
1.排序语句:order by
语法:select 字段名 from 表名 order by 排序字段 排序方式;
asc:升序
desc:降序
# 默认升序排序
2.关键字
a.limit
作用:限制返回数据的行数
select 字段名 from 表名 limit 起始行下标,行数;
# 起始行下标默认为0
b.distinct
作用:去重,去掉重复出现的内容,保留其中一份
select distinct 去重字段名 from 表名;
注:空值和NULL是两个概念
3.查询条件
①between…and…:求在某一范围内的值
select 字段名 from 表名 where 查询字段 between 起始范围 and 截止范围;
②like:模糊查询
select 字段名 from 表名 where 查询字段 like 查询内容;
%:表示0个或多个字符
_:表示1个字符
③in:查询字段在指定数据中是否出现
select 字段名 from 表名 where 查询字段 in (值1,值2, 值3);
比较字符:
a.不等于:!=,<>
b.等与:=,,<=> --------->第二个可用于NULL,即<=>NULL等价于is NULL
拓展字符:
a.必须使用rlike操作符
b.范围:[]
eg. [1-5]:表示1-5的范围(即1,2,3,4,5,)
c.‘^’:表示以什么字符开头(用在字符前)
eg. ^a :以a开头字符
d.‘$’:表示以什么字符结尾(用在字符后)
eg. a$:以a结尾的字符
四、约束
分类:主键(primary key)、外键(foreign key)、唯一(unique)、非空(not null)、默认值(default)、检查(check)
1.主键(primary key)
定义:同时拥有非空和唯一的性质,在同一张表中只能出现一次
添加主键约束:
(常用)
create table 表名(
字段名 数据类型 primary key
);
(可改主键名)
create table 表名(
字段名 数据类型,
constraint 主键名 primary key(约束字段)
);
(其他)
create table 表名(
字段名 数据类型,
primary key(约束字段)
);
添加主键(表已存在):alter table 表名 add primary key(字段名);
删除主键:alter table 表名 drop primary key;
复合主键:将两个以上字段都赋予主键约束
语法:
(加在建表时最后面)
primary key(字段名1,字段名2);
2.唯一(unique)
定义:确保修饰的字段数据内容不能重复
添加:alter table 表名 add unique(字段名);
删除:alter table 表名 drop index 字段名;
3.非空(not null)
添加:alter table 表名 modify 字段名 数据类型 not null;
删除:alter table 表名 modify 字段名 数据类型;
4.默认值(default)
定义:是指定为空字段的默认内容
删除:alter table 表名 change 字段名 字段名 数据类型;
添加:alter table 表名 add 字段名 数据类型 default '默认值';
五、函数
1.常用函数
a.数学函数
①abs(x):返回x的绝对值
②floor(x):返回小于x的最大整数 eg.floor(1.2); 结果:1
③ceiling(x):返回大于x的最小整数 eg.ceiling(1.2); 结果:2
④truncate(目标值,小数位数):机械的将目标值的小数位数截取指定位数
eg. truncate(1.123,1); 结果:1.1
⑤round(目标值,小数位数):将目标值的小数位数按四舍五入截取指定位数
eg. round(1.191,1); 结果:1.2
⑥mod(数1,数2):数1/数2后求余 eg.mod(11,10); 结果:1
b.字符串函数:
① concat(字符1,字符2):字符串拼接
eg. select concat(‘hello’,‘ ’,‘world’); 结果:hello world
concat_ws(间隔字符,字符1,字符2):将间隔字符插入各字符中间
eg. concat_ws(‘a’,‘12’,‘34’) ; 结果:12a34
② left(字符串,截取长度):从左边开始截取字符串指定长度
eg. select left(‘abcde’,2); 结果:ab
right(字符串,截取长度):从右边开始截取字符串指定长度
③ trim(字符串):去除字符串左右的空格
eg. select trim(‘ abc ’); 结果:abc
trim(both ‘字符’from‘字符串’):去除字符串左右指定字符
eg. select trim(both ‘a’from‘a123aa’); 结果:123
ltrim(字符串):去除字符左边空格
rtrim(字符串):去除字符右边空格
④ upper():小写变大写
lower():大写变小写
⑤ substring(字符串,起始位置,截止长度):从字符串起始位置起截取指定长度内容
eg. select substring(‘abcde’,2); 结果:bcde
# 截止长度不填默认截取起始位置后全部内容
⑥ replace(字符串,目标字符,替换字符):替换字符串中的目标字符
eg. select replace(‘a123’,‘a’,‘12’); 结果:12123
⑦ cast(数据 as 类型):将数据转换为指定数据类型
eg. select(‘123abc’as signed) 结果:123
convert(数据,类型):同cast
数据类型(常用):
整数:signed 无符号整数:unsigned
日期:date 时间:time 时间日期:datetime
c.日期时间函数
① curdate()/current_date():返回系统当前日期
curtime()/current_time():返回系统当前时间
② date_add(日期,interval 时长 时间单位):对日期加上指定时长
eg. select date_add(curdate(),interval 1 year/month/day)
#在当前日期下加一年/月/日时长
date_sub(日期,interval 时长 时间单位):对日期减去指定时长
③ datediff(日期1,日期2):得到日期1 - 日期2得到的天数
eg. select datediff(‘2020-6-10’,‘2020-6-20’); 结果:10
④ dayofweek(日期):返回日期所在周的第几天(周日为第一天)
eg. select dayofweek(‘2020-6-18’); 结果:5(周四)
month(日期):返回日期中第几个月
hour(时间):返回时间中 时 的数值
eg. select hour(‘20:21:22’); 结果:20
⑤ dayname(日期):返回日期所在星期几的名称(英文)
monthname(日期):返回日期中月的名称(英文)
⑦ now():返回系统时间+日期
d.系统函数
① datebase():返回当前使用数据库名
② connection_id():返回用户连接id
③ found_rows():返回上一条select语句查询的条数
④ user():返回当前登录用户名
⑤ version():返回服务器版本
2.聚合函数
① max(字段名):求最大值
② min(字段名):求最小值
③ count(字段名):求字段名行数总和
eg. select count(sex) from student; 结果:5(假设有5行数据)
④ sum(字段名):求和
⑤ avg(字段名):求平均值
3.分组查询(group by)
定义:将表中指定字段数据分类
语法:select 字段名 from 表名 where 查询条件 group by 分组字段;
eg. 统计学生表中每个性别平均年龄
select sex,avg(age) from student group by sex;
4.having关键字
定义:过滤分组,筛选掉不符合条件的组,分组查询后,且只能接聚合函数
eg.学生表按年龄分组,过滤掉人数小于2的组
select age,count(*) from student group by age having count(*)>1;
5.小结
至此,一个完整的select查询语句为:
select 字段名
from 表名
where 查询条件
group by 分组的字段名
having 过滤分组(聚合函数)
order by 排序;
# 各关键字的先后顺序不能够乱
六、高级查询操作
1.多表查询
语法:select 字段 from 表1,表2 where 关联条件;
2.连接查询
A.内连接
a.等值连接
①“=”
②join...on...
语法:select 字段名 from 表名1 join 表名2 on 查询条件;
③inner join...on...:同②
b.非等值连接
between...on...
c.自身连接
语法:select 字段名 from 表名 别名1,表名 别名2 where 查询条件;
B.外连接
左表:在on的左边的表。右表同理
①left join...on...(左连接):
将右表连接到左表,如果左表一些数据在右表没有匹配的数据,则返回到左表一个空值
②right join...on...(右连接):参考①
内连接和外连接区别:
等值连接(内连接)只能返回符合关联关系的数据;而外连接是可以保留全部的主表信息
3.外键
关键字:foreign key
添加:
①(建表时)
create table主表(
字段名1 数据类型 主键约束
);
create table 从表(
字段名2 数据类型,
foreign key(字段名2) references 主表(字段名1)
);
②(建表后)
alter table 从表 add forrign key(从表字段) references 主表(主表字段);
4.子查询
a.标量子查询:将查询结果作为另外一条查询语句的查询条件
select * from 表名 where 字段名 关系符号 (select 查询语句);
b.列子查询:返回的查询结果是一列数据,一般用于关系条件查询(in,any,all)
any:任意一个
all:全部
select 字段名 from 表名 where 查询字段 关系符号 any/all(select 语句);
c.行子查询:返回一行数据,注意查询字段个数要和返回的行数据的字段个数一致
d.谓词exists(作业类似于in):判断查询结果是否存在,返回结果为bool值
e.派生表
定义:将select语句的查询结果,作为数据表继续进行操作
用法:select 字段名 from (select 语句) where 查询条件;
f.联合查询(union/union all)
union:筛选掉两个查询结果在相同的结果,保留其一
union all:保留所有相同的结果
用法:
select 语句1
union/union all
select 语句2;
七、索引与视图
1.索引(index)
a.作用:提高查询性能
b.语法:
create table 表名(
字段名 数据类型 约束条件,
约束条件,
索引类型 index 索引名称(索引字段名)
);
c.索引类别:
主索引(主键)、唯一索引(唯一约束) unique、普通索引、复合索引、全文索引fulltext
d.建表后创建索引:
alter table 表名 add 索引类型 index 索引名称(字段名);
或 create 索引类型 index 索引名 on 表名(字段名);
d.删除索引
drop index 索引名on 表名;
或 alter table 表名 drop index 字段名;
2.视图(view)
语法:
create view 视图名
as
查询语句。
最后:【可能给予你帮助】然后下面分享一些我的自学资料,希望可以帮到大家。
这份资料整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。对于软件测试的的朋友来说应该是最全面和完整的备战仓库了,这个仓库也陪伴我走过了很多坎坷的路,希望也能帮助到你。
关注我的微信公众号:【 程序员小濠】免费获取~
送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
我的软件测试交流群:175317069,群里有测试大牛分享经验~
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
以上是关于清华学姐熬了一个月肝出这份32W字知识SQL手册,在 Github标星31K+的主要内容,如果未能解决你的问题,请参考以下文章
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+
清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+
字节师姐熬了1个月肝出这份32W字Linux知识手册,在 Github标星38K+
阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+