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

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

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

字段A1是主键

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

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

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

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

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

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

-- 创建第一个表
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条

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

------


http://www.mrgr.cn/news/51820.html

相关文章:

  • Linux:线程
  • 【二刷hot-100】day1
  • SpringBoot中OKHttp和压缩文件的使用
  • 域渗透AD 示例场景漏洞 Kerberos Bronze Bit 【CVE-2020-17049】漏洞
  • 数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
  • GEE 问题:超限中对于besteffort的使用到底行不行?
  • RT-Thread线程的定义和属性
  • 嵌入式:Keil的Code、RW、RO、ZI段的解析
  • 【Python3】Tornado6.4 高性能编程
  • 【ShuQiHere】 AI与自我意识:能否创造真正的自觉机器人?
  • STM32F103C8T6 使用 HAL 库驱动 OLED 显示屏
  • Java面向对象编程基础(二)
  • 【初阶数据结构】归并排序 - 分而治之的排序魔法
  • Linux df 命令详解
  • 基于AES的遥感图像加密算法matlab仿真
  • 法规标准-懂车帝智能化实测标准(2024版)
  • Hadoop查询引擎之Tez
  • 多线程(五):死锁内存可见性问题
  • 数据结构——单链表的基本操作
  • 算法题总结(十三)—— 动态规划(上)