清华学姐熬了一个月肝出这份32W字知识SQL手册,在 Github标星31K+

Posted 程序员小濠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清华学姐熬了一个月肝出这份32W字知识SQL手册,在 Github标星31K+相关的知识,希望对你有一定的参考价值。

大家好,我是小濠,今天整理了一些SQL手册,希望能对你有帮助!

这里赠送一套软件测试相关资源:

软件测试相关工具
软件测试练习集
深入自动化测试
Python学习手册
Python编码规范
大厂面试题和简历模板
关注我公众号:【程序员小濠】即可免费领取!
交流群:175317069

目录

一、数据库基础:

二、数据库基本语法

四大SQL语句:

三、查询基础操作:

五、函数

六、高级查询操作

七、索引与视图


数据库知识总结

查找端口使用情况: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+

阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+

阿里P8熬了一个月肝出这份32W字 “ 软件测试面试题+简历模板 ”,在Github24小时标星31K+