三天入门数据库-MYSQL

228 阅读9分钟

一.数据的介绍

1.什么是数据库

数据存储的仓库

2.特点

1.长期存储数据

2.对于数据进行有组织的管理

体现:通过操作指定的语言完成数据的增、删、改、查

3.数据库的分类

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

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

常见关系型数据库:Oracle,MySql,Sql Server,SQLite

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

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

4.非关系型数据库

redis:键值对

MangoDB:文档

Hbase:(大数据存储)一个结构化数据的分布式存储系统

5.关系型的数据库核心要素

image.png 1.新建一个数据库

2.库中新建数据表

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

4.写入(插入)一行一行的数据

二.MYSQL介绍

MySQL:关系型数据库。分为社区版和商业版,社区版免费

特点:支持多系统、开源、免费

image.png

1.SQL介绍

  • SQL语句:(结构化查询语言)使用SQL语句对数据库进行操作

  • 对于数据库的操作(主要):

    • 数据查询:查询语句
    • 数据更改:新增、修改、删除语句
  • 关键字

    • 查询语句--select;新增语句--insert;修改语句--update;删除语句--delete

2.工具连接

使用工具:DBeaver

原因:开源免费

作用:拥有可视化界面,让我们操作数据库以及结果的展示更加的直观

必填内容:服务器ip地址,MySQL的端口号,MySQL的用户名和密码

3.数据的约束

*默认值:当不填写此值时会使用默认值,如果填写时以填写为准

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

说明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.标量子查询

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

select * from scores where studentno = (select studentNo from students where name = '王昭君');

2.列子查询

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

select * from scores where studentno in (select studentNo from students where age = 18);

3.行子查询

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

select * from students where (age,class) = (select age,class from students where name = '王昭君');

2.子查询-充当数据源

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

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