MySQL基础
关系型数据库
数据模型
数据类型
查询表
创建表
删除表
创建表
图形化客户端工具
添加数据
修改数据
删除数据
查询语法
修改数据
条件查询
排序查询
聚合函数
分组查询
分页查询
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安装
2.2 MySQL数据模型
关系型数据库
关系型数据库是由多张能相互连接的二维表组成的数据库。
- 优点:
- 
- 都是使用表结构,格式一致,易于维护
- 使用通用的SQL语言操作,使用方便,可用于复杂查询
- 数据存储在磁盘中,安全。
 
数据模型

3、SQL
3.1 SQL简介
- 英文:Structured Query Language,结构化查询语言,简称SQL
3.2 SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释
- 
- 单行注释:-- 注释内容 或 #注释内容(mysql特有)
- 多行注释:/*注释*/
 
3.3 SQL分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:数据库、表、列等
- DML(Data Manipulation Language):数据操作语言,对表中的数据进行增删改查
- DQL(Data Query Language):数据查询语言,对表中的数据进行查询
- DCL(Data Control Language):数据控制语言,对数据库进行权限控制
3.4 DDL
- 操作数据库
- 
- 查询:show databases;
- 创建:
 - 创建数据库:create database 数据库名称;
- 创建数据库(判断,如果不存在则创建):create database if not exists 数据库名称;
 
- 创建数据库:
- 删除:
- 删除数据库:drop database 数据库名称;
- 删除数据库(判断,如果数据库存在):drop database if exists 数据库名称;
 
- 删除数据库:
- 使用数据库
- 查看当前使用的数据库:select database();
- 使用数据库:use 数据库名;
 
- 查看当前使用的数据库:
 
- 查询:
-  操作表
- 创建(Create)
- 查询(Select)
- 修改(Update)
- 删除(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
);删除表
- 删除表:drop table 表名;
- 删除表是否存在:drop table if exists 表名;
修改表
- 修改表名:alter table 表名 rename to 新的表名;
- 添加一列:alter table 表名 add 列名 数据类型;
- 修改数据类型:alter table 表名 modify 列名 新的数据类型;
- 修改列名和数据类型:alter table 表名 change 列名 新列名 新的数据类型;
- 删除列名: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;
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号