首页 > 数据库 >20240719数据库关联查询、条件查询

20240719数据库关联查询、条件查询

时间:2024-07-19 18:21:55浏览次数:14  
标签:product JOIN name 20240719 数据库 查询 user id LEFT

mysql关联外键查询

商品表和图片表是分开的,用一张商品图片表关联起来了。

查询商品表所有字段和图片信息。其余的,商人id、区域id、分类id都是直接关联,没有中间表

SELECT
    p.id,
    p.name,
    p.price,
    p.unit,
    f.file,
    p.description,
    p.is_on_sale,
    p.is_reviewed,
    a.name AS area_name,
    u.name AS user_name,
    pc.name AS category_name,
    p.created_at,
    p.updated_at
FROM
    product_product p
LEFT JOIN product_product_image pi ON p.id = pi.product_id
LEFT JOIN backstage_file f ON pi.file_id = f.id
JOIN location_area a ON p.area_id = a.id
JOIN user_user u ON p.merchant_id = u.id
JOIN product_productcategory pc ON p.category_id = pc.id;

join默认是内连接(INNER JOIN),只有左右两个表都有这个数据时,才会被查出来,由于有一些商品没有图片,所以图片相关的两个表用左连接,不然就会出现没有图片就查不出来的情况。

连接方式总结:
  1. INNER JOIN(内连接):如果使用 INNER JOIN,只有当两个表中都存在匹配时,结果集才会包含这些记录。如果任一表中没有匹配的记录,那么这些记录就不会出现在结果集中。
  2. LEFT JOIN(左连接)LEFT OUTER JOIN:当你使用 LEFT JOIN 时,结果集会包含左表(JOIN 语句中指定的第一个表)的所有记录,即使右表中没有匹配的记录。对于右表中没有匹配的记录,结果集中这些列的值将会是 NULL。
  3. RIGHT JOIN(右连接)RIGHT OUTER JOIN:与 LEFT JOIN 相反,RIGHT JOIN 会包含右表(JOIN 语句中指定的第二个表)的所有记录,即使左表中没有匹配的记录。对于左表中没有匹配的记录,结果集中这些列的值将会是 NULL。
  4. FULL OUTER JOIN(全外连接)FULL OUTER JOIN 会返回左表和右表中所有的记录。当某侧的表中没有匹配时,另一侧表中的列将以 NULL 填充。但是,需要注意的是,并非所有的数据库系统都支持 FULL OUTER JOIN
  5. CROSS JOIN(交叉连接)CROSS JOIN 会返回两个表的笛卡尔积,即第一个表中的每一行都会与第二个表中的每一行组合。

关于左表右表:

  1. 在 SQL 的 JOIN 语句中,左表(left table)和右表(right table)的概念是相对于你写的 JOIN 语句的顺序而言的。第一个指定的表(即在 JOIN 关键字之前的表)被视为左表,而随后通过 JOIN 关键字连接的表则被视为右表。
  2. 当你进行多表连接时,这个规则仍然适用,但需要注意的是,每个新的 JOIN 操作都会重新定义“左表”和“右表”的上下文。对于嵌套的 JOIN 或多个连续的 JOIN,你可以将每个 JOIN 看作是一个独立的操作,其中左侧的表是前一个 JOIN 的结果(或最初的表,如果是第一个 JOIN),而右侧的表是你正在连接的新表。
条件查询:

现在实现多表关联查询了,下边需要做个判断:商家只能查询自己的商品,管理员可以查询所有的:

SELECT
    p.id,
    p.name,
    p.price,
    p.unit,
    f.file,
    p.description,
    p.is_on_sale,
    p.is_reviewed,
    a.name AS area_name,
    u.name AS user_name,
    pc.name AS category_name,
    p.created_at,
    p.updated_at,
    su.USER_ID
FROM
    product_product p
LEFT JOIN product_product_image pi ON p.id = pi.product_id
LEFT JOIN backstage_file f ON pi.file_id = f.id
JOIN location_area a ON p.area_id = a.id
JOIN user_user u ON p.merchant_id = u.id
JOIN product_productcategory pc ON p.category_id = pc.id
JOIN sys_user su ON u.phone = su.TEL
WHERE
    ${USER_ID} IN (SELECT user_id FROM sys_user_role WHERE role_id = 'root') OR su.USER_ID = ${USER_ID};

标签:product,JOIN,name,20240719,数据库,查询,user,id,LEFT
From: https://www.cnblogs.com/marverdol/p/18312082

相关文章

  • 基于Java和MySQL的数据库优化技术
    基于Java和MySQL的数据库优化技术大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何基于Java和MySQL进行数据库优化,提升系统的性能和稳定性。我们将从查询优化、索引使用、事务管理以及连接池配置几个方面来介绍具体的优化技术。1.查询......
  • oracle数据库状态查询
    oracle数据库状态查询(表空间,表空间利用率,是否自动扩展,IOPS,MBPS,数据库总大小)排除了('SYSAUX','USERS','SYSTEM','UNDOTBS1')结果示例--查询用户自定义表空间的使用信息WITHuser_tablespacesAS(SELECTDISTINCTtablespace_nameFROMdba_segmentsWHERE......
  • 数据库的备份和恢复
    四、数据库的备份和恢复4.1备份的目的:备灾。(防止数据丢失)在生产环境中,数据的安全性非常重要。造成数据丢失的原因:1、程序出错2、人为的问题3、磁盘的故障备份的分类:物理备份:对磁盘或者对文件直接进行备份。**冷备份:**脱机备份,先把指定的程序关闭然后对资料进行备......
  • 使用Java和JPA构建健壮的数据库应用
    使用Java和JPA构建健壮的数据库应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何使用Java和JPA(JavaPersistenceAPI)来构建健壮的数据库应用。JPA是JavaEE规范的一部分,用于对象关系映射(ORM),简化了数据库操作和数据管理。1.JPA基础......
  • java比较mysql两个数据库中差异
    java对比两个库之间差异packagecom.ruoyi.shht;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.tex......
  • PG夜话(第20期):数据库老陈、德哥、快立方华总,聊一聊数据库内存管理
     PostgreSQLPG夜话(第20期):数据库老陈、德哥、快立方华总,聊一聊数据库内存管理(PG夜话,CUUG陈卫星,与数据库大伽一起聊PG数据库相关的话题) 老陈:“数据库内存管理是永远不变的话题,本期分享pg&oracle内存管理...”德哥:“DuckDB&PG的内存管理” 时间:07月20日19:30直播地址:......
  • 论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(下)
    前言数据库并发,数据审计和软删除一直是数据持久化方面的经典问题。早些时候,这些工作需要手写复杂的SQL或者通过存储过程和触发器实现。手写复杂SQL对软件可维护性构成了相当大的挑战,随着SQL字数的变多,用到的嵌套和复杂语法增加,可读性和可维护性的难度是几何级暴涨。因此如何在实......
  • idea内置数据库DataGrip + 多表操作sql语句
    多表操作:一对多(多对一),一对一,一对多可以通过物理外键实现,但实际上更推荐使用逻辑外键以下均为物理外键使用方法--=====================================多表设计================================---------------------一对多职位与员工--员工子表createta......
  • 打破僵局:深度解析数据库死锁的策略与实践(专家篇)
    在多任务操作系统和数据库管理系统中,死锁是一个常见问题,它发生在两个或多个进程/线程因争夺资源而相互等待,导致系统资源无法继续执行。有效地检测和预防死锁对于确保系统稳定性和提高系统性能至关重要。本次探讨不同的死锁检测与预防策略,以及如何在实际应用中实现这些策略......
  • 流式查询2、mybatis的ResultHandler 每次查询返回定义的500条
    流式查询2、mybatis通过用ResultHandler流式查询,每次查询返回定义的500条,再去批量处理(可异步并发):packagecom.aswatson.cdc.redis.schedule;importcom.aswatson.cdc.redis.common.lock.DistLock;importcom.aswatson.cdc.redis.common.lock.DistLockRegistry;importcom.as......