数据库入门
1、什么是数据库
数据库:数据存储的仓库
特点:
1)长期存储数据
2)对数据进行有组织的管理 *体现:通过操作指定的语言完成数据的增、删、改、查
2、数据库分类(分类标准:按照数据存储格式的不同)
1)关系型数据库RDMS:(Relational Database Management System):以二维表的形式进行数据的存储
*二维表:类似excel,有行和列
*常见关系型数据库:Oracle(主要用于大型项目,如银行)、SQL Server、SQlite、MySQL(主要用于中小型项目,目前应用软件最常用的数据库)
*关系型数据库核心要素:a.数据行(一条记录)b.数据列(字段)c.数据表(数据行的集合)d.数据库(数据表的集合,一个数据库中能够有n多个数据表)
2)非关系型数据库NoSQL(not only sql)
redis:键值对,开源,可做数据库、缓存、消息中间件和队列
MangoDB:文档
Hbasd:(大数据存储)一个结构化数据的分布式存储系统
3、MySQL简介:
分为社区版和商业版本,社区版本免费使用
1)MySQL特点:
1、可移植性好
2、支持多操作系统
3、支持多种编程语言
4、开源、社区版免费
5、支持多线程
6、优化sql查询算法
7、多种数据库连接方式
8、支持多语言编码格式
2)MySQL组成:
1、Mysql服务:存储数据并解析编译后的sql语言,将执行结果返回给客户端
2、、Mysql客户端:下发用户要执行的sql语句,并显示服务返回的执行结果
3)Mysql连接:
MySQL安装完成默认已安装命令行客户端,连接前要知道MySQL服务的ip地址(windows通过ipconfig,linux用ifconfig查看)和端口(默认3306)
连接命令:mysql -hhost -p端口号 -u用户名 -p密码
*host :服务器ip地址或域名,不填表示为本机。-p端口号不加则表示默认端口3306
4)MySQL连接工具:Dbeaver用的比较多,还有Navicat、mysql workbench等
以Dbeaver连接为例:
4、SQL:Structured Query Language(结构化查询语言)
1)作用:通过SQL语言可以对数据库进行操作。
2)分类:
a. DQL:数据查询语言,用于对数据进行查询.例如:select
b. DML:数据操作语言,对数据进行增、删、改操作。例如:insert、update、delete
c. TPL:事务处理语言,对事物进行处理,例:begin、transaction、commit、rollback
d. DCL:数据控制语言,进行授权与权限回收。例:grant、revoke
e. DDL:数据定义语言,进行数据库、表的管理。例:create、drop
f. CCL:指针控制语言,通过控制指针完成表的操作。例:declare、cursor
5、命令操作数据库和表
1)常见操作数据库命令
查看所有数据库:show databases;
使用数据库:use 数据库名;
查看当前使用数据库:select database();
创建数据库:create database 数据库名 charset=utf8;
删除数据库:drop database 数据库名;
2)常见操作数据表的命令
*操作数据表之前要先通过use打开对应的数据库
查看当前数据库所有的表:show tables;
查看表结构:desc 表名;
查看表的创建语句:show create table 表名;
创建数据库表:
语法格式:
create table 表名(
字段名1 类型(长度)约束,
字段名2 类型(长度)约束,
... ... ...
)
例:
create table students(
Id int unsigned primary key auto_increment,
Name varchar(20),
Age int unsigned,
Height decimal(5,2)
)
注意:
1)最后一个字段)之前不加,
2)Id int unsigned primary key auto_increment,主键id自增长
*数据约束:主要是指对数据库中数据进行限制,以确保数据的正确性、有效性、一致性
常见约束:
主键(primary key):物理上存储的顺序 非空(not null):此字段不允许填写空值
唯一(unique):此字段的值不允许重复 外键(foreign key):维护两个表之间的关联关系
默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准
*常用数据类型:
整型int:有符号范围(-21474836482147483647)无符号(unsigned)范围(04294967295)
小数decimal:示例:decimal(5,2),表示该字段可以存5位小数,其中小数位数为2,整数为3
字符串varchar:范围(0~65533)一个字母或一个中文点一个字符 例:varchar(3)最多存3个字符
时间日期datetime:范围(1000-01-01 00:00:00~9999-12-31 23:59:59 示例:2021-01-01 12:29:59
3)删除数据库表
语法格式:
方法一:drop table 表名;
方法二:drop table if exists 表名;
例:
drop table students;
drop table if exists students
4)增加数据
a.添加一行数据:
*主键自增长,可以用0或null代替
方法一:insert into 表名 values(...)
方法二:insert into 表名(字段1,字段2,...) value (值1,值2,...)
例:insert into students values(0,’亚瑟’,22,177.56)
Insert into students(name,age)values(‘老夫子’,22)
注:全表添加可以用方法一也可以用方法二,部分字段添加用方法二
b.添加多行数据
方法一:写多条insert语句,多条语句之间用英文分号分隔
例:
insert into students(name) value ('老夫子2');
insert into students(name) value ('老夫子3');
insert into students values(0,'亚瑟2',23)
方式二: 通过一条insert语句插入多条数据,数据间用逗号分隔
格式一: insert into 表名 values (...), (...) ...
例: insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56)
格式二: insert into 表名(字段名1,...) value(值1,...),(值1,...)...
例: insert into students(name) value ('老夫子5'),('老夫子6')
5)修改数据
语法格式:
update 表名 set 字段名1=值1,字段名2=值2... where 条件
例:update students set name='狄仁杰',age=20 where id=5;
6) 删除数据
-delete(可以通过where子句删除部分记录删除所有数据时,自增长字段不会从1开始)
语法格式:
delete from 表名 where 条件
例:delete from students where id=6
-Truncate删除数据(表结构会保留,自增长字段从1开始。执行效率低于drop命令):
truncate table 表名
-Drop删除表(包括所有数据和表结构,删除表使用,且删除数据效率最高) :
格式三:drop table 表名
7)数据查询
a.简单查询
语法格式:
select * from 表名;
例: select * from students;
b.查询部分字段数据:
select 字段1,字段2,... from 表名
例:select name,sex,age from students
c.起别名:
select 别名.字段1,别名.字段2,... from 表名 as 别名
select 字段1 as 别名1,字段2 as 别名2,... from 表名
d.去重:
select distinct 字段1,... from 表名
e. 条件查询(是根据一定的条件去查询数据的结果)
语法格式:
select 字段1,字段2... from 表名 where 条件;
例: select * from students where studentNo = 001;
*where支持多种运算符进行条件处理
*比较运算符:大于>、小于<、等于=、不等于!=或<>、大于等于>=、小于等于<=
*逻辑运算符:and、or、not
*模糊查询:1)关键字: like 2)% :匹配任意多个字符 3)_ : 匹配一个任意字符
*范围查询:1)in表示在一个非连续的范围内 2)between ... and ...表示在一个连续的范围内
*空判断:1)判断为空: is null 2)判断非空: is not null
*注意:Mysql中空表示null,与 ‘’ (空)是不一样的
f.排序
语法格式:
select * from 表名 order by 字段名1 asc|desc, 字段名2 asc|desc,....
说明:
⚫ 将行数据按照字段1进行排序,如果某些字段1的值相同时,则按照字段2排序,以此类推
⚫ 默认按照列值从小到排列
⚫ asc从小到大排列,即升序
⚫ desc从大到小排序,即降大序
g.聚合函数
使用聚合函数方便进行数据统计
聚合函数不能作为 where 条件
count( ):查询总记录数
max(字段名):查询最大值
min(字段名):查询最小值
sum(字段名):求和
avg(字段名):求平均数
h.分组查询****
where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。
⚫ 按照字段分组,此字段相同的数据会被放到一个组中
⚫ 分组的目的是对每一组的数据进行统计(使用聚合函数)
⚫ 语法格式:
select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...
例3:查询各个班级的人数
select class,count(*) from students group by class;
i.分组后的数据筛选
⚫语法格式:
select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件
说明: 关键字having后面的条件运算符与where的相同
having与where对比
where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。
having 是对 group by 的结果进行筛选。
having 后面的条件中可以用聚合函数,where后面不可以。
例1:查询男生总人数
方案一:select count(*) from students where sex='男'
方案二:select sex,count(*) from students group by sex having sex=‘男’
j.分页-获取部分数据
⚫使用场景: 用来获取一部分的数据或者用来分页
⚫语法格式:
select * from 表名 limit start,count
说明:
⚫从start开始,获取count条数据
⚫ start索引从0开始
例1:查询前3行学生信息
select * from students limit 0,3;
select * from students limit 3;
k.分页实现
⚫ Limit典型应用场景是分页查询:
select * from students limit (n-1)*m, m
说明:
⚫ n表示显示第几页的数据
⚫ m表示每页显示多少条数据
注意:
⚫(n-1)*m, m 是公式,并不是语法格式,不能直接写在SQL语句中
l.连接查询-常用方式
01.左连接:结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null 填充
⚫语法格式:
select * from 表1
left join 表2 on 表1.列=表2.列
例1:查询所有学生的成绩,包括没有成绩的学生
select * from students stu left join scores sc on stu.studentNo = sc.studentNo
02.右连接:结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null 填充
⚫语法格式:
select * from 表1
right join 表2 on 表1.列=表2.列
例1:查询所有学生的成绩,包括没有成绩的学生
select * from scores sc right join students stu on stu.studentNo = sc.studentNo
03内连接:结果为两个表匹配到的数据加
⚫语法格式:
select * from 表1
inner join 表2 on 表1.列=表2.列
⚫ 另一种写法:
select * from 表1,表2 where 表1.列=表2.列
例1:查询学生信息及学生的成绩
方式一: Select * from students stu inner join scores sc on stu.studentNo = sc.studentNo
方式二:select * from students stu, scores sc where stu.studentNo = sc.studentNo
04、自关联(表特点:存在上下级关系)
⚫ 自关联:inner join 关联同一个表,不同的字段。
⚫ 自关联要用别名
05子查询****
*嵌入在其他查询语句中的select语句称为子查询其他的查询语句称之为主查询。
*子查询辅助主查询,要么充当条件,要么充当数据源
*子查询是一条完整的、可单独执行的select查询语句。