* 数据库的概念
存储数据的仓库,电脑装有数据库软件,就可以对外提供数据的增删改查服务,这台电脑,就是一台,数据库服务器
* 常见数据库:
SQLServer 微软的 中小型关系型数据库
MySQL 中小型的关系型数据库
Oracle 大型的关系型数据库
* 关系型数据库和非关系型数据库
关系型数据库 :具有行和列的这种二维表结构的数据库
非关系型数据: NOSQL 用键值关系来存储数据 类似 json
* 数据库的安装和卸载
数据库的安装
数据库的卸载
-
可以使用第三方的卸载软件来卸载
-
在控制面板里面常规卸载
(1) 停止后台服务 电脑–右键–管理—服务—mysql–右键停止掉
(2) 卸载
(3) 清除残留文件 C:\ProgramData\MySQL 把这个MySQL文件夹删除
操作数据库 增删改查
SQL:结构化查询语言,用来对关系型数据库进行操作,它是一套规范,关系型数据库,都会遵循此规范,但是允许有差异,称为方言
* SQL语句分类
sql分类:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
* DDL:
-
创建数据库:create database 数据库名 例如: create database mydb;
-
查询所有库:show databases;
-
删除:drop database mydb;
-
修改数据库编码:alter database mydb character set=‘gbk’;
-
查看建库语句:show create database mydb;
-
我们要建表 删除表 对表头进行操作(增删改表头)
-
切换库 use mydb;
-
查看改库下所有的表 show tables;
-
查看表结构 desc 表名; 例如: desc student;
表头: id name age sal
-
创建表时,列名 要有数据类型 数据库中常见的列的数据类型
-
列的数据类型:
int:整型 id int,double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
money double(5,2)char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;存大格式的文本 比如存个小说 一般不用
blob:字节类型;存字节类型的数据 比如电影字节 图片字节 但是一般不会把字节数据存到数据库当中
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss (如果该类型的字段不给赋值,则默认当前时间)
-
创建表:create table 表名(列名1 数据类型,列名2 数据类型2(长度), …);
create table student(
id int,
name varchar(16),
age int,
sal double(5,2),
birthday timestamp
); -
列名的命名的规范:遵循java中的命名规范,记住不要拿MySQL中的关键字来命名
-
修改表名:alter table 旧表名 rename to 新表名
alter table student rename to stu; -
删除表 drop table 表名
drop table student; -
表中 表头的操作 alter
添加一个列
alter table student add(phone varchar(11));
删除一个列
alter table student drop phone;修改列名
alter table student change name username varchar(20);修改列的数据类型
alter table student modify username char(20);alter table student change username username varchar(20);
-
查看建表语句
show create table student;
* DML:给表中 插入数据,删除数据,修改数据
-
插入数据 insert into 表名(字段名,字段名2,…) valuses(值1,值2,…);
insert into student(id,name,age,sal) values(1,‘zhangsan’,23,555.55);
字符串类型的类 值的话,用单引号引起来
insert into student(name) values(‘wangwu’);yyyy-MM-dd hh:mm:ss
日期类型的列 值的话 用单引号引起来
insert into student(name,birthday) values(‘wangwu2’,‘2010-10-10 16:20:20’);
insert into student(name,birthday) values(‘wangwu3’,null);要给表中所有的字段都插入值 可以简写
insert into student(id,name,age,sal,birthday) values(1,‘zhangsan2’,23,555.55,null);insert into student values(10,‘zhangsan222’,23,555.55,null);
-
删除表中所有的数据(逐行删除)
delete from student; – 无条件的删除,删除表中所有数据
-
删除表中所有的数据(先删除表,再创建表)
truncate table 表名;-- 删除所有记录
-
条件删除 where = > < >= <= and 并且 or 或者
delete from student where name=‘zhangsan’;delete from student where name=‘zhangsan’ and birthday=‘2019-08-21 15:44:12’
delete from student where name=‘zhangsan’ or name=‘wangwu2’ or name=‘wangwu3’;
-
修改表中的数据 update student set 字段名=‘修改的值’ , set 字段名 … where 条件
不带有条件的修改
update student set name=‘lisi’,age=30;带有条件的修改
update student set name=‘wangwu’,age=25,sal=666.66 where name=‘zhangsan2’ and birthday=‘2019-08-21 15:52:59’;
* DQL: select 查询表中的数据
-
查询表中所有的信息
select * from 表名 -
查询个别字段
select 字段名称,字段名称 from 表名 -
条件查询
=、!=、<>(不等于)、<、<=、>、>=
between…and… 在什么范围之间
in(set);
is null;为空
is not null 不为空
and 并且
or 或者
not 非
-
等值 条件
-
查询工资等于 800的员工
select * from emp where sal=800; -
查询工资大于1500的员工
select * from emp where sal>=1500; -
查询工资大于1000 奖金大于1000的员工
select * from emp where sal>1000 and comm>1000; -
查询工资 大于等于2000 小于等于 3000 的员工
select * from emp where sal>=2000 and sal<=3000;select * from emp where sal between 2000 and 3000;
-
要查询奖金是null的员工
-
null 值比较特殊,你要判断是不是null 用 = 或 != 判别不出来
select * from emp where comm is null
select * from emp where comm is not null
-
字段运算
-
查询这个员工的年薪是多少
select ename,sal,sal*12 from emp;
-
可以给字段起别名,用于展示好看一些 AS 可以省略不写
select ename 姓名,sal 月薪,sal*12 AS 年薪 from emp;
-
查询这个员工的年薪是多少 并且把奖金加上
-
null值参与运算 结果就是null了
-
ifnull 来处理null 值 ifnull(0,comm)
select ename AS 姓名,sal as 月薪,comm as 奖金,(sal*12)+ifnull(0,comm) as 年薪 from emp; -
注意 nullif(参数一,参数二) 如果参数一等于参数二,返回值为NULL,否则返回参数一
-
查询工资是3000的 distinct 对结果去重
select distinct sal from emp where sal=3000; -
查询这个奖金是 500 300 1400 的员工
select * from emp where comm=300 OR comm=500 OR comm=1400; -
in()
select * from emp where comm in(300,500,1400) OR sal in(800); -
as 可以给字段起别名,也可以给表起别名
select e.ename
,e.job
,e.sal
from emp as e where e.comm
is not null; -
模糊查询 like
%通配多个任意字符
_ 统配单个任意字符 -
查询 姓名包含S的员工
select * from emp where ename like ‘%S%’ -
查询 姓名是以S开头的
select * from emp where ename like ‘S%’ -
查询 姓名是以T结尾的
select * from emp where ename like ‘%T’ -
查询 姓名第二个字符是C的员工
select * from emp where ename like ‘__O%’ -
查询 姓名是5个字符组成的
select * from emp where ename like ‘_____’ -
排序 order by
-
查询工资 从小到大排列
select * from emp order by sal asc; – 默认升序排列select * from emp order by sal desc; – 降序排列
select * from emp order by sal asc,comm desc; – 可以排序多个字段
-
聚合函数:
-
聚合函数是用来做纵向运算的函数:
count(empno) 统计一列由多少个 -
统计工资发了多少
select sum(sal) as 总支出from emp; -
统计最高工资 最小工资 平均工资
select max(sal) as 最高工资 from emp;select min(sal) as 最小工资 from emp;
select avg(sal) as 平均工资 from emp;
-
group by
select deptno as 部门号, avg(sal) as 部门平均工资 from emp group by deptno;
-
例如查询 每个部门的部门编号 以及每个部门工资大于1500的人数
分组之前可以通过where 做条件筛选
select deptno as 部门号, count(*) as 部门人数 from emp where sal>1500 group by deptno; -
.例如 我要查询 各个部门平均工资 大于2000 的部门
-
having 对分组之后的结果,进行再次筛选
select deptno as 部门号, avg(sal) as 部门平均工资 from emp group by deptno having avg(sal)>2000
select deptno as 部门号, avg(sal) as 部门平均工资 from emp group by deptno having 部门平均工资>2000
-
where 和 having 的区别,where 是分组之前,进行条件筛选,不符合条件的不参与分组,having 是对分组之后产生的结果集,进行再次筛选
-
分页查询 limit
-
查询第一页,每页展示4条
select * from emp limit 0,4; – 第一页
select * from emp limit 4,4; – 第二页
select * from emp limit 8,4; – 第三页
select * from emp limit 12,4; – 第四页
-
起始索引=(页码-1)*每页的条数