自存 sql常见语句和实际应用

关于连表

查询两个表

SELECT *
FROM `study_article`
JOIN study_article_review 

查询的就是两个表相乘,结果为两个表的笛卡尔积

相这样

这种并不是我们想要的结果

通常会添加一些查询条件

SELECT *
FROM `study_article`
 JOIN study_article_review ON study_article.id=study_article_review.article_id

查询结果为

那么就会查询id=article_id的数据

左外连接,就是主表都查询出来,然后右表根据条件匹配

sql

SELECT *
FROM `study_article`
LEFT JOIN study_article_review ON study_article.id=study_article_review.article_id

相比于上面这种把主表的数据都查出来了

分组查询,就是对某一列的数据的相同的分组 group by 这一列

查询文章列表,并且查询每条文章的评论数

sql语句

SELECT study_article.id, study_article.content, study_article.title, study_article.url, count(study_article.id) AS count
FROM `study_article`
LEFT JOIN study_article_review ON study_article.id=study_article_review.article_id
GROUP BY study_article.id

然后这样的查询结果为

因为文章和评论属于1对多的关系,左外连接评论表就会产生许多多余的文章数据,所以要对文章id进行分组,然后统计文章id的数量就是这个文章的评论数量

2024 11.20 补充 虽然上面连表分组查询也可以,但是太过于麻烦,并且扩展性不太好

,如果我们要查询文章表的点赞数和评论数 就相当于文章表既要连接评论表统计评论数量,又要连接点赞表统计点赞表的数量,就相当于文章表要 left join 两次,当然也可以这样

select a.*,count(study_star.obj_id) as liked from 
(
SELECT study_article.id, study_article.content, study_article.title, study_article.url, count(study_article_review.article_id) AS reviewCount
FROM `study_article`
LEFT JOIN study_article_review ON study_article.id=study_article_review.article_id
GROUP BY study_article.id
) as a
left JOIN study_star on a.id=study_star.obj_id
GROUP BY a.id

就是先文章表左外连接评论表统计出评论数目 文章id分组,然后在把这个查询出来的表作为子查询

再左外连接点赞表统计出点赞的数量 id分组

虽然也可以实现但过于复杂

第二种方法

SELECT 
study_article.id, study_article.content, study_article.title, study_article.url,
(SELECT COUNT(1) FROM study_article_review where article_id=study_article.id) as reviewCount,
(SELECT COUNT(1) FROM study_star where study_star.obj_id=study_article.id) as liked
 FROM study_article

把子查询放到select之后分别查询点赞量和评论量,这样子扩展性大大提升 结果一样

查询父级评论列表,并查询该父级评论的子评论数量

要查询评论的子评论数量条件是pid等于父级评论的id

可以连表,自身连接自身条件为第一张表的id等于第二张表的pid,查询父级评论为

SELECT * FROM study_article_review as s1
left JOIN  study_article_review as s2  on s1.id=s2.pid
WHERE s1.pid=0

由于一个评论有很多回复属于一对多连接,对第一个表id分组,聚合查询回复数量

SELECT s1.*,count(s2.pid) AS reviewCount FROM study_article_review as s1
left JOIN  study_article_review as s2  on s1.id=s2.pid
WHERE s1.pid=0
GROUP BY s1.id

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/919864.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目录背景缺少vscode右键打开选项

目录背景缺少vscode右键打开选项 1.打开右键管理 下载地址:https://wwyz.lanzoul.com/iZy9G2fl28uj 2.开始搜索框搜索vscode, 找到其源目录 3.目录背景里面, 加入vscode.exe 3.然后在目录背景下, 右键, code就可以打…

应用于各种小家电的快充协议芯片

前言 随着快充技术的广泛应用,以往小家电的慢充模式已经满足不了人们对充电速度的要求,因此商家纷纷对小家电应用了诱骗取电快充协议芯片 例如(XSP16H),有了快充的支持小家电的充电速度有了很大的提升,节省了很多的充电…

Java基础知识(五)

文章目录 ObjectObject 类的常见方法有哪些? 和 equals() 的区别hashCode() 有什么用?为什么要有 hashCode?为什么重写 equals() 时必须重写 hashCode() 方法? 参考链接 Object Object 类的常见方法有哪些? Object 类…

【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景 Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色&#…

[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录 1. 什么是 Docker Compose 生活案例 2. 为什么要使用 Docker Compose Docker Compose 的安装 Docker Compose 的功能 使用步骤 核心功能 Docker Compose 使用场景 Docker Compose 文件(docker-compose.yml) 模仿示例 文件基本结构及常见…

学习虚幻C++开发日志——委托(持续更新中)

委托 官方文档:Delegates and Lamba Functions in Unreal Engine | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 简单地说,委托就像是一个“函数指针”,但它更加安全和灵活。它允许程序在运行时动态地调用不…

【Linux】基础02

Linux编译和调试 VI编辑文件 vi : 进入文件编辑 是命令行模式 i :从光标处进入插入模式 dd : 删除光标所在行 n dd 删除指定行数 Esc : 退出插入模式 : 冒号进入末行模式 :wq : 保存退出 :q : 未修改文件可以退出 :q! …

前端:JavaScript (学习笔记)【1】

目录​​​​​​​ 一,介绍JavaScript 二,JavaScript的特点 1,脚本语言 2,基于对象的语言 3,事件驱动 4,简单性 5,安全性 6,跨平台性 7,JS 和java的区别 &…

安卓手机root+magisk安装证书+抓取https请求

先讲一下有这篇文章的背景吧,在使用安卓手机fiddler抓包时,即使信任了证书,并且手机也安装了证书,但是还是无法捕获https请求的问题,最开始不知道原因,后来慢慢了解到现在有的app为了防止抓包,把…

数字化那点事:一文读懂物联网

一、物联网是什么? 物联网(Internet of Things,简称IoT)是指通过网络将各种物理设备连接起来,使它们可以互相通信并进行数据交换的技术系统。通过在物理对象中嵌入传感器、处理器、通信模块等硬件,IoT将“…

Tomcat和Nginx原理说明

Tomcat Tomcat 是一个开源的 Java 应用服务器,它由多个关键组件组成。这些组件共同协作,实现了 Servlet 容器的功能。以下是 Tomcat 的核心组件说明及其逻辑架构的示意图。 1. Tomcat 核心组件说明 (1) Server 描述:Tomcat 的顶级组件&…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接:https://arxiv.org/pdf/2302.13971 论文:LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B,LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

一文解决Latex中的eps报错eps-converted-to.pdf not found: using draft setting.

在使用Vscode配的PDFLatex编译IEEE TII的Latex模板时,出现eps文件不能转换为pdf错误,看了几十篇方法都没用,自己研究了半天终于可以正常运行了。主要原因还是Settings.JSON中的PDFLatex模块缺少:"--shell-escape", 命令…

【流量分析】常见webshell流量分析

免责声明:本文仅作分享! 对于常见的webshell工具,就要知攻善防;后门脚本的执行导致webshell的连接,对于默认的脚本要了解,才能更清晰,更方便应对。 (这里仅针对部分后门代码进行流量…

Java前端基础——CSS

一、CSS介绍 1.1 什么是CSS CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式. CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离. 1.2 基本语法规范 选择器 {⼀条/N条声明} • 选择器决定针…

游戏引擎学习第17天

视频参考:https://www.bilibili.com/video/BV1LPUpYJEXE/ 回顾上一天的内容 1. 整体目标: 处理键盘输入:将键盘输入的处理逻辑从平台特定的代码中分离出来,放入更独立的函数中以便管理。优化消息循环:确保消息循环能够有效处理 …

知识中台:赋能 3C 数码企业服务升级

在数字化浪潮汹涌澎湃的当下,3C 数码产品行业竞争已呈白热化态势。企业如何在这片充满挑战与机遇的领域中,打造卓越服务,构筑核心竞争力?知识中台的建设与运用,正逐渐成为破题关键。 一、产品研发加速引擎 在 3C 数码…

_FYAW智能显示控制仪表的简单使用_串口通信

一、简介 该仪表可以实时显示位移传感器的测量值,并可设定阈值等。先谈谈简单的使用方法,通过说明书,我们可以知道长按SET键可以进入参数选择状态,按“↑”“↓”可以选择该组参数的上一个或者下一个参数。 从参数一览中可以看到有…

Pytest 学习 @allure.severity 标记用例级别的使用

一、前言 使用allure.serverity注解,可以在allure报告中清晰的看到不同级别用例情况 使用等级介绍 allure提供的枚举类 二、等级介绍 二、等级介绍 blocker:阻塞缺陷(功能未实现,无法下一步) critical:…

Linux编辑器 - vim

目录 一、vim 的基本概念 1. 正常/普通/命令模式(Normal mode) 2. 插入模式(Insert mode) 3. 末行模式(last line mode) 二、vim 的基本操作 三、vim 正常模式命令集 1. 插入模式 2. 移动光标 3. 删除文字 4. 复制 5. 替换 6. 撤销上一次操作 7. 更改 8. 调至指定…