数据库说明:指长期存储在计算机内、 有组织的数据集
数据库的分类
1.关系型数据库:
Oracle: 在大型项目中使用, 例如: 银行、 电信等项目
MySQL: Web 项目中使用最广泛的关系型数据库
Microsoft SQL Server: 在微软的项目中使用
SQLite: 轻量级数据库, 主要应用在移动平台
核心要素:数据行 数据列 数据表 数据库
2.非关系型数据库:redis mongodb hbase
命令连接MySQL数据库
前置条件:1.确定mysql的IP地址 (可以通过ifconfit来确定)
2.确定MySQL数据库服务是否开启(netstat -snput | grep 3306)
连接命令:mysql -h数据库 -P端口号 -u数据库登录用户名 -p数据库登录密码
-h不加时则表示为本机
-P不加时则表示默认3306端口
数据类型:
整形int
字符串:varchar (范围 varchar3 表示最多存3个字符 )
小数:decimal 【 decimal(5,2) 表示该字段可以存5位数,其中小数位2,整数3】
时间日期:datetime
数据约束:
主键:物理上存储的顺序
当把某个字段设定为主键之后,该字段的值 必须唯一,且不能为空
针对主键的字段,可以设定 自动自增,自动在原来最大的ID值上加1
外键:维护两个表之间的关联关系
非空:此字段不允许填写空值 【空(null)和 ” 空字符是不一样的】
唯一:此字段的值不允许重复
默认值:当不填写此值时会使用默认值, 如果填写时以填写为准
命令操作数据库
前置条件
命令行终端或DBeaver工具先连接数据库
mysql -uroot -p123456
常见数据库操作命令:
查看所有数据库:show databases;
使用数据库:use 数据库名;
查看当前使用数据库:select database();
创建数据库:create database 数据库名 charset=utf8;
删除数据库:drop database 数据库名;
命令操作数据库表
前置条件
操作数据表之前要选通过use打开对应的数据库
常见数据表操作命令:
查看当前数据库所有的表:show tables;
查看表结构:desc 表名;
查看表的创建语句:show create table 表名;
SQL语句
创建数据库表语法格式
create table 表名(
字段名1 类型 约束,
字段名2 类型 约束,
…… …… ……
)
创建学生表,字段要求如下:
姓名(长度为10)、年龄、身高(保留2位小数)
create table students(
id int unsigned primary key auto_increment, — id字段为主键,且值自增
name varchar(20), — name字段类型为字符串,长度为20
age int unsigned, — age 字段类型为无符号的整型
height decimal(5,2) — height字段类型为小数,小数位数为2
);
删除数据库表
drop table students;
drop table if exists students;
简单查询:select * from 表名;
添加一行数据:insert into 表名 values(…)
insert into students (id, name) values(0,’张三’);
insert into students values(0,’李四’,20,180);
添加多行数据:
insert into 表名 values (…), (…) …
insert into students values(0,’亚瑟3′,23,167.56),(0,’亚瑟4′,23,167.56);
insert into 表名 (字段名1,字段名2….) values (字段值1,字段值2,….),(字段值1,字段值2,….)
insert into students (id,name)values(0,’小黑’),(0,’小蓝’),(null,’大白’);
修改数据:update 表名 set 字段名1=值1,字段名2=值2…… where 条件
删除数据:delete from 表名 where 条件(物理删除对应的数据)
注意:此方法为物理删除(找不回来), 工作中大部分使用逻辑删除(假删除,压根没删)
删除部分记录 自增长字段不会从1 开始
drop table 表名 (删除数据表,包括数据和表结构)
数据查询操作
查询部分字段的值:select 字段名1,字段名2…. from 表名
条件查询
比较运算符:大于(>)、等于(=)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(<>或者!=)
select * from 表名 where 条件
逻辑运算符: and(且,同时符合对应的条件), or(或,符合其中的一个条件), not(非,不符合该条件)
例:– 查询非天津学生的记录 select * from students where not hometown=’天津’;
模糊查询:select * from 表名 where 字段 like ‘ %或-‘
范围查询
in : 查询非连续范围内的数据
between … and : 查询连续范围内的数据(用来数值型字段中)
select * from 表名 where 字段 in(‘ xx, ‘y’ , ‘z’ )
select * from 表名 where 字段 between xx and xx ;
为空判断
空判断: is null
非空判断: is not null
排序:select * from 表名 order by 字段1 asc或desc**, 字段2** asc或desc ……..
asc: 表示从小到大排序(升序)
desc: 表示从大到小排序(降序)
聚合函数: select 聚合函数 from 表名 where 条件’;
count():查询总记录数
max:查询最大值
min:查询最小值
sum: 求和
avg:求平均数
分组查询 : (目的是对每一组的数据进行统计(使用聚合函数)
语法:select 字段名1,字段名2,聚合函数…. from 表名 group by 字段名1,字段名2….
分组后的数据筛选:
将分组之后的数据当成是一个表数据,然后再通过having 条件来对当前的表数据进行筛选
语法:select 字段名1,字段名2,聚合函数…. from 表名 group by 字段名1,字段名2…. having 条件
having 条件 运算符跟where 条件运算符是一样的
在having后面可以使用聚合聚函数
例– 查询所有班级中不同性别的记录数大于1的信息 select class, sex,count() from students group by class,sex having count()>1;
注:where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选
having 是对group by 的结果进行筛选
having 后面的条件中可以用聚合函数 where后面
连接查询
内连接: 连接两个表时,取的是两个表中都存在的数据。(取交集)
语法格式:select * from 表名1 inner join 表名2 on 表1.列=表2.列;
查询的是两个表的交集的数据
表1的列与表2的列一定是存在关联关系
内连接连接时可以连接多个表
左连接: 连接两个表时,取的是左表中特有的数据,对于右表中不存在的数据,用null来填充
语法格式:select * from 表1 left join 表2 on 表1.列=表2.列
右连接:连接两个表时,取的是右表中特有的数据,对于左表中不存在的数据,用null来填充
语法格式:select * from 表1 right join 表2 on 表1.列=表2.列
自关联
自连接的应用场景:
在同一张表中,用两个字段来表示记录之间的层级关系时,可以使用自关联。比如地址信息中的,省、市的信息。
省、市、区的信息,一般不会分开放在不同的表里面进行存储,而是放在同一个表当中。
要通过自关联进行查询时,当前自关联的表当中一定会存在两个相关联的字段
自关联要用别名
语法格式: select * from 表名 as 别名1 inner join 表名 as 别名2 on 别名1.列=别名2.列
子查询
将一条SQL查询的语句嵌入在其他的SQL语句中,被嵌入的SQL语句称之为子查询,其他的SQL称之为主查询
子查询select语句,要么是充当条件,要么充当数据源
子查询语句是一条完整的select语句,且可以单独执行