6.5 自学测试 数据库基础 Day5
一、数据库简介
(一)数据库存储阶段发展
1.人工管理阶段:不方便管理和查询
2.文件系统阶段:查询不是很方便
3.数据库阶段:有组织的数据集合,方便维护和管理查询
数据库:是指长期存储在计算机内、有组织的数据集合。简而言之,数据库就是一个存储数据的地方
(二)数据库分类
1.关系型数据库 RDMS:将数据间的关系以数据库表的形式加以表达,并将数据存储在表格中,以便于查询
常用的关系型:Oracle、MySQL、Microsoft、SQLite
2.非关系型数据库 NoSQL
常用的非关系型:Redis、Mongodb、Hbase
(三)关系型数据库核心要素
1.数据行:一条记录
2.数据列:字段
3.数据表:数据行的集合
4.数据库:数据表的集合、一个数据库中能够有n多个数据表
先有库、再有表、再有内容
(四)SQL介绍
SQL:Structured Query Language(结构化查询语言),通过SQL语言可以对数据库进行操作。
SQL语言分类:
DQL:数据查询语言,用于对数据进行查询,例如:select
DML:数据操作语言,对数据进行增加、修改、删除,例如:insert、update、delete
注意:主流的关系型数据库都支持SQL语言,在MySql中SQL语言不区分大小写
二、MySql简介
(一)MySQL特点
(二)常用的数据类型
(三)数据约束
数据约束主要是指对数据库中数据进行限制,以确保数据的正确性、有效性、一致性。
常见数据约束有:
- 主键(primary key):物理上存储的顺序
- 非空(not null):此字段不允许填写空值
- 唯一(unique):此字段的值不允许重复
- 默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准
- 外键(foreign key):维护两个表之间的关联关系
三、命令操作数据库和表
(一)操作数据库
说明:操作数据库之前要选通过工具连接到数据库。
常见数据库操作命令:
- 查看所有数据库:show databases;
- 使用数据库:use 数据库名;
- 查看当前使用数据库:select database();
- 创建数据库:create data base 数据库名 charset=utf8;
-
删除数据库:drop database 数据库名;
(二)操作数据表
说明:操作数据表之前要选通过use打开对应的数据库。
常见数据表操作命令:
- 查看当前数据库所有的表:show tables;
- 查看表结构:desc 表名;
- 查看表的创建语句:show create table 表名;
四、SQL语言
(一)数据库表操作
1.创建数据库表
create table 表名 (字段名1 类型 约束,字段名2 类型 约束,……….….)
例如:create table students (name varchar (10),age int unsigned )
2.删除数据库表
drop table 表名
drop table if exists 表名
例如:drop table students
drop table if exists students
(二)数据的增删改查操作
1.简单查询
select * from 表名;
例如:select * from students;
2.添加一行数据
insert into 表名 values( )
insert into students values ( 0,‘mike’,22,177.34)
insert into 表名(字段1,字段2) value (值1,值2)
insert into students (name) values ('坤坤')
3.添加多行数据
方法一:写多条insert 语句,多条用英文分号分隔
方法二:通过一条insert 语句插入多条数据,数据间用英文逗号分隔
insert into 表名 values (...) , (...) ...
insert into students values (0 ,'亚瑟3 ',23 ,167.56) , (0 ,'亚瑟4' ,23 ,167.56)
4.修改数据
update 表名 set 字段名1 = 值1,字段名2 = 值2 where 条件
例如: update students set name='狄仁杰' ,age=20 where id=5
5.删除数据
delete from 表名 where 条件
例如 :delect from students where id = 6
Truncate 删除数据: truncate table 表名
Drop 删除表:drop table 表名
(三)数据查询操作
1.条件查询
select 字段1,字段2... from 表名 where 条件;
例如: select * from students where id=1;
2.模糊查询
关键词:like
%:匹配任意多个字符
_:匹配一个任意字符
例1:查询姓孙的学生 select * from students where name like' 孙%'
例2:查询姓孙且名字是一个字的学生 select * from students where name like '孙_'
3.范围查询
in 表示在一个非连续的范围内
select * from students where hometown in('北京','上海','广东')
between...and...表示在一个连续的范围内例
select * from students where age between 18 and 20
4.排序
select * from 表名 order by 字段名1 asc|desc,字段名2 asc|desc
asc:升序(默认)
desc:降序
5.聚合函数
6.分组查询
select 字段1,字段2, 聚合函数... from 表名 groupby 字段1,字段2...
查询各种性别的人数 select sex,count(*) from students group by sex
7.分组后的筛选
select 字段1,字段2, 聚合... from 表名 group by 字段1,字段2,字段3... having 条件
select sex,count(*) from students group by sex having sex='男'
8.having与where对比
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选。
- having是对groupby的结果进行筛选。
- having后面的条件中可以用聚合函数,where后面不可以。
9.获取部分数据
select * from 表名 limit start , count
例如: 查询前3行学生信息 select * from students limit 0, 3
10.连接查询——内连接
方法一:select * from 表1 inner join 表2 on 表1.列 = 表2.列
方法二:select * from 表1,表2 where 表1.列 = 表2.列
查询学生信息及学生的成绩
方法一:select * from students stu inner join scores sc on stu.studentNo = sc.studentNo
方法二:select * from students stu, scores sc where stu.studentNo = sc.studentNo
11.连接查询——左连接(左表特有的数据,右边不存在为null)
select * from 表1 left join 表2 on 表1.列=表2.列
12.连接查询——左连接(右边特有数据,左边不存在为null)
select * from 表1 right join 表2 on 表1.列=表2.列
13.自关联
inner join 关联同一个表,不同的字段,自关联要用别名
查询河南省所有的市
Select * from areas as a1 inner join areas as a2 on a1.aid = a2.pid where a1.atitle ='河南省';