一、 SQL
SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,也是目前使用最广泛的关系型数据库操作语言。
● SQL作用
•是所有关系型数据库的统一操作规范,不同关系型数据库都支持SQL
•所有的关系型数据库都可以使用SQL
•不同数据库之间的SQL有一些区别
●SQL语法规范
•SQL语句可以单行或者多行书写,以;结尾(Navicat中可以不写;)可以使用空格或者缩进增加语句的可读性
•MySQL中使用SQL不区分大小写,一般数据库名,表名,列名小写
•注释方式
--空格 单行注释
/**/ 多行注释
# MySQL特有的单行注释
●SQL分类
•数据查询语言(Data Query Language,DQL):
DQL主要用于数据的查询,其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据。
• select
• from
• where
•order by
•having
•数据操作语言(Data Manipulation Language, DML):
DML主要用于对数据增加、修改和删除的操作。
主要包括:
• INSERT:增加数据
•UPDATE:修改数据
•DELETE:删除数据
●数据定义语言(Data Definition Language,DDL):
DDL主要用针对是数据库对象(数据库、表、索引、视图)进行创建,修改和删除操作。
主要包括:
•CREATE:创建
•ALTER:修改
•DROP:删除
数据控制语言(Data Control Language,DCL):
DCL用来授予或回收访问数据库的权限。
主要包括:
.GRANT:授予用户权限
•REVOKE:回收授予的权限。
●事务控制语言(Transaction Control Language, TCL):
TCL用于数据库的事务管理。
主要包括:
•START TRANSACTION:开启事务
•COMMIT:提交事务
•ROLLBACK:回滚事务
●注:
数据操纵语言DML(insert、update、delete)针对表中的数据;
而数据定义语言DDL(create、alter、drop)针对数据库对象,比如数据库database、表table、索lindex、视图view、存储过程procedure。
●MySQL中常见的数据类型
int 整型
double 浮点型
varchar 字符串型
●详细数据类型
•整数类型
TINYINT 1字节 小整数值
SMALLINT 2字节 大整数值
MEDIUMINT 3字节 大整数值
INT 4字节 大整数值
BIGINT 8字节 极大整数值
MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。显示宽度并不限制可以在列内保存的值的范围.
•浮点数类型
FLOAT(m,d) 4字节 单精度浮点数值,m总个数,d小数位
DOUBLE(m,d) 8字节 双精度浮点数值,m总个数,d小数位
注意事项:
浮点数类型的宽度不会自动扩充,使用时需要指定长度。
•字符串类型
CHAR(M) 允许长度0~M个字符的定长字符串
VARCHAR(M) 允许长度0~M个字符的变长字符串
TINYTEXT 短文本数据
TEXT 长文本数据
MEDIUMTEXT 中等长度文本数据
LONGTEXT 极大文本数据
BLOB(M) 以二进制存储图片,文件等数据
①char长度固定,即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
②varchar可变长度,可以设置最大长度,VARCHAR类型能够根据字符串的实际长度来动态改变所占字节的大小,所以在不能明确该字段具体需要多少字符时推荐使用VARCHAR类型,这样可以大大地节约磁盘空间、提高存储效率。
③CHAR和VARCHAR表示的是字符的个数,而不是字节的个数。
④text不设置长度,当不知道属性的最大长度时,适合用text。
⑤按照查询速度:char最快,varchar次之,text最慢。
•日期和时间类型
TIME
DATE
YEAR
DATETIME
TIMESTAMP
•TIMESTEMP类型的数据指定方式与DATETIME基本相同,不同之处:
①数据的取值范围不同,TIMESTEMP类型的取值范围更小
②如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间
二、DDL
DDL: create drop alter show
●操作数据库
查看所有的库:show databases;
新建库:create database 库名;
删除库:drop database 库名;
选择库:use 库名;
●操作数据库表
查看选择库中所有表:show tables;
查看表结构(字段,类型,约束,...):desc 表名;
查看建表语句:show create table 表名;
●新建表:
create table 表名(
字段 类型(限制),
字段 类型(限制),
···
);
●删除表:drop table 表名;
●修改表:
•修改表名:alter table 表名 rename to 新表名;
•修改字段类型:alter table 表名 modify 字段 新类型(限制);
•修改字段名:alter table 表名 change 原字段名 新字段名 类型(限制);创建完成的表中添加新字段:alter table 表名 add 字段名 类型(限制);
三、DML: insert update delete
●添加数据
•为指定的字段添加数据
insert into 表名(字段,字段,...)values(值,值,..);
•为所有的字段添加数据
insert into 表名 values(值,值,...);
•一次添加多条数据
insert into 表名(字段,字段,..) values(值,值,...),(值,值,...),....;insert into 表名values(值,值,...),(值,值,...),...;
注意:
①字段和数据顺序,个数,类型必须一致
②数据必须在限制的范围内
③字符串类型使用“”或者 ''
④日期类型可以使用字符串类型的日期:“2022-12-8" “2022.12.8" "2022/12/8"
⑤只有为所有字段添加数据时不需要指定字段
●修改数据
不添加条件修改全部的数据
update 表名 set 字段名=新值,字段名=新值,...where 条件;
●删除数据
不添加条件删除全部的数据
delete from 表名 where 条件;
四、DQL
数据查询语言.查询数据库表中的数据.
•语法格式:
select字段名,字段名,... from 表名;查询指定字段所有的值
select字段名,字段名,...from 表名 where 条件;查询指定字段符合条件的值
●注:
•查询所有字段.*代表所有字段
select *from 表名;
select*from 表名 where 条件;
•可以将查询的字段名指定为显示的内容,为字段名定义别名
select 字段名 as 别名,字段名 as 别名,..from表名;
select 字段名 as 别名,字段名 as 别名,... from 表名 where条件;as 可以省略不写
select 字段名 别名,字段名别名,...from 表名;
•查询到的数字类型字段值进行数学计算,+ -* / %
●条件查询
•如果查询语句中没有设置条件,就会查询所有的行信息
•在实际应用中,通常会指定查询的条件,对记录进行过滤
●语法格式:
select 列名 from 表名 where 条件;
●比较运算符
between...and... 显示在某一区间的值
in(集合) 集合表示多个值,使用逗号分隔,例如name in(悟空,八戒);in中的每个数据都会作为一次条件,只要满足条件就会显示
is null 查询某一列为null的值,注意,不能写=null
●逻辑运算符
and && 多个条件同时成立
or 多个条件任一成立
not 取反
●模糊查询
模糊查询,通配符
% 表示匹配任意多个字符
- 表示匹配任意一个字符
五、约束
●约束的作用
可以对表中的数据做一些限制,从而保证数据的正确性,有效性,和完整性。
违反约束的不正确数据是无法插入到表中的。
●约束的分类
主键 primary key 不可重复,不能为空,即唯一+非 空
唯一 unique 不可重复
非空 not null 不能为空
默认值 default 赋予默认值
检查(Mysql8提供)check 取值范围
外键 foreign key 表与表之间的关系
●为表添加约束,符合约束的数据可以添加到表中,不符合约束的数据不可以添加到表中,数据具有完整性,有效性,正确性。
主键约束:非空(不允许为null)+唯一(不允许重复)
六、排序
通过order by子语句,可以将查询出的结果进行排序(排序只是显示效果,并不会影响真实的数据)。
语法格式:
select 字段名 from 表名[where 条件] order by 字段名[asc | desc];
•单列排序
只按照某一个字段进行排序。
七、SQL函数的两种类型
单行函数 ;多行函数
●单行函数:
单行函数是指对每一条记录的值进行计算,并得到相应的计算结果,然后返回给用户,也就是说,每条记录作为一个输入参数,经过函数计算得到每条记录的计算结果。
常用的单行函数主要包括字符串函数、数值函数、日期与时间函数、流程函数以及其他函数。
使用单行函数,是对行中字段的操作,操作多少行,返回多少行数据。
●字符函数
大小写处理函数; 字符处理函数
•大小写处理函数
LOWER(s) | LCASE(s) 将字符串 s转换为小写
UPPER(s) | UCASE(s) 将字符串S转换为大写
•字符处理函数
LENGTH(s) 返回字符串s的长度
LENGTH(S) 返回字符串s的长度
CONCAT(S1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串
LPAD(S1,len,s2) 在字符串 s1的开始处填充字符串s2,使字符串长度达到 len
LTRIM(S) 去掉字符串s开始处的空格
REPLACE(S,S1,S2) 将字符串 s2 替代字符串 s中的字符串s1
REVERSE(S) 将字符串s的顺序反过来
RPAD(S1,len,s2) 在字符串 s1 的结尾处添加字符串s2使字符串的长度达到len
RTRIM(s) 去掉字符串s结尾处的空格
SUBSTR(s, start, length) 从字符串s的start 位置截取长度为length的子字符串
SUBSTRING(s, start,length) 从字符串s的start 位置截取长度为 length 的子字符串
TRIM(S) 去掉字符串s开始和结尾处的空格
●流程函数
if(条件,值1,值2):条件 true->值1 false->值2
ifnull(值1,值2):值1为null 返回值2,值1不为null 返回值1
case
when 条件 then 结果,
when 条件 then 结果,
else 结果
end
●多行函数:
多行函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值。
•多行函数会忽略null空值。
•多行函数也称为分组函数,聚合函数。
使用多行函数,是对某一列的值进行计算,然后返回一个单一的值
●count(字段) 统计指定列不为null的记录行数
sum(字段) 计算指定列的数值和
max(字段) 计算指定列的最大值
min(字段) 计算指定列的最小值
avg(字段) 计算指定列的平均值
八、分组
分组查询指的是使用group by语句,对查询的信息进行分组,相同数据作为一组。
●语法格式:
select 分组字段/聚合函数 from 表名 group by 分组字段[having 条件];
●注:
•分组时可以查询要分组的字段,或者使用聚合函数进行统计操作
•查询其他字段没有意义
●select语句的执行顺序
from -- where -- group by -- having -- select -- order by
●where和having
where 分组之前的过滤后边不能写多行函数
having 分组之后的过滤后边可以写多行函数
九、limit关键字
• limit:限制返回的查询结果的函数(通过limit函数,控制查询返回多少行数据)•
limit语法是MySql的方言,用来完成分页
●语法格式:
select 字段1,字段2... from 表名1imit offset, length;
●offset 起始行数,从0开始,如果省略则默认从0开始,0代表MySQL中第一条数据
●length返回的行数