• 重学数据库基础


    幸福找到我,幸福说:“瞧这个诗人,他比我本人还要幸福”

    在这里插入图片描述


    一、数据库相关概念

    在这里插入图片描述

    • 数据库
      • 存储数据的仓库,数据是有组织的进行存储
      • 英文:DataBase,简称 DB
    • 数据库管理系统
      • 管理数据库的大型软件
      • 英文:DataBase Management System,简称 DBMS
    • SQL
      • 英文:Structured Query Language,简称 SQL,结构化查询语言
      • 操作关系型数据库的编程语言
      • 定义操作所有关系型数据库的统一标准

    常见的关系型数据库管理系统
    在这里插入图片描述

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


    二、MySQL 数据库

    1. MySQL 安装

    MySQL官网: https://downloads.mysql.com/archives/community/
    在这里插入图片描述
    下载完成后得到的是一个压缩包,将其解压,就可以得到MySQL 5.7.24的软件本体了(就是一个文件夹),可以把它放在你想安装的位置。

    # 目录结构
    bin  # 存放一些可执行文件
    data  # 存放一些日志文件以及数据库
    docs  # 存放一些文档
    include  # 存放一些c语言头文件
    lib  # 存放一系列库文件
    share  # 存放字符集、语言等信息
    COPYING
    mysql.ini  # 默认配置文件
    README
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2. MySQL 配置

    ⑴. 添加环境变量

    为什么在初始化的开始要添加环境变量呢?
    在终端(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的Path所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。
    添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。

    右键此电脑属性,点击高级系统设置,点击环境变量(这里的文件路径需要自定义)
    变量值指的是文件路径

    系统变量中新建MYSQL_HOME
    在这里插入图片描述

    系统变量中找到并双击Path,点击新建
    在这里插入图片描述
    验证是否安装成功 mysql -V
    在这里插入图片描述


    ⑵. 新建配置文件

    新建一个文本文件,存放的路径为MySQL的根目录,文件名叫my.ini

    [mysql]
    # 默认编码集为utf-8
    default-character-set=utf8
    
    [mysqld]
    # 默认编码集为utf-8
    character-set-server=utf8
    # 默认存储引擎为INNODB
    character-set-server=utf8
    default-storage-engine=INNODB
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ⑶. 初始化MySQL

    管理员方式运行终端,输入mysqld --initialize-insecure,回车,此时再查看MySQL目录下已经有data目录生成。

    # data目录初始化
    mysqld --initialize-insecure
    
    • 1
    • 2

    ⑷. 注册MySQL服务

    在终端里敲入mysqld -install,回车。

    mysqld -install
    
    • 1

    ⑸. 启动MySQL服务

    在终端里敲入net start mysql,回车

    # 启动mysql服务
    net start mysql  
    # 停止mysql服务
    net stop mysql  
    
    • 1
    • 2
    • 3
    • 4

    ⑹. 修改默认账户密码

    在终端里敲入mysqladmin -u root password 1234,这里的1234就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的

    mysqladmin -u root password 1234
    
    • 1

    至此,MySQL 5.7 解压版安装完毕!

    3. MySQL 登陆、退出

    在终端中输入,mysql -uroot -p1234,回车,出现下图且左下角为mysql>,则登录成功

    mysql -uroot -p1234
    
    • 1

    退出mysql:

    exit
    quit
    
    • 1
    • 2

    登陆参数:

    mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
    
    • 1

    4. MySQL 卸载

    打开终端,输入net stop mysql,回车

    # 停止服务
    net stop mysql
    # 移除mysql
    mysqld -remove mysql
    # 最后删除MySQL目录及相关的环境变量
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. MySQL 数据模型

    在这里插入图片描述

    关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库

    • 都是使用表结构,格式一致,易于维护
    • 使用通用的 SQL 语言操作,使用方便,可用于复杂查询
    • 数据存储在磁盘中,安全
      在这里插入图片描述


    三、SQL

    1. SQL 简介

    • 英文:Structured Query Language,简称 SQL
    • 结构化查询语言,一门操作关系型数据库的编程语言
    • 定义操作所有关系型数据库的统一标准
    • 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”

    2. SQL 通用语法

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

    3. SQL 分类

    在这里插入图片描述

    • DDL(Data Definition Language) 数据定义语言,用来定义数据库对象:数据库,表,列等
    • DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
    • DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
    • DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户

    4. SQL 数据类型

    分类数据类型数据类型数据类型
    数值类型TINYINT1 byte小整数值
    数值类型SMALLINT2 bytes大整数值
    数值类型MEDIUMINT3 bytes大整数值
    数值类型INT/INTEGER4 bytes大整数值
    数值类型BIGINT8 bytes极大整数值
    数值类型FLOAT4 bytes单精度浮点数值
    数值类型DOUBLE8 bytes双精度浮点数值
    数值类型DECIMAL小数值日期和时间类型
    日期和时间类型DATE3日期值
    日期和时间类型TIME3时间值或持续时间
    日期和时间类型YEAR1年份值
    日期和时间类型DATETIME8混合日期和时间值
    日期和时间类型TIMESTAMP4混合日期和时间值,时间戳
    字符串类型CHAR0-255 bytes定长字符串
    字符串类型VARCHAR0-65535 bytes变长字符串
    字符串类型TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
    字符串类型TINYTEXT0-255 bytes短文本字符串
    字符串类型BLOB0-65 535 bytes二进制形式的长文本数据
    字符串类型TEXT0-65 535 bytes长文本数据
    字符串类型MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
    字符串类型MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
    字符串类型LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
    字符串类型LONGTEXT0-4 294 967 295 bytes极大文本数据

    5. DDL

    ⑴. 操作数据库

    # 查询
    SHOW DATABASES
    
    # 创建数据库
    CREATE DATABASE 数据库名称;
    
    # 创建数据库(判断,如果不存在则创建)
    CREATE DATABASE IF NOT EXISTS 数据库名称;
    
    # 删除数据库
    DROP DATABASE 数据库名称;
    
    # 删除数据库(判断,如果存在则删除)
    DROP DATABASE IF EXISTS 数据库名称;
    
    # 查看当前使用的数据库
    SELECT DATABASE();
    
    # 使用数据库
    USE 数据库名称;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    ⑵. 操作表

    ①. 查询
    # 查询当前数据库下所有表名称
    SHOW TABLES;
    
    # 查询表结构
    DESC 表名称;
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    在这里插入图片描述

    ③. 删除
    # 删除表
    DROP TABLE 表名;
    
    # 删除表(判断表是否存在)
    DROP TABLE IF EXISTS 表名;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ④. 修改
    # 修改表名
    ALTER TABLE 表名 RENAME TO 新的表名;
    
    # 添加一列
    ALTER TABLE 表名 ADD 列名 数据类型;
    
    # 修改数据类型
    ALTER TABLE 表名 MODIFY 列名 新数据类型;
    
    # 修改列名和数据类型
    ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;	
    
    # 删除列
    ALTER TABLE 表名 DROP 列名;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ⑶. 案例

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

    • 编号
    • 姓名,姓名最长不超过10个汉字
    • 性别,因为取值只有两种可能,因此最多一个汉字
    • 生日,取值为年月日
    • 入学成绩,小数点后保留两位
    • 邮件地址,最大长度不超过 64
    • 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
    • 学生状态(用数字表示,正常、休学、毕业…)
    -- 学生表
    
    create table tb_stu(
    	id int ,
    	name varchar(10),
    	gender char(1),
    	birthday date,
    	score double(5,2) ,
    	email varchar(64),
    	tel varchar(20),
    	status tinyint
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6. DML

    ⑴. 操作表

    ①. 添加
    -- 给指定列添加数据
    INSERT INTO 表名(列名1,列名2,) VALUES(1,2,);
    
    # 给全部列添加数据
    INSERT INTO 表名 VALUES(1,2,);
    
    # 批量添加数据
    INSERT INTO 表名(列名1,列名2,) VALUES(1,2,),(1,2,),(1,2,);
    INSERT INTO 表名 VALUES(1,2,),(1,2,),(1,2,);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ②. 修改
    # 修改表数据
    UPDATE 表名 SET 列名1=1,列名2=2,[WHERE 条件] ;
    # !!!注意:修改语句中如果不加条件,则将所有数据都修改!
    
    • 1
    • 2
    • 3

    ③. 删除
    # 删除表数据
    DELETE FROM 表名 [WHERE 条件] ;
    # !!!注意:删除语句中如果不加条件,则将所有数据都删除!
    
    • 1
    • 2
    • 3

    ⑵. 案例

    -- 查询所有数据
    SELECT * FROM stu;
    
    -- 给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
    INSERT INTO stu (id, NAME) VALUES (1, '张三');
    
    -- 给所有列添加数据,列名的列表可以省略的
    INSERT INTO stu (
    	id, -- 编号
    	NAME,-- 姓名
    	sex,
    	birthday,
    	score,
    	email,
    	tel,
    	STATUS
    )
    VALUES
    	(
    		2,
    		'李四',
    		'男',
    		'1999-11-11',
    		88.88,
    		'lisi@itcast.cn',
    		'13888888888',
    		1
    	);
    
    INSERT INTO stu
    VALUES
    	(
    		2,
    		'李四',
    		'男',
    		'1999-11-11',
    		88.88,
    		'lisi@itcast.cn',
    		'13888888888',
    		1
    	);
    
    
    INSERT INTO stu
    VALUES
    	(
    		2,
    		'李四',
    		'男',
    		'1999-11-11',
    		88.88,
    		'lisi@itcast.cn',
    		'13888888888',
    		1
    	),(
    		2,
    		'李四',
    		'男',
    		'1999-11-11',
    		88.88,
    		'lisi@itcast.cn',
    		'13888888888',
    		1
    	),(
    		2,
    		'李四',
    		'男',
    		'1999-11-11',
    		88.88,
    		'lisi@itcast.cn',
    		'13888888888',
    		1
    	);
    
    select * from stu;
    
    
    -- 修改数据 UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
    
    -- 将张三的性别改为女
    update stu set sex = '女' where name = '张三';
    
    -- 将张三的生日改为 1999-12-12 分数改为99.99
    update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';
    
    -- 注意:如果update语句没有加where条件,则会将表中所有数据全部修改!
    update stu set sex = '女';
    
    
    -- 删除  DELETE FROM 表名 [WHERE 条件] ;
    
    -- 删除张三记录
    delete from stu where name = '张三';
    
    delete from stu;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    7. DQL

    ⑴. 插入数据

    -- 删除stu表
    drop table if exists stu;
    
    -- 创建stu表
    CREATE TABLE stu (
     id int, -- 编号
     name varchar(20), -- 姓名
     age int, -- 年龄
     sex varchar(5), -- 性别
     address varchar(100), -- 地址
     math double(5,2), -- 数学成绩
     english double(5,2), -- 英语成绩
     hire_date date -- 入学时间
    );
    
    -- 添加数据
    INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date) 
    VALUES 
    (1,'马运',55,'男','杭州',66,78,'1995-09-01'),
    (2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
    (3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
    (4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
    (5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
    (6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
    (7,'张学右',22,'女','香港',99,99,'1998-09-01'),
    (8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    ⑵. 基础查询

    ①. 基础方法
    -- 查询多个字段
    SELECT 字段列表 FROM 表名;
    
    -- 查询所有数据
    SELECT * FROM 表名; 
    
    -- 去除重复记录
    SELECT DISTINCT 字段列表 FROM 表名;
    
    -- 起别名
    AS: AS 也可以省略
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ②. 案例
    -- 查询name、age两列
    select name,age from stu;
    -- 查询所有列的数据,列名的列表可以使用*替代
    select * from stu;
    
    -- 查询地址信息
    select address from stu;
    -- 查询地址信息(去除重复记录)
    select distinct address from stu;
    
    -- 查询姓名、数学成绩、英语成绩。并通过as给math和english起别名(as关键字可以省略)
    select name,math as 数学成绩,english as 英文成绩 from stu;
    select name,math 数学成绩,english 英文成绩 from stu;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    ⑶. 条件查询

    ①. 基础方法
    SELECT 字段列表 FROM 表名 WHERE 条件列表;
    
    • 1

    ②. 运算符
    符号功能
    >大于
    <小于
    >=大于等于
    <=小于等于
    =等于
    <> 或 !=不等于
    BETWEEN … AND …在某个范围之内(都包含)
    IN(…)多选一
    LIKE 占位符模糊查询 _单个任意字符 %多个任意字符
    IS NULL是NULL
    IS NOT NULL不是NULL
    AND 或 &&并且
    OR 或
    NOT 或 !非、不是

    ③. 案例
    -- 查询年龄大于20岁的学员信息
    select * from stu where age > 20;
    
    -- 查询年龄大于等于20岁的学员信息
    select * from stu where age >= 20;
    
    -- 查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
    select * from stu where age >= 20 &&  age <= 30;
    select * from stu where age >= 20 and  age <= 30;
    -- && 和 and 都表示并且的意思;建议使用 and ,也可以使用 between ... and
    select * from stu where age BETWEEN 20 and 30;
    
    -- 查询入学日期在'1998-09-01' 到 '1999-09-01'  之间的学员信息
    select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
    
    -- 查询年龄等于18岁的学员信息
    select * from stu where age = 18;
    
    -- 查询年龄不等于18岁的学员信息
    select * from stu where age != 18;
    select * from stu where age <> 18;
    
    -- 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
    select * from stu where age = 18 or age = 20 or age = 22;
    select * from stu where age in (18,20 ,22);
    
    -- 查询英语成绩为 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
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    ④. 模糊查询
    -- 模糊查询 like =========
    /*
    	通配符:
    	(1)_ : 代表单个任意字符
    	(2)% : 代表任意个数字符
    */
    
    -- 查询姓'马'的学员信息
    select * from stu where name like '马%';
    
    -- 查询第二个字是'花'的学员信息  
    select * from stu where name like '_花%';
    
    -- 查询名字中包含 '德' 的学员信息
    select * from stu where name like '%德%';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ⑶. 排序查询

    ①. 基础方法
    SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2];
    /*
    	ASC : 升序排列 (默认值)
    	DESC : 降序排列
    	注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    ⑷. 聚合函数

    ①. 概念

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

    函数名功能
    count(列名)统计数量(一般选用不为null的列)
    max(列名)最大值
    min(列名)最小值
    sum(列名)求和
    avg(列名)平均值
    -- 语法
    SELECT 聚合函数名(列名) FROM;
    -- !!!注意:null 值不参与所有聚合函数运算
    
    • 1
    • 2
    • 3

    ②. 案例
    -- 统计班级一共有多少个学生
    select count(id) from stu;
    select count(english) from stu;
    
    -- 如果该字段某一行的值为null的话,将不会被统计。所以可以在count(*) 来实现
    -- \* 表示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(\*)
    select count(*) from stu;
    
    -- 查询数学成绩的最高分
    select max(math) from stu;
    
    -- 查询数学成绩的最低分
    select min(math) from stu;
    
    -- 查询数学成绩的总分
    select sum(math) from stu;
    
    -- 查询数学成绩的平均分
    select avg(math) from stu;
    
    -- 查询英语成绩的最低分
    select min(english) from stu;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    ⑸. 分组查询

    ①. 基础方法
    -- 语法
    SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
    -- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
    
    /*
    where 和 having 区别:
    	执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
    	可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
    
    执行顺序: where > 聚合函数 > having
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ②. 案例
    -- 查询男同学和女同学各自的数学平均分
    select sex, avg(math) from stu group by sex;
    
    -- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
    select name, sex, avg(math) from stu group by sex;  -- 这里查询name字段就没有任何意义
    
    -- 查询男同学和女同学各自的数学平均分,以及各自人数
    select sex, avg(math),count(*) from stu group by sex;
    
    -- 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
    select sex, avg(math),count(*) from stu where math > 70 group by sex;
    
    -- 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
    select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ⑹. 分页查询

    ①. 基础方法
    -- 语法
    SELECT 字段列表 FROM 表名 LIMIT  起始索引 , 查询条目数;
    
    /*
    	起始索引:
    	从0开始
    	计算公式:起始索引 = (当前页码-1)  *  每页显示的条数
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    tips:

    • 分页查询 limit 是MySQL数据库的方言
    • Oracle 分页查询使用 rownumber
    • SQL Server分页查询使用 top

    ②. 案例
    -- 从0开始查询,查询3条数据
    select * from stu limit 0 , 3;
    
    -- 每页显示3条数据,查询第1页数据
    select * from stu limit 0 , 3;
    
    -- 每页显示3条数据,查询第2页数据
    select * from stu limit 3 , 3;
    
    -- 每页显示3条数据,查询第3页数据
    select * from stu limit 6 , 3;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

  • 相关阅读:
    MYSQL之DDL(数据库定义语言)
    [附源码]Python计算机毕业设计Django学生社团信息管理系统
    uni-app华为审核被拒,驳回原因:您的应用在运行时,未见向用户告知权限申请的目的
    Java 实现分布式定时任务
    GBASE 8s 数据库的智能大对象备份
    金仓数据库KingbaseES数据库管理员指南--15.1. 管理视图
    GMSL技术让汽车数据传输更为高效(转)
    第三讲 测量项目代码撰写1
    JVM详解(InsCode AI 创作助手)
    【模型训练】YOLOv7道路交通标志检测
  • 原文地址:https://blog.csdn.net/weixin_45137565/article/details/127713392