当前位置: 首页 > article >正文

数据库中存储树状关系的数据

三张表的文字描述

表1:包含字段A1,字段A2,字段A3.

字段A1是主键

表2:包含字段B1,字段B2,字段A1

字段B1是主键,字段A1是其外键。

1个字段A1的值可以匹配多条表2的记录.

表3:包含字段C1,字段C2,字段B1

字段C1是主键,字段B1是其外键.

1个字段B1的值可以匹配多条表3的记录.

创建三张表的sql语句
-- 创建第一个表
CREATE TABLE Table1 (
    A1 INTEGER PRIMARY KEY,
    A2 TEXT,
    A3 TEXT
);

-- 创建第二个表
CREATE TABLE Table2 (
    B1 INTEGER PRIMARY KEY,
    B2 TEXT,
    A1 INTEGER,
    FOREIGN KEY (A1) REFERENCES Table1(A1)
);

-- 创建第三个表
CREATE TABLE Table3 (
    C1 INT PRIMARY KEY,
    C2 VARCHAR(255), -- 假设C2是字符串类型,长度为255字符
    B1 INT,
    FOREIGN KEY (B1) REFERENCES Table2(B1) -- 假设Table2中B1是主键或者有唯一约束
);
向三张表中插入数据 
-- 插入 Table1 的数据
INSERT INTO Table1 (A1, A2, A3) VALUES (6, 'ValueA2_6', 'ValueA3_6');
INSERT INTO Table1 (A1, A2, A3) VALUES (7, 'ValueA2_7', 'ValueA3_7');
INSERT INTO Table1 (A1, A2, A3) VALUES (8, 'ValueA2_8', 'ValueA3_8');

-- 插入 Table2 的数据
-- 假设 A1 的值 6, 7, 8 在 Table1 中已经存在
INSERT INTO Table2 (B1, B2, A1) VALUES (6, 'ValueB2_6', 6);
INSERT INTO Table2 (B1, B2, A1) VALUES (7, 'ValueB2_7', 6);
INSERT INTO Table2 (B1, B2, A1) VALUES (8, 'ValueB2_8', 6);
INSERT INTO Table2 (B1, B2, A1) VALUES (9, 'ValueB2_9', 7);
INSERT INTO Table2 (B1, B2, A1) VALUES (10, 'ValueB2_10', 7);
INSERT INTO Table2 (B1, B2, A1) VALUES (11, 'ValueB2_11', 7);
INSERT INTO Table2 (B1, B2, A1) VALUES (12, 'ValueB2_12', 8);
INSERT INTO Table2 (B1, B2, A1) VALUES (13, 'ValueB2_13', 8);
INSERT INTO Table2 (B1, B2, A1) VALUES (14, 'ValueB2_14', 8);
-- 插入 Table3 的数据
INSERT INTO Table3 (C1, C2, B1) VALUES (1, 'Record1', 6);
INSERT INTO Table3 (C1, C2, B1) VALUES (2, 'Record2', 7);
INSERT INTO Table3 (C1, C2, B1) VALUES (3, 'Record3', 8);
INSERT INTO Table3 (C1, C2, B1) VALUES (4, 'Record4', 9);
INSERT INTO Table3 (C1, C2, B1) VALUES (5, 'Record5', 10);
INSERT INTO Table3 (C1, C2, B1) VALUES (6, 'Record6', 11);
INSERT INTO Table3 (C1, C2, B1) VALUES (7, 'Record7', 12);
INSERT INTO Table3 (C1, C2, B1) VALUES (8, 'Record8', 13);
INSERT INTO Table3 (C1, C2, B1) VALUES (9, 'Record9', 14);
INSERT INTO Table3 (C1, C2, B1) VALUES (10, 'Record10', 6);
INSERT INTO Table3 (C1, C2, B1) VALUES (11, 'Record11', 7);
INSERT INTO Table3 (C1, C2, B1) VALUES (12, 'Record12', 8);
INSERT INTO Table3 (C1, C2, B1) VALUES (13, 'Record13', 9);
INSERT INTO Table3 (C1, C2, B1) VALUES (14, 'Record14', 10);
INSERT INTO Table3 (C1, C2, B1) VALUES (15, 'Record15', 11);
INSERT INTO Table3 (C1, C2, B1) VALUES (16, 'Record16', 12);
INSERT INTO Table3 (C1, C2, B1) VALUES (17, 'Record17', 13);
INSERT INTO Table3 (C1, C2, B1) VALUES (18, 'Record18', 14);
INSERT INTO Table3 (C1, C2, B1) VALUES (19, 'Record19', 6);
INSERT INTO Table3 (C1, C2, B1) VALUES (20, 'Record20', 7);
INSERT INTO Table3 (C1, C2, B1) VALUES (21, 'Record21', 8);
INSERT INTO Table3 (C1, C2, B1) VALUES (22, 'Record22', 9);
INSERT INTO Table3 (C1, C2, B1) VALUES (23, 'Record23', 10);
INSERT INTO Table3 (C1, C2, B1) VALUES (24, 'Record24', 11);
INSERT INTO Table3 (C1, C2, B1) VALUES (25, 'Record25', 12);
INSERT INTO Table3 (C1, C2, B1) VALUES (26, 'Record26', 13);
INSERT INTO Table3 (C1, C2, B1) VALUES (27, 'Record27', 14);
查询语句

1.查询table2中A1 = '6'的记录

select * from table2 where A1 = '6';

2.查询table3中B1 = '6'的记录 

select * from table3 where B1 = '6';

3.如果要查询table3中对应的A1=‘6’的记录呢? 

select * from table3 where B1 in (select B1 from table2 where A1 = '6');

9条记录 

4.思考:

select table3.*,table2.A1 from table3,table2 where table2.A1 = '6'

81条记录 

这样写为什么不对? 

因为缺少了条件table2.B1 = table3.B1

5.

select table3.*,table2.A1 from table3,table2 where table2.A1 = '6' and table2.B1 = table3.B1

这样就对了 

同义语句:

select table3.*,table2.A1 from table3 inner join table2 on table2.A1 = '6' and table2.B1 = table3.B1

6.观察:

select table3.*,table2.* from table3,table2 

Table2和Table3联合起来(多表联查):

共有243条记录 

table2有9条,table3有27条。

所以,实际上是9*27 = 243条

(笛卡尔积是指两个集合中所有可能的组合)(也就是上面这种情况)

table2中的每条记录都与table3中的所有记录进行组合。


http://www.kler.cn/news/359182.html

相关文章:

  • 009、环形链表
  • Linux的开发工具gcc Makefile gdb的学习
  • 图书库存控制:Spring Boot进销存系统的应用
  • SAP 关于在交货单进行定价条件的确定简介
  • 【命令操作】Linux上通过mdadm配置软RAID _ 统信 _ 麒麟 _ 方德
  • postgresql进行几何抽稀(DP抽稀)
  • HSIC规范V1.0
  • NVR批量管理软件/平台EasyNVR多个NVR同时管理级联到上级平台通道数量为什么显示不正确?
  • FSCapture 9.3 | 全能截图与录屏解决方案。
  • 【Linux】-权限
  • 在 Flutter鸿蒙next版本 中使用 if 语句和三元表达式进行视图逻辑判断
  • Unity DOTS中的Archetype与Chunk
  • Code Review Item
  • 2024年CRM系统全景:领先品牌的深度解析与企业选择指南
  • 大数据新视界 --大数据大厂之图数据库与大数据:挖掘复杂关系的新视角
  • 嵌入式与 YOLO 目标检测的完美融合
  • Mac ARM 本地运行 Mini-Omni 记录
  • Redis 性能优化选择:Pika 的配置与使用详解
  • 备考408——数据结构基础知识
  • 模型驱动架构(MDA)设计方法及其应用分析