• 数据库笔记基础篇


    增删改查

    DML主要是对数据进行增(insert)删(delete)改(update)操作。

    like模糊查询

    添加

    1.给指定列添加数据

    NSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
    
    • 1

    2.给全部列添加数据

    INSERT INTO 表名 VALUES(值1,值2,…);
    
    • 1

    3.批量添加数据

    INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
    INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
    
    • 1
    • 2

    修改数据

    UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件];
    
    • 1

    注意:

    1. 修改语句中如果不加条件,则所有记录都将被修改!
    2. 像上面的语句中的中括号,表示在写sql语句中可以省略这部分

    1.将张三的性别改为女

    update stu set sex = '女' where name = '张三';
    
    • 1

    2.将张三的生日改为 1999-12-12 分数改为99.99

    update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';
    
    • 1

    3.注意:如果update语句没有加where条件,则会将表中所有数据全部修改

    update stu set sex = '女'; -- 表中的所有人的性别都将被修改为女
    
    • 1

    删除数据

    DELETE FROM 表名 [WHERE 条件];
    
    • 1

    1.删除张三记录

    delete from stu where name = '张三';
    
    • 1

    2.删除stu表中所有的数据

    delete from stu;
    
    • 1

    查询数据

    查询的完整语法

    SELECT
    	字段列表
    FROM
    	表名列表
    WHERE
    	条件列表
    GROUP BY
    	分组字段
    HAVING
    	分组后条件
    ORDER BY
    	排序字段
    LIMIT
    	分页限定
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.查询多个字段

    SELECT 字段1,字段2,字段3 FROM 表名;
    SELECT * FROM 表名; -- 查询所有数据
    
    • 1
    • 2

    2.去除重复记录

    SELECT DISTINCT 字段列表 FROM 表名;
    
    • 1

    3.起别名

    AS: AS 也可以省略
    select name,math as 数学成绩,english as 英文成绩 from stu;
    
    • 1
    • 2

    条件查询

    SELECT 字段列表 FROM 表名 WHERE 条件列表;
    
    • 1

    image-20220703213534686

    1.查询年龄大于等于20岁的学员信息

    select * from stu where age >= 20;
    
    • 1

    2.查询年龄大于等于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;
    
    • 1
    • 2
    • 3

    3.查询入学日期在’1998-09-01’ 到 ‘1999-09-01’ 之间的学员信息

    select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
    
    • 1

    4.查询年龄等于18岁的学员信息

    select * from stu where age = 18;
    
    • 1

    5.查询年龄不等于18岁的学员信息

    select * from stu where age != 18;
    select * from stu where age <> 18;
    
    • 1
    • 2

    6.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息

    select * from stu where age = 18 or age = 20 or age = 22;
    select * from stu where age in (18,20 ,22);
    
    • 1
    • 2

    7.查询英语成绩为 null的学员信息

    null值的比较不能使用 = 或者 != 。需要使用 is 或者 is not

    select * from stu where english = null; -- 这个语句是不行的
    select * from stu where english is null;
    select * from stu where english is not null;
    
    • 1
    • 2
    • 3

    模糊查询

    模糊查询使用like关键字,可以使用通配符进行占位:

    (1)_ : 代表单个任意字符

    (2)% : 代表任意多个字符

    1.查询姓’马’的学员信息

    select * from stu where name like '马%';
    
    • 1

    2.查询第二个字是’花’的学员信息

    select * from stu where name like '_花%';
    
    • 1

    3.查询名字中包含 ‘德’ 的学员信息

    select * from stu where name like '%德%';
    
    • 1

    排序查询

    SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
    
    • 1

    上述语句中的排序方式有两种,分别是:

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

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

    1.查询学生信息,按照年龄升序排列

    select * from stu order by age;
    
    • 1

    2.查询学生信息,按照数学成绩降序排列

    select * from stu order by math desc;
    
    • 1

    3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列

    select * from stu order by math desc , english asc;
    
    • 1

    聚合函数

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

    如何理解呢?假设有如下表,需求让我们求表中所有数据的数学成绩的总和。这就是对math字段进行纵向求和。

    image-20220703215420443

    聚合函数用法

    函数名功能
    count(列名)统计数量(一般选用不为null的列)
    max(列名)最大值
    min(列名)最小值
    sum(列名)求和
    avg(列名)平均值
    SELECT 聚合函数名(列名) FROM 表;
    
    • 1

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

    1.统计班级一共有多少个学生

    select count(id) from stu;
    select count(english) from stu;
    
    • 1
    • 2

    上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。所以可以在count() 来实现。 表 示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(*)

    select count(*) from stu;
    
    • 1

    2.查询数学成绩的最高分

    select max(math) from stu;
    
    • 1

    3.查询数学成绩的最低分

    select min(math) from stu;
    
    • 1

    4.查询数学成绩的总分

    select sum(math) from stu;
    
    • 1

    5.查询数学成绩的平均分

    select avg(math) from stu;
    
    • 1

    分组查询

    SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
    
    • 1

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

    1.查询男同学和女同学各自的数学平均分

    select sex, avg(math) from stu group by sex;
    
    • 1

    2.查询男同学和女同学各自的数学平均分,以及各自人数

    select sex, avg(math),count(*) from stu group by sex;
    
    • 1

    3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组

    select sex, avg(math),count(*) from stu where math > 70 group by sex;
    
    • 1

    4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的

    select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
    
    • 1

    where 和 having 区别:

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

    分页查询

    分页查询是将数据一页一页的展示给用户看。

    SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
    
    • 1

    注意: 上述语句中的起始索引是从0开始

    1.从0开始查询,查询3条数据

    select * from stu limit 0 , 3;
    
    • 1

    2.每页显示3条数据,查询第2页数据

    select * from stu limit 3 , 3;
    
    • 1

    3.每页显示3条数据,查询第3页数据

    select * from stu limit 6 , 3;
    
    • 1

    从上面的练习推导出起始索引计算公式:

    起始索引 = (要查询的页码 - 1) * 每页显示的条数
    
    • 1

    库操作

    1.数据库、数据表创建时先确定是否存在,再创建。

    CREATE DATABASE IF NOT EXISTS 数据库名称;

    2.删除数据库先判断再删除

    DROP DATABASE IF EXISTS 数据库名称;

    3.使用指定数据库

    USE 数据库名称;

    4.查看当前所在数据库

    SELECT DATABASE();

    表操作

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

    SHOW TABLES;

    2.查询表结构

    DESC 表名称;

    3.创建表

    CREATE TABLE 表名 (
    字段名1 数据类型1,
    字段名2 数据类型2,
    …
    字段名n 数据类型n
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    4.删除表

    DROP TABLE IF EXISTS 表名;

    5.修改表名

    ALTER TABLE 表名 RENAME TO 新的表名;
    
    -- 将表名student修改为stu
    alter table student rename to stu;
    
    • 1
    • 2
    • 3
    • 4

    6.添加一列

    ALTER TABLE 表名 ADD 列名 数据类型;
    
    -- 给stu表添加一列address,该字段类型是varchar(50)
    alter table stu add address varchar(50);
    
    • 1
    • 2
    • 3
    • 4

    7.修改数据类型

    ALTER TABLE 表名 MODIFY 列名 新数据类型;
    
    -- 将stu表中的address字段的类型改为 char(50)
    alter table stu modify address char(50);
    
    • 1
    • 2
    • 3
    • 4

    8.修改列名和数据类型

    ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
    
    -- 将stu表中的address字段名改为 addr,类型改为varchar(50)
    alter table stu change address addr varchar(50);
    
    • 1
    • 2
    • 3
    • 4

    9.删除列

    ALTER TABLE 表名 DROP 列名;
    -- 将stu表中的addr字段 删除
    alter table stu drop addr;
    
    • 1
    • 2
    • 3

    数据类型

    数值、时间与日期、字符串

    alter table stu add address varchar(50);

    
    7.修改数据类型
    
    ```mysql
    ALTER TABLE 表名 MODIFY 列名 新数据类型;
    
    -- 将stu表中的address字段的类型改为 char(50)
    alter table stu modify address char(50);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    8.修改列名和数据类型

    ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
    
    -- 将stu表中的address字段名改为 addr,类型改为varchar(50)
    alter table stu change address addr varchar(50);
    
    • 1
    • 2
    • 3
    • 4

    9.删除列

    ALTER TABLE 表名 DROP 列名;
    -- 将stu表中的addr字段 删除
    alter table stu drop addr;
    
    • 1
    • 2
    • 3

    数据类型

    数值、时间与日期、字符串

  • 相关阅读:
    YOLO物体检测-系列教程2:YOLOV2整体解读
    XTU-OJ 1187-Candy
    AI来实现代码转换!Python转Java,Java转Go不在话下?
    NewStarCTF2023 Reverse方向Week3 ez_chal WP
    module ‘numpy‘ has no attribute ‘object‘
    python自学入门(打卡十二)2022-12-04
    Centos8安装docker并配置Kali Linux图形化界面
    Linux开发——Linux 文件系统简介(四)
    前端node.js入门
    西安有哪些比较好的设计院?西安名企设计院介绍!
  • 原文地址:https://blog.csdn.net/weixin_52341477/article/details/126923509