Mysql简单的学习记录(上)

发布时间 2023-09-22 22:24:16作者: BuerH

MySql

一、DDL(操作数据库、数据表)
  1. 创建数据库
    • create database 数据库名称
      
  2. 查询数据库
    • show databases
      create database if not exists 数据库名称
      
  3. 删除数据库
    • drop database 数据库名称
      drop database if exists 数据库名称
      
  4. 使用数据库
    • select database() --查看当前使用的数据库
      use 数据库名称 --使用数据库
      
  5. 创建表
    • create table 表名(
      	字段名1 数据类型1,
      	字段名2 数据类型2,
      	……
      	字段名n 数据类型n
      );
      
    • 数据类型

      • 用法以及类型百度

      • 例子
        create table student(
        	id int,
        	name varchar(10),
        	gender char(1),
        	birthday date,
        	score double(5,2),
        	email varchar(64),
        	tel varchar(15),
        	status tinyint
        );
        
  6. 查询表
    • show tables
      desc 表名 --查询表结构
      
  7. 删除表
    • drop table 表名
      drop table if exists 表名
      
  8. 修改表
    • ①修改表名
      alter table 表名 rename to 新表名
      ②添加一列
      alter table 表名 add 列名 数据类型
      ③修改数据类型
      alter table 表名 modify 列名 新数据类型
      ④修改列名和数据类型
      alter table 表名 change 列名 新列名 新数据类型
      ⑤删除列
      alter table 表名 drop 列名
      
二、DML(数据库管理语言)
  1. 添加数据
    • --指定列添加
      insert into 表名(列名,……) values(值,……)
      --给所有列添加数据
      insert into 表名(列名,……包括所有列名) values(值,……所有值)
      
      
      • 批量添加数据:使用逗号
  2. 修改数据
    • update 表名 set 列名1=值1,列名2=值2,……[where 条件]
      
  3. 删除数据
    • delete from 表名 [where 条件]
      
  4. 注意点
    • 不加where会删除所有数据
三、DQL(查询数据)
  1. 基础语法
    • select
      	字段列表
      from
      	表名列表
      where
      	条件列表
      group by
      	分组字段
      having
      	分组后列表
      order by
      	排序字段
      limit
      	分页限定
      	
      	distinct #去除关键字
      	as #在列名处起别名
      
  2. 条件查询
    • select 字段列表 from 表名 where 条件列表
      
      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 && age <=30
      	select * from stu where age >= 20 and age <=30
      	select * from stu where age between 20 and 30
      4 查询入学日期在 1998-01-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 查询年龄不等于28岁的学员的信息
      	 select* from stu where age != 18
      	 select* from stu where age <> 18
      7 查询年龄等于18岁 或者年龄等于20岁 或者年龄等于22岁的学员信息
      	select * from stu where age = 18 or age = 20 or age = 22
      	select * from stu where age in (18,20,22)
      8 查询英语成绩为 null 的学员信息 #不能用==,判断null只能用is null 或者 is not null
      	select* from stu where english is null
      	
      前面的所有查询都是精准的查询	还有一个 Like 模糊查询
       LIke _单个字符 %代表任意字符个数
       
      1 查询姓'马'的学员信息
      	select * from stu where name like '马%'
      2 查询第二个字是'花'的学员信息
      	select * from stu where name like '_花%'
      3 查询名字中包含'德'的学员信息
      	select * from stu where name like '%德%'
      
      
  3. 排序查询
    • select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段名2[排序方式2],……
      
      1 查询学生信息,按照年龄升序排列
      	select * from stu order by age asc #按照年龄升序排列,默认asc
      	
      2 查询学生信息,按照数学成绩降序排列
      	select * from stu order by math desc #降序
      	
      3 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
      	select * from stu order by math desc, english asc
      
  4. 分组查询
    • 聚合函数

      • 概念:将一列作为一个整体,进行纵向计算
      • 聚合函数分类
        • count:统计数量
        • max:最大值
        • min:最小值
        • sum:求和
        • avg:平均值
    • select 聚合函数名(列名) from 表名
      null 不参加聚合函数运算
      
      1 统计一个班有多少学生
      	select count(id) from stu #count统计的列名不能为空
      		取值:主键 或者 *
      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 #null不参加运算
      
    • 分组查询

      • 1 查询男同学和女同学各自的平均分
        	select sex, avg(math) from stu group by sex
        2 查询男同学和女同学各自的数学平均分,以及各自人数
        	select sex ,count(*),avg(math) from stu group by sex
        3 查询男同学和女同学各自的数学平均分,以及各自人数,低于70分的不参与运算
        	select sex ,count(*),avg(math) from stu where math > 70 group by sex
        3 查询男同学和女同学各自的数学平均分,以及各自人数,低于70分的不参与运算,分组后人数大于2
        	select sex ,count(*),avg(math) from stu where math > 70 group by sex having count(*) > 2
        
        • where 和 having 的区别
          • 执行时机:where 是分组前进行判定,不满足where条件不参与分组,having是分组之后的结果进行过滤
          • 可判断条件:where不能对聚合函数进行判断,having可以
          • 执行顺序: where > 聚合函数 > having
  5. 分页查询
    • select 字段列表 from 表名 limit 起始索引,查询条目数
      1 从0开始查询,查询三条数据
      	select * from stu limit 0,3
      2 每页显示3条数据,查询第一页数据
      	select * from stu limit 0,3
      3 每页显示3条数据,查询第二页数据
      	select * from stu limit 3,3
      4 每页显示3条数据,查询第三页数据
      	select * from stu limit 6,3
      	
      #起始索引 = (当前页码-1) * 每页显示条数 
      
      # 分页查寻 limit 是 MYSQL 专用
      # Oracle 分页查询使用 rownumber
      # SQL server使用的是 top