数据表的自身连接

有一个三级结构的数据表,自身连接分别查看分类的结构,包括 父类,子类

创建数据表:

mysql> create table tdb_goods_type(
-> type_id tinyint unsigned auto_increment primary key,
-> type_name varchar(20) not null,
-> parent_id tinyint not null
-> );

插入数据:

INSERT INTO`tdb_goods_type` VALUES (default‘编程语言‘, ‘0‘);
INSERT INTO`tdb_goods_type` VALUES (default‘静态编程语言‘, ‘1‘);
INSERT INTO`tdb_goods_type` VALUES (default‘动态编程语言‘, ‘1‘);
INSERT INTO`tdb_goods_type` VALUES (default‘JavaScript‘, ‘2‘);
INSERT INTO`tdb_goods_type` VALUES (default‘Shell‘, ‘2‘);
INSERT INTO`tdb_goods_type` VALUES (default‘Perl‘, ‘2‘);
INSERT INTO`tdb_goods_type` VALUES (default‘C‘, ‘3‘);
INSERT INTO`tdb_goods_type` VALUES (default‘C++‘, ‘3‘);
INSERT INTO`tdb_goods_type` VALUES (default‘Java‘, ‘3‘);

从插入的数据中可以看出数据表存在三级结构;那么我们的问题就是查询记录的父类名称以及父类下面的子类名称;

1)查询父类名称

mysql> select s.type_id sid,s.type_name sname,p.type_name pname
  -> from tdb_goods_type s
  -> left join tdb_goods_type p on p.type_id=s.parent_id;

用子表的parent_id这个字段去左联父表的type_id字段;

2)查询父类下面的子类名称

mysql> select p.type_id pid,p.type_name pname,s.type_name sname
  -> from tdb_goods_type p
  -> left join tdb_goods_type s on p.type_id=s.parent_id;

用父表的type_id的字段左联子表的parent_id字段;

以上两个sql看起来是相同,但是在理解上需要引入‘父表‘和‘子表’的概念;

时间: 2024-12-20 09:27:02

数据表的自身连接的相关文章

Atitit 数据存储的数据表连接attilax总结

1.1. 三种物理连接运算符:嵌套循环连接.合并连接以及哈希连接1 1.2. a.嵌套循环连接(nested loops join)1 1.3. b.合并连接(merge join)3 1.4. c.哈希连接(hash join) 4 1.5. 所以这三种算法,没有谁好谁坏,只有合适的场景应用合适的连接算法,这样才能发挥它自身的长处,而恰巧这些就是我们要掌握的技能.6 1.6. 这三种连接算法我们也可以显示的指定,loop merger hash6 1.7. 所有的最优计划的选择都是基于现有统计

SAS连接MYSQL的步骤及引用数据表

1.建立逻辑库 libname  dz  ’物理路径'; 2.逻辑库做为桥梁连接SAS与MYSQL libname dz MYSQL USER=*****  PASSWORD=****  DATABASE=数据库名; 3.建立数据集 data  test; 4.引用数据库中的数据表 set dz.数据表名; 5.run;

SQL应用与开发:(五)多个数据表的连接

数据库中的各个表中存储着不同的数据,用户往往需要用多个表中的数据来组合.提炼出所需要的信息.如果一个查询需要对多个表进行操作,就称为连接查询.连接查询的结果集或结果表称为表之间的连接.查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系型数据库查询最主要的特征. 实现连接的结果是在向数据库增添新类型的数据方面没有限制,具有很大的灵活性.通常总是通过连接创建一个新表,以包含不同表中的数据.如果新表有合适的域,就可以将它连接到现有的表. 1.简单连接操作 最简单的连接方式是在SELECT语

两个数据表左右连接

Mysql 连接的使用 INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录 MySQL 事务 BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认 MySQL LIKE 子句 SELECT field1, field2,...fieldN table_nam

PHP全栈开发(七):PHP与MySQL存储交互(1.连接、创建数据库;创建数据表)

在Linux服务器中可以使用命令 mysqladmin -u root password beijing2007; 来修改MySQL的root用户的密码. 但是在我们自己安装了wampserver的电脑里面,可以到PhpMyAdmin这个网页页面去改,初始root密码同样为空. 然后我们用面向过程的MySQLi来进行数据库的链接,链接代码如下: <?php $servername = "localhost"; $username = "root"; $pass

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

SQL基础:数据表的创建

1. 先选择创建表所在的数据库 2. 创建表 3. 查看表是否创建成功 4. 主键:要求主键列的数据唯一,且不允许为空.主键能够唯一的标识表中的每一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度. 主键分为:单字段主键和多字段联合主键. 4.1 单字段主键 4.1.1 定义方式一:在定义列的同时指定主键 4.1.2 定义方式二:在定义完所有的列之后指定主键 4.2 多字段联合主键 5. 使用外键约束 外键用来在两个表之间建立连接,可以是一列或多列.一个表的外键可以是

数据库设计之数据库,数据表和字段等的命名总结

数据库命名规则: 根据项目的实际意思来命名. 数据表命名规则: 1.数据表的命名大部分都是以名词的复数形式并且都为小写: 2.尽量使用前缀"table_": 3.如果数据表的表名是由多个单词组成,则尽量用下划线连接起来:但是不要超过30个字符,一旦超过30个字符,则使用缩写来缩短表名的长度: 字段命名规则: 1.首先命名字段尽量采用小写,并且是采用有意义的单词: 2.使用前缀,前缀尽量用表的"前四个字母+下划线组成": 3.如果字段名由多个单词组成,则使用下划线来进

Oracle 表三种连接方式(sql优化)

转自网络 1. NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就依据索引去还有一个表里面查找,没有索引一般就不会是 nested loops.一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引.这样就走nstedloop.假设驱动表返回记录太多,就不适合nested loops了.假设连接字段没有索引.则适合走hash join,由于不须要索引. 可用or