认识数据库

98 阅读11分钟

数据库入门

什么是是数据库

数据存储的仓库

数据库的特点

1.长期存储数据 2.对于数据进行有组织的管理 体现:通过操作指定的语言完成数据的增删改查

数据库的分类

分类标准:按照数据存储格式的不同

关系型数据库:以二维码的形式进行书数据的存储

解释(二维表):类似excel,有行和列

常见关系型数据库:Oracie,mysql ,sql server,sqlite

Oracle :主要用于大型项目(银行)

mysql:主要用于中小型项目(目前应用软件最常用的数据库)

非关系型数据库:

redis:键值对 mangoDB:文档

数据库的核心要素:库表列行

数据库(数据表的集合,一个数据库中能够有 n多个数据表) 1.新建一个数据库

数据表(数据行的集合) 2.库中新建数据表

数据列(字段) 3.表中定义数据列(字段)

数据行 (一条记录) 4.写入(插入)一行-行的数据

MySQL介绍

MySQL: 关系型数据库。分为社区版和商业版,社区版免费。公司使用商业版,个人学习使用社区版

特点: 1.支持多种操作系统(windows,mac,linux) 公司MySOL安装在服务器Linux系统

2.支持多种编程语言(可以借助编程语言完成SQL语句的执行,以及结果的处理)组成0 。MySQL服务:存储数据,执行传入的SOL语句 。MySQL客P端: 接收用户输入的SQL语句,以及展示SQL语句的执行结果

MySQL数据库默认端口号: 3306

说明: MySQL客户端对于SQL语句执行和结果查看不是很方便,所以可以使用数据库编辑工具更好完成对0于数据库的数据进行操作

常用数据库编辑工具: DBeaver,navicat

连接MySQL数据库,需要传入哪些数据?

host:数据据所在服务器的Ip地址

域名 端口号 登陆的账号和密码

MySQL组成:

⚫ MySQL服务器:存储数据并解析编译后的SQL语句,将执行结果返回给客户端。

⚫ MySQL客户端:下发用户要执行的SQL语句,并显示服务器返回的执行结果。

数据库的操作 使用数据库 01在DBeaver窗口中,双击左侧已连接的连接名称即可打开并连接到数据库

02创建数据库 打开数据库后,右击 连接名称,选择"创建 - 数据库”,然后输入对应的 数据,点击确定

03修改数据库 打开数据库后,右击要修改的数据库名称,选择 “查看数据库”

04删除数据库 打开数据库后,右击 要删除的数据库名称,选择 “删除”

DBeaver操作MYSQL 数据表的操作-创建表

1.选择已打开的数据库,右击 “创建 - 表”,填写表名

2.在新窗口中,右键“新建列”,输入所需要的字段名称、字段类型、长度等相关数据

3.点击“保存”按钮,在弹出SQL预览框中,点击“执行”即可

常用数据类型

整体:int 有符号范围(-2147483648 ~2147483647)无符号范围(0 ~ 4294967295)

字符串:varchar 范围(0~65533)个字母或一个中文点一个字符 例如: varchar(3) 表示最多存3个字符

小数:decimal 示例: decimal(5,2),表示该字段可以存5位数,其中小数位数为2,整数为3

时间日期:datetime 范围 (1000-01-01 00:00:00~9999-12-31 23:59:59) 示例:2021-01-01 12:29:59

数据约束 默认值:当不填写时使用默认值,填写时使用填写内容

非空:此字段不允许填写空值

说明1: NULL(数据为空)

说明2:看起来字段为空,其实是空字符串

主键:提高数据的查询速度

特点:

1.唯一性:主键值必须是唯一的,不能重复

2.非空性:主键不能为空

3.不变性:主键使用了,不可更改

4.单一性:一张数据表,仅能设置一个主键

唯一性: 此字段的值不允许重复

特点:一个表中可以设置多个字段值具有唯一性

外键:维护两个表之间的依赖关系

数据库表操作

1.创建表

格式:create table 表名(

id int unsigned primary key auto_increment,

字段名称1 数据类型1,

字段名称2 数据类型2,

字段名称3 数据类型3

);

数据增加

image.png

格式:

方式一:全字段添加

insert into 表名 values(…);

方式二:选择字段添加

insert into 表名 (字段1, 字段2, …) values(值1, 值2, …);

2.删除数据库表

语法格式:

方法一: drop table 表名

方法二: drop table if exists 表名

三种删除数据的区别

delete

1.delete可以通过where子句删除部分记录。

2、delete删除所有数据时,自增长字段不会从1开始

truncate

1.truncate删除数据时,表结构会保留,自增长字段

2.从1开始。执行效率低于drop命令

drop

1.如果想删除表,建议使用drop,且删除数据效率最高

3.修改数据

语法格式:

update 表名 set 字段名1=值1,字段名2=值2... where 条件

4.简单查询

语法格式:

select * from 表名;

四.数据查询操作--单表查询

1.查询基本语法

#查询部分字段数据:

select 字段1,字段2,... from 表名

#起别名:

select 别名.字段1,别名.字段2,... from 表名 as 别名

select 字段1 as 别名1,字段2 as 别名2,... from 表名

#去重:

select distinct 字段1,... from 表名

2.条件查询-语法格式

条件查询是根据一定的条件去查询数据的结果。

语法格式:

select 字段1,字段2... from 表名 where 条件;

3.条件查询-比较运算符

等于:=

大于:>

小于:<

大于等于:>=

小于等于:<=

不等于:!=或<>

#语法格式:表名 where 查询的字段名称 比较运算符 预期数据

#编写SQL语句思路

  1. 找出最终需要展示的字段有哪些

  2. 找出查询字段(条件字段)

  3. 使用哪一种运算符

  4. 找出预期数据

4.条件查询-逻辑运算符

and:多个条件必选都满足

or:多个条件仅满足一个即可

not:取反---不等于

#编写SQL语句思路

  1. 分析使用查询条件
  2. 选择使用的逻辑运算符

5.条件查询-模糊查询

1.关键字: like

2.% :匹配任意多个字符

3 _ :匹配一个任意字符

#语法格式:where 字段 like 匹配条件

编写SQL语句思路

1.分析模糊匹配符放置位置(前面,后面,前面+后面)

放置--前面:以XXX结尾(查询手机号,以1009结尾)

前置--后面:以XXX开头(查询手机号,以138开头)

前面+后面:匹配包含(查询手机号,包含123)

2.分析使用哪一个符号

6.条件查询-范围查询

1.in表示在一个非连续的范围内

2.between ... and ...表示在一个连续的范围内

编写SQL语句思路

1.分析需要进行范围查询的字段

2.分析查询的范围是否连续

3.根据是否连续,确认使用in 还是between...and...

7.条件查询-空判断

注意:Mysql中空表示null,与 ‘’ (空)是不一样的

判断为空: is null

判断非空: is not null

8.条件查询-排序

语法格式:

select * from 表名 order by 字段名1 asc|desc, 字段名2 asc|desc,...

编写SQL语句思路

1.分析需要排序的字段

  1. 确认每一个排序字段的方式以及使用关键字

    1. 从小到大---使用asc
    2. 从大到小---使用desc
    3. 如果多个字段要排序,使用,进行分隔

9.条件查询-聚合函数

1.使用聚合函数方便进行数据统计

2.聚合函数不能作为 where 条件

关键字

1.count():查询总记录数

2.max(字段名):查询最大值

3.min(字段名):查询最小值

4.sum(字段名):求和

5.avg(字段名):求平均数

编写SQL语句思路

1.分析需要被聚合函数处理的字段

注意:如果没有指明处理哪一个字段,那就是全部,使用*

2.分析使用的聚合函数

特别说明:一个SQL语句,可以使用多个聚合函数,使用,分隔即可

10.条件查询-分组查询

#按照字段分组,此字段相同的数据会被放到一个组中

#分组的目的是对每一组的数据进行统计(使用聚合函数)

语法格式:

select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...

分组后的筛选

语法格式:

select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件

说明: 关键字having后面的条件运算符与where的相同

having与where对比

1.where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。

2.having 是对 group by 的结果进行筛选。

3.having 后面的条件中可以用聚合函数,where后面不可以。

11.条件查询-分页-获取部分数据

#使用场景: 用来获取一部分的数据或者用来分页

#语法格式:

select * from 表名 limit start,count

说明:

1.从start开始,获取count条数据

2.start索引从0开始

:查询前3行学生信息

select * from students limit 0,3;

select * from students limit 3;

五.数据查询操作--连表查询

1.连接查询-常用方式

1.内连接:结果为两个表匹配到的数据

2.左连接:结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null 填充

3.右连接:结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null 填充

连接查询-内连接

语法格式:

连接查询-内连接

select * from 表1

inner join 表2 on 表1.列=表2.列

#另一种写法:

select * from 表1,表2 where 表1.列=表2.列

连接查询-左连接

语法格式:

select * from 表1

left join 表2 on 表1.列=表2.列

连接查询-右连接

语法格式:

select * from 表1

right join 表2 on 表1.列=表2.列

2.连接查询-自关联

1.自关联:inner join 关联同一个表,不同的字段。

2.自关联要用别名

使用场景:当表存在等级关系时,查询其中数据需要使用自关联

比如:省,市,县

比如:总经理,部门主管,组长,组员

#自关联思路:

把一张表当成多张表来使用

说明:将表定义为不同的别名

A表的字段与B表的字段进行关联

强调:一定是表中不同的字段

3.连接查询-子查询

  • 前置介绍:涉及到了表之间的关联,可以使用表连接,也可以使用子查询

1.嵌入在其他查询语句中的select语句称为子查询其他的查询语句称之为主查询。

2.子查询辅助主查询,要么充当条件,要么充当数据源。

3.子查询是一条完整的、可单独执行的select查询语句

强调:如果能用表连接,绝对不用子查询。因为子查询SQL语句执行效率很低

  • 子查询,充当条件分类

标量子查询:一行一列

  • 最简单的子查询

列子查询:一列多行

行子查询:一行,多列

1.子查询-充当条件

1.标量子查询

例: 查询王昭君的成绩,要求显示成绩

sql
复制代码
select * from scores where studentno = (select studentNo from students where name = '王昭君');

2.列子查询

例: 查询18岁的学生的成绩,要求显示成绩

sql
复制代码
select * from scores where studentno in (select studentNo from students where age = 18);

3.行子查询

例: 查询和王昭君同班且同龄的学生信息

sql
复制代码
select * from students where (age,class) = (select age,class from students where name = '王昭君');

2.子查询-充当数据源

例: 查询数据库和系统测试的课程成绩

sql
复制代码
Select * from scores s inner join (select * from courses where name in ('数据库','系统测试')) c on s.courseNo = c.courseNo

**# **