MySQL基础

1、数据库相关概念

  1.1 数据库

  1.2 数据库管理系统

  1.3 SQL 

  1.4 常见的关系型数据库管理系统

2、MySQL数据库

  2.1 MySQL安装

  2.2 MySQL数据模型

    关系型数据库

    数据模型

    数据类型

3、SQL

  3.1 SQL简介

  3.2 SQL通用语法

  3.3 SQL分类

  3.4 DDL

    查询表

    创建表

    删除表

    创建表

    图形化客户端工具

  3.5 DML

    添加数据

    修改数据

    删除数据

  3.6 DQL

    查询语法

    修改数据

    条件查询

    排序查询

    聚合函数

    分组查询

    分页查询

1、数据库相关概念

1.1 数据库

  • 存储数据的仓库,数据是有组织的进行存储
  • 英文:DataBase,简称DB

1.2 数据库管理系统

  • 数据库的大型管理软件
  • 英文:DataBase Management System,简称DBMS

1.3 SQL

  • 英文:Structured Query Language,简称SQL,结构化查询语言
  • 操作关系型数据库的编程语言
  • 定义操作所有关系型数据库的统一标准

1.4 常见的关系型数据库管理系统

  • Oracle:收费的大型数据,Oracle公司的产品
  • MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Sun公司又被Oracle收购
  • SQL Server:MicroSoft公司收费的中型的数据库。C#、.net等语言常用
  • PostgreSQL:开源免费中小型数据库
  • DB2:IBM公司的大型收费数据库产品
  • SQLite:嵌入式数据库,如:作为Android内置数据库
  • MariaDB:开源免费中小型的数据库

2、MySQL数据库

2.1 MySQL安装

  参考MySQL安装文档(解压)

2.2 MySQL数据模型

关系型数据库

  关系型数据库是由多张能相互连接的二维表组成的数据库。

  • 优点:
    1. 都是使用表结构,格式一致,易于维护
    2. 使用通用的SQL语言操作,使用方便,可用于复杂查询
    3. 数据存储在磁盘中,安全。

数据模型

3、SQL

3.1 SQL简介

  • 英文:Structured Query Language,结构化查询语言,简称SQL

3.2 SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾。
  2. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  3. 注释
    • 单行注释:-- 注释内容 或 #注释内容(mysql特有)
    • 多行注释:/*注释*/

3.3 SQL分类

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:数据库、表、列等
  • DML(Data Manipulation Language):数据操作语言,对表中的数据进行增删改查
  • DQL(Data Query Language):数据查询语言,对表中的数据进行查询
  • DCL(Data Control Language):数据控制语言,对数据库进行权限控制

3.4 DDL

  • 操作数据库
    1. 查询:show databases;
    2. 创建:
      • 创建数据库:create database 数据库名称;
      • 创建数据库(判断,如果不存在则创建):create database if not exists 数据库名称;
    3. 删除:
      • 删除数据库:drop database 数据库名称;
      • 删除数据库(判断,如果数据库存在):drop database if exists 数据库名称;
    4. 使用数据库
      • 查看当前使用的数据库:select database();
      • 使用数据库:use 数据库名;
  •  操作表
    1. 创建(Create)
    2. 查询(Select)
    3. 修改(Update)
    4. 删除(Delete)

查询表

  • 查询当前数据库下所有表名称

    show tables;

  • 查询表结构

    desc 表名称;

创建表

create table 表名(
    字段名1 数据类型1,
    字段名2 数据类型2,
    ...
    字段名n 数据类型n
);

 注意:最后一行末尾,不能加逗号。

数据类型

  • MySQL支持多种类型,可以分为三类:
    • 数值
    • 日期
    • 字符串

案例

  需求:设计一张表学生表,请注重数据类型、长度的合理性

    1. 编号
    2. 姓名,姓名最长不超过10个汉字
    3. 性别,因为取值只有两种可能,因此最多一个汉字
    4. 生日,取值为年月日
    5. 入学成绩,小数点后保留两位
    6. 邮件地址,最大长度不超过 64
    7.
家庭联系电话,不一定是手机号码,可能会出现 - 等字符
    8. 学生状态(用数字表示,正常、休学、毕业...

 

create table student(
    id int,
    name varchar(10),
    gender char(1),
    birthday date,
    score double(5,2),
    email varchar(64),
    address varchar(15),
    status tinyint
);

删除表

  1. 删除表:drop table 表名;
  2. 删除表是否存在:drop table if exists 表名;

修改表

  1. 修改表名:alter table 表名 rename to 新的表名;
  2. 添加一列:alter table 表名 add 列名 数据类型;
  3. 修改数据类型:alter table 表名 modify 列名 新的数据类型;
  4. 修改列名和数据类型:alter table 表名 change 列名 新列名 新的数据类型;
  5. 删除列名:alter table 表名 drop 列名;

图形化客户端工具

 

3.5 DML

添加数据

  1. 给指定列添加数据

    insert into 表名(列名1,列名2,...) values(值1,值2,...);

  2. 给全部列添加数据

    insert into 表名 values(值1,值2,...);

  3. 批量添加数据

    insert into 表名(列名1,列名2,...) values(值1,值2,...),(值1,值2,...),...;

    insert into 表名 values(值1,值2,...),(值1,值2,...),...;

修改数据

  1. 修改表数据

    update 表名 set 列名1=值1,列名2=值2,... [where 条件];

    注意:修改语句中如果不加条件,则所有数据都要修改!

删除数据

  1. 删除数据

    delete from stu where 条件;

    注意:删除语句中如果不加条件,则将所有数据都删除。

3.6 DQL

查询语法

  • 基础查询
  • 条件查询(where)
  • 分组查询(Group by)
  • 排序查询(order by)
  • 分页查询(limit)
select 
    字段列表
from 
    表名列表
where 
    条件列表
group by
    分组查询
having
    分组后条件
order by
    排序字段
limit
    分页限定

基础查询

  1. 查询多个字段

    select 字段列表 from 表名;

    select * from 表名; -- 查询所有数据

  2. 去除重复记录

    selct distinct 字段列表 from 表名;

  3. 取别名

    as:as 也可以省略

条件查询

  1. 条件查询语法

    select 字段列表 from 表名 where 条件列表;

  2. 条件  

  3.  条件查询练习

-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
-- 3.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 and age <= 30;
select * from stu where age between 20 and 30;
-- 4.查询入学日期在'1998-09-01' 到 '1999-09-01' 之间的学员信息
select * from stu where hire_date between '1998-09-01' and '1999-09-01';
-- 5.查询年龄等于18岁的学员信息
select * from stu where age = 18;
-- 6.查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age <> 18;
-- 7.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age in(18,20,22);
select * from stu where age = 18 or age = 20 or age = 22;
-- 8.查询英语成绩为 null的学员信息
select * from stu where english is null;

  4.  模糊查询练习
    模糊查询使用like关键字,可以使用通配符进行占位:
      (1)_ : 代表单个任意字符
      (2)% : 代表任意个数字符

-- 1.查询姓'马'的学员信息
select * from stu where name like '马%';
-- 2.查询第二个字是'花'的学员信息
select * from stu where name like '_花%';
-- 3.查询名字中包含 '德' 的学员信息
select * from stu where name like '%德%';

排序查询

  1. 排序查询语法

    select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段2 [排序方式2] ...;

  2. 排序方式

    • ASC:升序排列(默认值)
    • DESC:降序排列

  注意:如果有多个排序条件,当前边的条件之一样时,才会根据第二个条件进行排序。

-- 1.查询学生信息,按照年龄升序排列
select * from stu order by age asc;
-- 2.查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;

聚合函数

  1. 概念:

    将一列数据作为一个整体,进行纵向计算。

  2. 聚合函数分类

  3. 聚合函数语法:

    select 聚合函数名(列名) from 表;

    注意:null值不参与所有聚合函数运算。

-- 1.统计班级一共有多少个学生
select count(id) from stu;

-- 2.查询数学成绩的最高分
select max(math) from stu;

-- 3.查询数学成绩的最低分
select min(math) from stu;

-- 4.查询数学成绩的总分
select sum(math) from stu;

-- 5.查询数学成绩的平均分
select avg(math) from stu;

-- 6.查询英语成绩的最低分
select min(english) from stu;

分组查询

  1. 语法

    select 字段列表 from 表名 where 分组前条件限定 group by 分组字段名 [having 分组后条件过滤];

    注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。

  2. where 和having区别

    • 执行时机不一样,where是分组之前进行限定,不满足where条件,则不参与分组,二having是分组之后对结果进行过滤。
    • 可判断的条件不一样:where不能对聚合函数进行判断,having可以。

  3. 执行顺序

    where > 聚合函数 > having

select * from stu;
-- 1.查询男同学和女同学各自的数学平均分
select sex,AVG(math) from stu group by sex;
-- 2.查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),COUNT(id) from stu group by sex;
-- 3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),COUNT(id) from stu where math > 70 group by sex;
-- 4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
select sex,avg(math),COUNT(id) from stu where math > 70 group by sex having count(id) > 2;

分页查询

  1. 分页查询语法

    select 字段列表 from 表名 limit 起始索引,查询条目数;

  2. tips

    • 分页查询limit是MySQL数据库的方言
    • Oracle分页查询使用rownumber
    • SQL Server分页查询使用top
-- 1.从0开始查询,查询3条数据
select * from stu limit 0,3;
-- 2.每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
-- 3.每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
-- 4.每页显示3条数据,查询第3页数据
select * from stu limit 6,3;

 

posted @ 2023-08-23 09:43  mqBolg  阅读(20)  评论(0)    收藏  举报