返回顶部
首页 > 资讯 > 数据库 >MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计
  • 418
分享到

MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计

数据库mysql笔记centos 2023-10-04 13:10:54 418人浏览 薄情痞子
摘要

系列文章目录 MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 MySQL笔记——表的修改查询相关的命令操作 MySQL案例——多表查询以及嵌套查

系列文章目录

MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

MySQL笔记——表的修改查询相关的命令操作

MySQL案例——多表查询以及嵌套查询​​​​​​

 MySQL笔记——数据库当中的事务以及Java实现对数据库进行增删改查操作

文章目录

前言

一 表的分组查询

1.1 语法

 1.2. 注意点

1.3 案例添加数据演示

 1.4 相关分组案例讲解

数据内容

1.4.1 统计学生表中男女学生数量分别有多少 

1.4.2 统计男生的数学平均值,女生数学的平均值 

1.4.3 统计不同性别的学生XX成绩在XX分以上的平均值

1) 统计不同性别的学生数学成绩在85分以上的平均值

 2) 统计不同性别的学生英语成绩在95分以上的平均值

3)变形——统计不同性别的学生英语平均值在95分之上

PS补充内容:where与having的区别

1.4.4 统计不同 班级的学生的总人数

1.4.5  统计班级总人数大于2的班级的总人数

1.4.6 统计英语成绩在60分之上的班级的总人数,总人数按照从大到小进行排序

二  分页查询

2.1 语法

2.2 具体的案例

三 约束

3.1 几种约束详解

3.1.1  非空约束(not null)

3.1.2 唯一约束(unique)

3.1.3 主键约束(primary key)

3.1.4 设置某列自动增长

3.1.5 外键约束

3.2  约束添加的时机

总结


前言

本文主要介绍表的分组查询、表的分页查询、表的约束,以及相关的案例展示。

一 表的分组查询

1.1 语法

group by 分组字段;

 1.2. 注意点

分组之后查询的字段:分组字段、聚合函数     

where 和 having 的区别?

  • where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
  • where 后不可以跟聚合函数,having可以进行聚合函数的判断。

按照性别分组。分别查询男、女同学的平均分

 SELECT     sex , AVG(math)     FROM student     GROUP BY sex;

按照性别分组。分别查询男、女同学的平均分,人数

 SELECT     sex , AVG(math),COUNT(id)     FROM student     GROUP BY sex;

按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组

SELECT     sex , AVG(math),COUNT(id)     FROM student     WHERE math > 70     GROUP BY sex;

按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人        

SELECT     sex , AVG(math),    COUNT(id)     FROM student     WHERE math > 70     GROUP BY sex     HAVING COUNT(id) > 2;        SELECT sex , AVG(math),    COUNT(id) 人数     FROM student     WHERE math > 70     GROUP BY sex     HAVING 人数 > 2;

group by 的用法

group by 是 sql 查询语句中的一个关键字,用于对结果集进行分组操作。它通常与聚合函数(如 SUM、COUNT、AVG 等)一起使用,以便在分组的基础上进行计算。

group by 的基本语法如下:

SELECT 列名1, 列名2, ... FROM 表名 GROUP BY 列名1, 列名2, ...

在执行 group by 操作时,首先根据指定的列名进行分组,然后对每个分组进行计算或者筛选。查询结果将返回每个分组的聚合结果,而不是每条原始数据的详细信息。

以下是一个示例查询,演示了 group by 的用法:

SELECT     department, COUNT(*) as employee_count     FROM employees     GROUP BY department;

这个查询将根据 employees 表中的 department 列对数据进行分组,并计算每个部门的员工数量。最后的结果将返回每个部门和对应的员工数量。

需要注意的是,在 group by 子句中指定的列名必须是查询结果中出现的列名之一,或者是可以通过聚合函数计算得到的列名。否则,将会引发错误。

1.3 案例添加数据演示

此处演示使用SQLyog软件操作,其操作与Navicat类似。

更改列时选中改变表菜单进行更改。

假设添加一个新的列id这一列,操作如下:

此处也可以使用SQL语句来添加新的一列,或者直接在外接工具上面添加一列,添加完成之后记得保存退出即可。

ALTER TABLE score ADD id int(20); 

 保存完成之后刷洗一下即可看到表的新列添加进去了。

 查看表的机构如下

DESC score;

 添加前面的id内容之后保存一下。

 1.4 相关分组案例讲解

数据内容

INSERT INTO student VALUES(3,'tom',23,'女','2班',88,34,69);INSERT INTO student VALUES(6,'dismiss',25,'男','1班',48,94,89);INSERT INTO student VALUES(9,'injury',33,'女','3班',76,34,59);INSERT INTO student VALUES(2,'export',26,'女','2班',88,54,65);INSERT INTO student VALUES(7,'spot',20,'男','1班',98,74,76);INSERT INTO student VALUES(5,'crash',22,'女','2班',78,44,86);INSERT INTO student VALUES(10,'pollect',24,'男','3班',82,64,79);INSERT INTO student VALUES(4,'expolit',27,'女','1班',68,39,81);INSERT INTO student VALUES(8,'exhaust',29,'女','1班',87,64,69);INSERT INTO student VALUES(12,'collapse',32,'女','2班',58,84,99);INSERT INTO student VALUES(13,'highly',35,'男','1班',76,73,69);INSERT INTO student VALUES(11,'discourage',25,'女','3班',79,31,67);INSERT INTO student VALUES(14,'slippery',28,'男','2班',80,67,84);

打开表查看信息

1.4.1 统计学生表中男女学生数量分别有多少 

查看难受和女生的数量: 

SELECT sex,COUNT(sex) AS 数量 FROM student GROUP BY sex;

 

 错误的书写方式演示

Mysql报错 SELECT list is not in GROUP BY clause and contains nonaggregated column…的原因如下:

mysql5.7以上的版本中,对于 group by 的这种聚合操作,如果在select 中的列,没有在group by 中出现,那么这个SQL是不合法的,因为列不在group by的从句中,所以对于设置了这个mode的数据库,在使用group by 的时候,就要用MAX(),SUM(),ANT_VALUE()的这种聚合函数,才能完成GROUP BY 的聚合操作

 注意:

  • SQL里面出现分组,select后面字段的字段必须是group by 后面出现的字段
  • 分组语句中select后面的还可以是聚合函数

1.4.2 统计男生的数学平均值,女生数学的平均值 

SELECT sex,AVG(math)     FROM student     GROUP BY sex

1.4.3 统计不同性别的学生XX成绩在XX分以上的平均值

1) 统计不同性别的学生数学成绩在85分以上的平均值
SELECT sex,AVG(math) FROM student WHERE math > 85 GROUP BY sex;

 2) 统计不同性别的学生英语成绩在95分以上的平均值
SELECT sex,AVG(english) FROM student WHERE english > 95 GROUP BY sex;

PS:where先于分组之前执行

3)变形——统计不同性别的学生英语平均值在95分之上
SELECT sex,AVG(english) FROM student GROUP BY sex HAVING AVG(english) > 80;

查询结果: 

PS补充内容:where与having的区别

HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法

但是 WHERE 和 HAVING 关键字也存在以下几点差异
1.一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组
2.WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数
3.WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤
4.WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
5.WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名

1.4.4 统计不同 班级的学生的总人数

SELECT       className,COUNT(className)      FROM student      GROUP BY className;

1.4.5  统计班级总人数大于2的班级的总人数

SELECT       className,COUNT(className)      FROM student      GROUP BY className      HAVING COUNT(className)>4  -- 条件筛选

1.4.6 统计英语成绩在60分之上的班级的总人数,总人数按照从大到小进行排序

SELECT classname,COUNT(classname)FROM studentWHERE english >60GROUP BY classnameHAVING COUNT(classname)>3ORDER BY COUNT(classname) DESC;

 

二  分页查询

        当我们处理大量数据时,通常需要进行分页查询来减少内存的使用和提高查询效率。MySQL提供了LIMIT和OFFSET子句来实现分页查询。

        LIMIT子句用于限制查询结果的数量,而OFFSET子句用于指定查询结果的起始位置。

        以下是一个示例代码,展示了如何在MySQL中进行分页查询:

2.1 语法

limit 开始的索引,每页查询的条数;

计算公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数

limit 参数1,参数2    参数1:从第几条数据开始    参数2:每页显示的条数

    已知的数据:当前的页码  currentPage  每一页显示的多少条数据 pageCount
    参数1的获取公式 = (currentPage-1)* pageCount

举例:每页显示3条记录 

-- 查询第一页的数据,每一页显示3条SELECT * FROM student     ORDER BY id    LIMIT 0,3   0 = (1-1)*3-- 查询第二页的数据,每一页显示3条SELECT * FROM student     ORDER BY idLIMIT 3,3   3 = (2-1)*3-- 查询第三页的数据,每一页显示3条SELECT * FROM student     ORDER BY idLIMIT 6,3   6 = (3-1)*3要显示的总共的页数需要计算-- 需要的是第5页的数据的sql语句select * from student limit (5-1)* 3,3

2.2 具体的案例

SELECT * FROM studentORDER BY idLIMIT 0,3

 

-- 查询第二页内容,每页显示5条数据SELECT * FROM studentORDER BY idLIMIT 5,5

三 约束

一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性。MySQL数据库通过约束(constraints)防止无效的数据进入到表中,以保护数据的实体完整性。

约束的分类
在 MySQL 中,主要有六种约束:

  • 1、NOT NULL:非空约束,用于约束该字段的值不能为空。比如姓名、学号等。
  • 2、DEFAULT:默认值约束,用于约束该字段有默认值,约束当数据表中某个字段不输入值时,自动为其添加一个已经设置好的值。比如性别。
  • 3、PRIMARY KEY:主键约束,用于约束该字段的值具有唯一性,至多有一个,可以没有,并且非空。比如学号、员工编号等。
  • 4、UNIQUE:唯一约束,用于约束该字段的值具有唯一性,可以有多个,可以没有,可以为空。比如座位号。
  • 5、CHECK:检查约束,用来检查数据表中,字段值是否有效。比如年龄、性别。
  • 6、FOREIGN KEY:外键约束,外键约束经常和主键约束一起使用,用来确保数据的一致性,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。

3.1 几种约束详解

约束是为了对表中的数据进行限定,保证数据的正确性、有效性和完整性。    

    1. 主键约束:primary key
    2. 非空约束:not null
    3. 唯一约束:unique
    4. 外键约束:foreign key

3.1.1  非空约束(not null)

某一列的值不能为null

创建表时添加约束 

CREATE TABLE stu(            id INT,            NAME VARCHAR(20) NOT NULL -- name为非空        );

 

创建表完后,添加非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

 

 3. 删除name的非空约束

 ALTER TABLE stu MODIFY NAME VARCHAR(20);

3.1.2 唯一约束(unique)

某一列的值不能重复

注意:
        * 唯一约束可以有NULL值,但是只能有一条记录为null

在创建表时,添加唯一约束

CREATE TABLE stu(            id INT,            phone_number VARCHAR(20) UNIQUE -- 手机号        );

删除唯一约束

ALTER TABLE stu DROP INDEX phone_number;

在表创建完后,添加唯一约束

 ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

3.1.3 主键约束(primary key)

注意:

        1. 含义:非空且唯一
        2. 一张表只能有一个字段为主键
        3. 主键就是表中记录的唯一标识

在创建表时,添加主键约束

create table stu(            id int primary key,-- 给id添加主键约束            name varchar(20)        );

 

 3. 删除主键
-- 错误 alter table stu modify id int ;

ALTER TABLE stu DROP PRIMARY KEY;

创建完表后,添加主键

ALTER TABLE stu MODIFY id INT PRIMARY KEY;

3.1.4 设置某列自动增长

  • 1.  概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
  • 2. 在创建表时,添加主键约束,并且完成主键自增长     
create table stu(            id int primary key auto_increment,-- 给id添加主键约束            name varchar(20)        );

删除自动增长

ALTER TABLE stu MODIFY id INT;

添加自动增长

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT; 

3.1.5 外键约束

外键约束语法

CREATE TABLE emp(        id INT PRIMARY KEY AUTO_INCREMENT,        sname VARCHAR(20) ,        did INT,        -- 添加外键约束        CONSTRAINT emp_depart FOREIGN KEY (did) REFERENCES depart(id)    )

删除外键 

ALTER TABLE emp DROP FOREIGN KEY emp_depart

表创建成功之后添加外键约束

ALTER TABLE emp ADD    CONSTRAINT emp_depart FOREIGN KEY (did) REFERENCES depart(id)    on delete cascade on update cascade

不推荐使用级联操作:
    级联

  •     1、级联删除  on delete cascade
  •     2、级联更新  on update cascade 

3.2  约束添加的时机

  • 1、创建表的的时候添加
  • 2、创建表完成以后,也可以添加
  • 3、删除约束

总结

以上就是今天的内容~

欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

最后:转载请注明出处!!!

来源地址:https://blog.csdn.net/m0_56006701/article/details/131931154

您可能感兴趣的文档:

--结束END--

本文标题: MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计

本文链接: https://lsjlt.com/news/423393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计
    系列文章目录 MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 MySQL笔记——表的修改查询相关的命令操作 MySQL案例——多表查询以及嵌套查...
    99+
    2023-10-04
    数据库 mysql 笔记 centos
  • MySQL约束与多表查询实例分析
    本篇内容主要讲解“MySQL约束与多表查询实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL约束与多表查询实例分析”...
    99+
    2024-04-02
  • MySQL数据库约束,表的设计
    ❤️Author: 老九 ☕️个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏:MySQL通关系列 文章目录 数据库约束no...
    99+
    2023-09-17
    数据库 mysql database
  • MySQL数据库约束及表的设计实例分析
    这篇“MySQL数据库约束及表的设计实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL数据库约束及表的设计实例...
    99+
    2023-07-02
  • 怎么理解Oracle数据库中的多表查询,分组查询,子查询
    本篇内容介绍了“怎么理解Oracle数据库中的多表查询,分组查询,子查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • MySQL约束和表的复杂查询操作
    ✨博客主页: 心荣~ ✨系列专栏:【MySQL】 ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. 数据库约束1. 数据库常用约束2. not null 约束3. unique约束...
    99+
    2023-09-14
    mysql 数据库 sql
  • {MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数据库约束1.1约束类型:1.2 NULL约束1.3unique 唯一约束1.4 DEF...
    99+
    2024-01-21
    数据库 mysql
  • mysql查询某个表外键约束的方法
    mysql查询某个表外键约束的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql查询某个表的外键约束的方法:使用...
    99+
    2024-04-02
  • MySQL数据库中的多表查询
    这期内容当中小编将会给大家带来有关MySQL数据库中的多表查询,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。多表查询查询结果来自于多张表,即多表查询子查询:在SQL语句嵌套着查询语句,...
    99+
    2024-04-02
  • Mysql DOS:数据库的创建,选定,查询,表格的查询,参数查询,表格销毁。
    1.创建数据库:格式:create database 库名;create database mrsoft;2.使用某数据:格式:use 库名;use mrsoft;3.显示当前...
    99+
    2024-04-02
  • thinkphp:数据库查询二,嵌套别的表的查询(别的表做子查询)
     例子 从 vendors 表中选择记录。在 vendors 表中,筛选出具有满足以下条件的 vendor_code 值: 对应的采购订单(在 po_headers_all 表中)存在未完全接收的采购行(在 po_lines_all 表...
    99+
    2023-09-13
    数据库 sql php
  • MySQL约束和表的复杂查询操作大全
    目录一. 数据库约束1. 数据库常用约束2. not null 约束3. unique约束4. default设置默认值5. primary key约束6. 分库分表下的自增主键7. foreign key约束8. 主键...
    99+
    2022-11-19
    mysql约束和表的复杂查询 mysql约束 mysql表查询
  • MySQL实现查询数据库表记录数
    前言: mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查。记得在Nav...
    99+
    2024-04-02
  • MySQL 数据库的约束及数据表的设计原理
    目录1. 数据库的约束1.1 介绍1.2 约束类型1.3 not null1.4 unique1.5 default1.6 primary key1.7 foreign key1.8...
    99+
    2024-04-02
  • MySQL数据库SELECT查询表达式的示例分析
    这篇文章主要介绍了MySQL数据库SELECT查询表达式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据的管理在很大一部...
    99+
    2024-04-02
  • MySQL数据库中表查询操作的示例分析
    小编给大家分享一下MySQL数据库中表查询操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单表查询      1...
    99+
    2024-04-02
  • sqlserver多表联合查询和多表分页查询的代码讲解
    这篇文章主要为大家详细介绍了sqlserver多表联合查询和多表分页查询的方法,图文详解容易学习,配合代码阅读理解效果更佳,非常适合初学者入门,感兴趣的小伙伴们可以参考一下。多表联查:select...
    99+
    2024-04-02
  • MySQL数据库单表查询的示例
    这篇文章主要介绍MySQL数据库单表查询的示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 简单查询1.     Select语句Select [...
    99+
    2024-04-02
  • mysql如何查询数据库里的表
    要在MySQL中查询数据库里的所有表,你可以使用 SHOW TABLES 命令。 下面是步骤说明: 登录MySQL: 使用命令行工具登录到MySQL数据库。例如: mysql -u [用户名] -p...
    99+
    2023-10-23
    mysql 数据库
  • mysql数据库表的多条件查询
    mysql数据库表的多条件查询 一、select语句基本查询 SELECT 字段1,字段2....FROM 表名[WHERE 条件] [LIMIT N][ OFFSET M] select可以返回多条数据也可以返回一条数据...
    99+
    2023-08-22
    数据库 mysql sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作