LOVEJOAN

文章 分类 评论
76 9 1453

站点介绍

人生是一场孤独的旅行,没有终点。。。

mysql多表查询

chuck 2023-06-14 210 12条评论 数据库 mysql

首页 / 正文

多表查询

多表关系

  • 一对多
    部门和员工的关系,一个部门可以对应多个员工
  • 多对多
    学生与课程的关系,一个学生可以选择多门课程,一门课程可以供多个学生选择。
    建立中间多,至少包含两个外键,分别关联两方的主键
  • 一对一
    多用于单表拆分,如用户基本信息和用户受教育信息、用户家庭情况信息等,通过主键与外键和唯一关键字约束。

多表查询概述

从多个表中查询数据。笛卡尔积现象,两个表的数据相乘产生的数据冗余,需要消除。
查询格式:

SELECT * from user,user_edu where user.id = user_edu.userid;

内连接

查询A、B表交集部分数据。

  • 隐式内连接
    多个表使用,隔开

    SELECT 字段列表 FROM 表1,表2 WHERE 条件;
  • 显式内连接
    多个表使用join连接

    SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件;

外连接

分为:左外连接和右外连接

  • 左外连接
    查询左表所有数据以及两张表交集部分数据

    SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
  • 右外连接
    查询右表所有数据以及两张表交集部分数据

    SELECT 字段列表 FROM 表1 ROGHT [OUTER] JOIN 表2 ON 条件;

自连接

当前表与自身的连接查询,自身连接必须使用表别名,可以是内连接也可以是外连接

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件;

联合查询

union(去重),union all(直接合并)
把多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A
UNION [ALL]
SELECT 字段列表 FROM 表B;

子查询

嵌套查询,子查询。
根据子查询的结果分类:

  • 标量子查询,查询结果为单个值(<,>,=,>=)

    select * from emp where entrydate > (select entry from emp where name = 'chuck');
  • 列子查询,查询结果为一列(IN,NOT IN ANY SOME ALL)

    select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');
    select * from emp where salary > all (select salary from emp where dept_id = (select id from dept where name = '财务部'));
  • 行子查询,查询结果为一行(= <> IN NOT IN)

    select * from emp where (salary,managerid) = (select salary,managerid from emp where name ='chuck');
  • 表子查询,查询结果为多行多列。

    select * from emp where (job,salary) in (select job,salary from emp where name = 'chuck' or name = 'joan');
    select e.*,d.* from (select * from emp where entrydate > '2021-01-01') e left join dept d  on e.dept_id = d.id;

    根据子查询位置:

  • WHERE
  • FROM
  • SELECT

评论(12)

  1. 1 游客 2025-03-27 23:57 回复

    555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

  2. 1 游客 2025-03-27 23:56 回复

    555-1 waitfor delay '0:0:15' --

  3. 1 游客 2025-03-27 23:55 回复

    555

  4. 1 游客 2025-03-27 23:54 回复

    555

  5. 1 游客 2025-03-27 23:52 回复

    555

  6. 1 游客 2025-03-27 23:51 回复

    555

  7. @@BIQht 游客 2025-03-27 23:50 回复

    555

  8. 1-1; waitfor delay '0:0:15' -- 游客 2025-03-27 23:48 回复

    555

  9. 1 游客 2025-03-27 23:47 回复

    555

  10. 1 游客 2025-03-27 23:46 回复

    555

  11. 1 游客 2025-03-27 23:44 回复

    555

  12. 1 游客 2025-03-27 23:42 回复

    555

热门文章

最新评论

  • 1

    555fulIdEqZ' OR 160=(SELECT 160 FROM PG_SLEEP(15))--

  • 1

    555-1)) OR 58=(SELECT 58 FROM PG_SLEEP(15))--

  • 1

    555-1) OR 13=(SELECT 13 FROM PG_SLEEP(15))--

  • 1

    555-1 OR 475=(SELECT 475 FROM PG_SLEEP(15))--

  • 1

    555

  • 1

    555

  • 1

    5554FobGRsu') OR 696=(SELECT 696 FROM PG_SLEEP(15))--

  • 1

    555C9F0upP1' OR 504=(SELECT 504 FROM PG_SLEEP(15))--

  • 1

    555

  • 1-1; waitfor delay '0:0:15' --

    555

日历

2025年05月

    123
45678910
11121314151617
18192021222324
25262728293031

文章目录