一、数据库
1.1、概念
数据库就是存储数据的仓库
数据库可以实现数据的持久化存储
数据库的本质就是文件系统
1.2、DBMS
DBMS:Database Management System,数据库管理系统
常见的DBMS(关系型数据库):
- mysql
- oracle
- db2
- sqlserver
- sqlite
注:
- 所有关系型数据库的结构都是表结构
- 所有关系型数据库都通用sql语言
1.3、数据库的结构
一个数据库管理系统可以维护管理多个数据库
一个数据库中包含多个张表
一张表中包含若干条记录
一条记录包含多个字段
1.4、mysql的基本操作
登录数据库:
- 打开命令提示符:win+r
- 输入:cmd,回车
- 输入:
mysql -uroot -p密码
mysql -uroot -p
,再输入密码退出:
方式1:ctrl + c
方式2:quit
方式3:exit
二、SQL语言
2.1、概念和分类
sql:structured query language,结构化查询语言
分类:
DDL:数据定义语言,用于对数据库、表进行操作
关键字:
create
、drop
、alter
等DML:数据操作语言,用于对数据库表中的记录进行增删改
关键字:
insert
、delete
、update
等DQL:数据查询语言,用于查询数据库
关键字:
select
、from
等TCL:事务控制语言,用于控制事务
关键字:
commit
、roll back
等
关键字:已经预先定义好的,具有特殊含义的单词
2.2、库的操作
-- 1.查看有哪些数据库 show databases; -- 2.创建数据库 create database 库名; -- 3.先判断数据库是否存在,不存在才创建 create database if not exists 库名; -- 4.删除数据库 drop database 库名; -- 5.先判断数据库是否存在,存在才删除 drop database if exists 库名; -- 6.使用指定的数据库 use 库名;
2.3、表的操作
-- 1.查询所有表 show tables; -- 2.创建表 create table 表名(字段名 字段类型, 字段名 字段类型, ...); -- 3.删除表 drop table 表名; -- 4.查看表结构 desc 表名; -- 5.修改表名 alter table 旧表名 rename to 新表名;
-- 修改表结构 -- 1.添加新字段 alter table 表名 add 新字段 字段类型; -- 2.删除字段 alter table 表名 drop 字段名; -- 3.修改字段类型 alter table 表名 modify 字段名 字段类型; -- 4.修改字段名 alter table 表名 change 旧字段名 新字段名 字段类型;
2.4、记录和字段的操作
2.4.1、添加记录:
-- 1.添加一条记录,为所有字段添加数据 insert into 表名 values(值1,值2,值3.,...); -- 2.添加一条记录,为指定字段添加数据 insert into 表名 (字段1,字段2,字段3,...) values(值1,值2,值3.,...); -- 3.批量添加(所有字段) insert into 表名 values(值1,值2,值3.,...),(值1,值2,值3.,...),(值1,值2,值3.,...),...; -- 4.批量添加(指定字段) insert into 表名 (字段1,字段2,字段3,...) values(值1,值2,值3.,...),(值1,值2,值3.,...),(值1,值2,值3.,...),...;
注意:
1.值的数据和字段的数量必须一致
2.值的类型必须与字段的类型一致
3.字符串类型的值,必须用单引号或者双引号括起来
2.4.2、删除来记录:
--1.删除表中的所有记录 delete from 表名; truncate table 表名; --2.根据条件删除表中记录 delete from 表名 where 条件; (多个条件用 and(&&(并且)) 连接, between... and...,空值(null)用is )
注意:
delete from 表名 和 truncate table 表名都可以用来删除表中所有记录,但是区别是 delete from 表名 在删除所有记录中的每一行记录逐行删除;而 truncate table 表名 是将整个表全部删除,然后构建一个与原始表结构相同的一张新表。
2.4.3、修改记录:
--1.修改表中所有记录的指定字段 update 表名 set 字段名1 = 值,字段名2 = 值, ... ; --2.修改表中指定记录的指定字段 update 表名 set 字段名1 = 值,字段名2 = 值, ... where 条件;
2.4.4、查询记录:
1.基础查询
--1.查询表中的所有记录 select * from 表名; * 是通配符表示查询所有列 --2.查询表中所有记录的指定字段 select 字段1,字段2,字段2, ... from 表名; --3.去重查询 select distinct 字段名 from 表名;
2、条件查询
select 字段列表 from 表名 where 条件;
关系(比较)运算
>,<,>=,<=,= != 不等于 <> 不等于
逻辑运行算
与:并且 && and 或:或者 || or
指定范围内
between...and...
注意:含头含尾
指定列表中
in(值1,值2,值3,...)
不在指定列表中
not in(值1,值2,值3,...)
3、模糊查询
like '模糊查询的内容'
占位符:
1.%:表示任意个任意字符
2._:表示单个任意字符
4、排序查询
order by 字段名 排序方式
排序方式:
1.升序:asc,默认排序方式
2.降序:desc
多个字段排序,只有前一个字段相同时,才会根据后一个字段再进行排序
order by 字段名1 排序方式,字段名2 排序方式
5、聚合函数
将一列作为整体进行纵向计算
--平均值 avg() --总和 sum() --最大值 max() --最小值 min() --个数 count()
注意:
1、where 条件后不能使用聚合函数
2、聚合函数不计算null值
3、count()统计个数时,一般使用*
6、分组查询
group by 字段名 -- 表示以指定的字段进行分组
注意:
1.分组查询的字段只能是:分组字段和聚合函数
2.分组查询后对查询结果再进行条件筛选需要使用
having
,having 用在分组之后
where 跟 having 的区别:
1.where 后不能使用聚合函数,having 后可以使用聚合函数
2.where 用在分组前的条件,满足where条件的进入分组,不满足where条件的不进入分组;having用在分组后的条件,满足having的能被查询到,不满足having的不被查询到
7、分页查询
limit 开始索引 , 每页显示的记录数 --索引:序号,从0开始
开始索引=(页码-1)*每页显示的记录数
总页数
1、能整除:总页数=总记录数 / 每页显示的记录数;
2、不能整除:总页数=总记录数 / 每页显示的记录数 + 1;
8、查询语句的结构
select 字段列表 from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段 排序方式 limit 开始索引 , 记录数
9、多表查询
1、交叉查询
select 字段列表 from 表1,表2,...;
注:交叉查询的结果是笛卡尔积,查询的结果是两张表所有记录的组合情况;表1中有n条记录,表2中有m条记录,查询结果有m*n条记录;这样的查询结果有许多无效数据,需要加上有效条件来去除无效数据
2、内连接
内连接是在交叉查询的基础上添加两张表的连接条件
-- 92语法,隐式内连接 select 字段列表 from 表1,表2,... where 连接条件; -- 99语法,显式内连接 select 字段列表 from 表1 inner join 表2,... on 连接条件; 注: 1、inner可以省略 2、内连接查询是两张表的交集
3、外连接
--左外连接 select 字段列表 from 表1 left outer join 表2 on 连接条件 where 其他条件 --右外连接 select 字段列表 from 表1 right outer join 表2 on 连接条件 where 其他条件
注:
1、outer 可以省略
2、左外连接查询结果是左表的全部和两表的交集;右外连接查询结果是右表的全部和两表的交集;
10、约束
对表中字段值的限制
分类:
1、非空约束
关键字:
not null
限制了字段值不能为空
--1.建表时,添加非空约束 create table 表名(字段名 字段类型 not null,字段名 字段类型,...); --2.建表后,添加非空约束 alter table 表名 modify 字段名 字段类型 not null;
注:已经存在空值的字段不能修改成非空
2、唯一约束
关键字:
unique
限制了字段值不能重复
--1.建表时,添加唯一约束 create table 表名(字段名 字段类型 unique ,字段名 字段类型,...); --2.建表后,添加唯一约束 alter table 表名 modify 字段名 字段类型 unique;
注:
1、已经存在重复值的字段不能修改成唯一的
2、一个字段可以同时设置成非空、唯一的,非空和唯一的关键字顺序任意
3、主键约束
关键字:
primary key
主键约束是一条记录的唯一标识
特点:
1.非空且唯一
2.一张表只能有一个主键字段
--1.建表时,添加主键约束 create table 表名(字段名 字段类型 primary key ,字段名 字段类型,...); create table 表名(字段名 字段类型 ,字段名 字段类型,字段名 字段类型,... , primary key(字段名) ); --1.建表后,添加主键约束 alter table 表名 modify 字段名 字段类型 primary key;
主键自增长:
create table 表名(字段名 字段类型 primary key auto_increment ,字段名 字段类型,...);
注意:
1.只有主键才能自增长
2.主键必须是数值类型的才能自增长
3.添加记录时,自增长的主键值可以为
null
1.第一条记录从1开始
2.其他记录从存在过的最大值开始+1
11、函数
概念:将一组逻辑语句封装在方法体中,对外暴露方法名
好处:
1.提高了代码的复用性
2.隐藏了功能的实现细节
调用:
select 函数名(参数列表)from表名
1、字符(串)函数
--*1.length():返回的是指定字符串的字节数,gbk编码下一个汉字占两个字节,utf8编码下一个汉字占三个字节 --2.concat():将多个内容拼接 select concat(last_name,first_name) from employees --3.upper()大写,lower()小写 select concat('我叫',upper(last_name),',我的邮箱是',lower(email)) from employees --*4.substr():截取 select substr('abcdefg',2) --bcdefg select substr('abcdefg',2,3) -- 3代表长度 --*5.instr(a,b):返回b在a中第一次出现的位置,a中不存在b,返回0 select instr('abcdefg','b') --2
2、数学函数
--1.round():四舍五入 select round(-1,5) -- -2 --2.truncate():保留指定的小数位 select truncate(2.4567,3) -- 2.456 select truncate(2.4567,2) -- 2.45 --3.ceil():向上取整 select ceil(2.4567) -- 3 select ceil(-2.4567) -- -2 --4.floor()向下取整 select floor(2.4567) -- 2 select floor(-2.4567) -- -3 --5.mod() 取模,求余数 select mod(10,-3) 本质:10 % -3 a % b 等价于 a - a / b * b
3.日期函数
--1.now() : 返回当前日期和时间 select now(); --2.curtime():返回当前时间 select curtime(); --3.curdate():返回当前日期 select curdate(); --4.year() select year(now()); --2022 --5.month() select avg(salary) ,month(hire_date) from employees group by month(hire_date) order by month(hire_date);
4、其他函数
--1.version() :查询版本 select version(); --2.database() :查看正在使用的数据库 select database();
返回当前日期和时间
select now();
–2.curtime():返回当前时间
select curtime();–3.curdate():返回当前日期
select curdate();–4.year()
select year(now()); --2022–5.month()
select avg(salary) ,month(hire_date) from employees group by month(hire_date) order by month(hire_date);4、其他函数 ```sql --1.version() :查询版本 select version(); --2.database() :查看正在使用的数据库 select database();