精华内容
下载资源
问答
  • 自连接查询

    千次阅读 2018-03-24 14:43:13
    自连接查询假想以下场景:某一电商网站想要对站内产品做层级分类,一个类别下面有若干子类,子类下面也会有别的子类。例如数码产品这个类别下面有笔记本,台式机,智能手机等;笔记本,台式机,智能手机又可以按照...

    自连接查询

    假想以下场景:某一电商网站想要对站内产品做层级分类,一个类别下面有若干子类,子类下面也会有别的子类。例如数码产品这个类别下面有笔记本,台式机,智能手机等;笔记本,台式机,智能手机又可以按照品牌分类;品牌又可以按照价格分类,等等。也许这些分类会达到一个很深的层次,呈现一种树状的结构。那么这些数据要怎么在数据库中表示呢?我们可以在数据库中创建两个字段来存储id和类别名称,使用第三个字段存储类别的子类或者父类的id,最后通过自连接去查询想要的结果。
    自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。看下面的例子:

    1. 创建数据表:
    [java] view plain copy
    1. create table tdb_cates(  
    2.     id smallint primary key auto_increment,  
    3.     cate_name varchar(20) not null,  
    4.     parent_id smallint not null  
    5. );  
    注:cate_name表示分类的名称,parent_id表示父类的id。

    2. 插入数据:
    [java] view plain copy
    1. insert into tdb_cates(cate_name, parent_id) values('数码产品'0);  
    2. insert into tdb_cates(cate_name, parent_id) values('家用产品'0);  
    3. insert into tdb_cates(cate_name, parent_id) values('笔记本'1);  
    4. insert into tdb_cates(cate_name, parent_id) values('智能手机'1);  
    5. insert into tdb_cates(cate_name, parent_id) values('电器'2);  
    6. insert into tdb_cates(cate_name, parent_id) values('家具'2);  
    7. insert into tdb_cates(cate_name, parent_id) values('冰箱'5);  
    8. insert into tdb_cates(cate_name, parent_id) values('洗衣机'5);  
    9. insert into tdb_cates(cate_name, parent_id) values('汽车品牌'0);  
    10. insert into tdb_cates(cate_name, parent_id) values('别克'9);  
    11. insert into tdb_cates(cate_name, parent_id) values('宝马'9);  
    12. insert into tdb_cates(cate_name, parent_id) values('雪佛兰'9);  
    13. insert into tdb_cates(cate_name, parent_id) values('家纺'0);  
    查询结果:


    3. 查询所有分类以及分类的父类:假想有左右两张表(都是tdb_cates),左表是子表,右表是父表;查询子表的id,子表的cate_name,父表的cate_name;连接条件是子表的parent_id等于父表的id。
    [java] view plain copy
    1. select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on s.parent_id=p.id;  
    查询结果:


    4.  查询所有分类以及分类的子类:还是假想有左右两张表(都是tdb_cates),左表是子表,右表是父表;查询子表的id,子表的cate_name,父表的cate_name;连接条件是子表的id等于父表的parent_id。
    [java] view plain copy
    1. select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on p.parent_id=s.id;  
    查询结果:

    展开全文
  • 主要介绍了Mysql自连接查询,结合实例形式分析了MySQL自连接查询的应用场景、原理及相关操作技巧,需要的朋友可以参考下
  • Mysql自连接查询

    2019-07-10 12:00:13
    原 Mysql自连接查询 ...

    Mysql自连接查询

                        版权声明:本文为博主原创文章,未经博主允许不得转载。                        https://blog.csdn.net/xiaoyaoyulinger/article/details/54175483                    </div>
                                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
                                        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
                <div class="htmledit_views" id="content_views">
    

    自连接查询

    假想以下场景:某一电商网站想要对站内产品做层级分类,一个类别下面有若干子类,子类下面也会有别的子类。例如数码产品这个类别下面有笔记本,台式机,智能手机等;笔记本,台式机,智能手机又可以按照品牌分类;品牌又可以按照价格分类,等等。也许这些分类会达到一个很深的层次,呈现一种树状的结构。那么这些数据要怎么在数据库中表示呢?我们可以在数据库中创建两个字段来存储id和类别名称,使用第三个字段存储类别的子类或者父类的id,最后通过自连接去查询想要的结果。
    自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。看下面的例子:

    1. 创建数据表:
    1. create table tdb_cates(
    2. id smallint primary key auto_increment,
    3. cate_name varchar(20) not null,
    4. parent_id smallint not null
    5. );
    注:cate_name表示分类的名称,parent_id表示父类的id。

    2. 插入数据:
    1. insert into tdb_cates(cate_name, parent_id) values('数码产品', 0);
    2. insert into tdb_cates(cate_name, parent_id) values('家用产品', 0);
    3. insert into tdb_cates(cate_name, parent_id) values('笔记本', 1);
    4. insert into tdb_cates(cate_name, parent_id) values('智能手机', 1);
    5. insert into tdb_cates(cate_name, parent_id) values('电器', 2);
    6. insert into tdb_cates(cate_name, parent_id) values('家具', 2);
    7. insert into tdb_cates(cate_name, parent_id) values('冰箱', 5);
    8. insert into tdb_cates(cate_name, parent_id) values('洗衣机', 5);
    9. insert into tdb_cates(cate_name, parent_id) values('汽车品牌', 0);
    10. insert into tdb_cates(cate_name, parent_id) values('别克', 9);
    11. insert into tdb_cates(cate_name, parent_id) values('宝马', 9);
    12. insert into tdb_cates(cate_name, parent_id) values('雪佛兰', 9);
    13. insert into tdb_cates(cate_name, parent_id) values('家纺', 0);
    查询结果:


    3. 查询所有分类以及分类的父类:假想有左右两张表(都是tdb_cates),左表是子表,右表是父表;查询子表的id,子表的cate_name,父表的cate_name;连接条件是子表的parent_id等于父表的id。
    select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on s.parent_id=p.id;
    查询结果:


    4.  查询所有分类以及分类的子类:还是假想有左右两张表(都是tdb_cates),左表是子表,右表是父表;查询子表的id,子表的cate_name,父表的cate_name;连接条件是子表的id等于父表的parent_id。
    select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on p.parent_id=s.id;
    查询结果:




    展开全文
  • 自连接查询属于联表查询中特殊的一种 联表查询是两张表采用7中join方式 依据两张表不同字段相同数据进行数据查询 那么一张表如何进行联表查询呢? 就是采用自连接的查询方式 自连接说白了就是把一张表分成两张 然后...

    自连接查询属于联表查询中特殊的一种
    联表查询是两张表采用7中join方式 依据两张表不同字段相同数据进行数据查询
    那么一张表如何进行联表查询呢?
    就是采用自连接的查询方式
    自连接说白了就是把一张表分成两张 然后又采用联表查询的方式进行操作
    话不多说,直接看表

    - -  建表 `obj`
    CREATE TABLE IF NOT EXISTS `obj`(
    `id` INT (2) NOT NULL AUTO_INCREMENT COMMENT'编号',
    `o_name` VARCHAR (10) NOT NULL COMMENT'课程名',
    `o_id` INT (2)  COMMENT'课程号',
    PRIMARY KEY(`id`) 
    )ENGINE = INNODB DEFAULT CHARSET = utf8
    

    插入几组数据
    在这里插入图片描述
    把这两张表拆开了也就是:
    在这里插入图片描述
    在这里插入图片描述
    这样封开看的话就比较明显了
    然后进行连接查询,因为下面两张表的数据实际在一张表中 所以需要给表起别名来达到一张表当两张表用的目的

    SELECT a.`o_name`AS '科目' ,b.`o_name`'类别' 
    FROM `obj`AS a ,`obj`AS b
    WHERE a.`o_id` = b.`id`
    

    查询结果:
    在这里插入图片描述
    这样就实现了自连接查询的目的。

    展开全文
  • mysql 自连接查询

    2019-01-27 19:51:00
    自连接查询自连接就是一个表和它自身进行连接,是多表连接的特殊情况。在自连接查询中,要先在FROM字句中为表分别定义两个不同的别名,然后使用这两个别名写出一个连接条件。 条件比较在同一个表中的情况*/ --任务...

    /*

    自连接查询
    自连接就是一个表和它自身进行连接,是多表连接的特殊情况。
    在自连接查询中,要先在FROM字句中为表分别定义两个不同的别名,
    然后使用这两个别名写出一个连接条件。

    条件比较在同一个表中的情况
    */

    --任务1:查询课程类别相同但是开课系部不同的课程信息
    --                 要求显示课程编号、课程名称、课程类别与系部
    --                 编号,并按照课程编号升序排列查询结果。

    SELECT DISTINCT c1.CouNo 课程编号, c1.CouName 课程名称, 
                                       c1.Kind 课程类别, c1.DepartNo 系部编号
    FROM Course c1 JOIN Course c2 ON c1.Kind=c2.Kind  AND c1.DepartNo!=c2.DepartNo
    ORDER BY c1.CouNo;

    转载于:https://www.cnblogs.com/draymond/p/10327751.html

    展开全文
  • PostgreSQL自连接查询

    千次阅读 2018-03-28 15:14:12
    首先SQL中的自连接查询是一种比较特殊的多表查询方式,其特殊之处就在于数据来源于同一张表。 很多时候我们在第一次接触自连接查询时会比较迷乱,不知道怎么去理解。所以我们在处理这种自连接查询时,不要去刻意的...
  • 自连接查询小结 连接查询-自连接 学习目标 能够写出自连接查询的SQL语句 1. 自连接查询 左表和右表是同一个表,根据连接查询条件查询两个表中的数据。 区域表效果图 [外链图片转存失败,源站可能有防盗链机制,建议...
  • MySQL自连接查询的深入分析 一般的连接查询使用两张不同的表,指定连接条件,然后进行查询。自连接查询格式和普通的连接查询书写格式完全相同,只不过我们需要把一张表想象成两张表使用。 自连接查询是自己和自己...
  • 自连接查询,别名

    2019-06-19 15:36:21
    如果在一个链接查询中,设计的两个表都是同一个表,这种查询被叫做自连接查询。 自连接是一种特殊的内链接,它是指相互连接的表在物理上为同一张表,但是可以在逻辑上分为两张表。 select f1.sid,f1.sname from AA_...
  • 自连接查询 定义:左表和右表是同一个表,根据连接查询条件查询两个表中的数据。 注意:自连接必须对表起别名。 # 创建area表 create table areas( id varchar(30) not null primary key, title varchar(30),...
  • 通常在项目中对表的查询都是关联多张表,多表查询就涉及到sql的内连接、外连接和自连接查询。本篇文章将简单的介绍这些sql连接的使用,希望对大家有所帮助。 二. 数据准备: 先准备两张表: 1. 学生...
  • Oracle中内连接查询(inner join),自然连接查询(natural join),自连接查询,外连接查询(outer join),左外连接(left join),右外连接(right join),完全外连接(full join)
  • 连表查询 JOIN ON 操作 描述 inner join 只返回匹配的值 right join 会从右表中返回所有的值, 即使左表中没有匹配 left join 会从左表中返回所有的值, 即使右表中没有匹配 -- ========== 连表查询 ...
  • MySQL讲义第27讲——select 查询之自连接查询 顾名思义,自连接查询就是一张表和自己进行连接。就是把一张表看成两张表,使用别名进行区分。 一、数据准备 创建一张员工(emp)表,每个员工都有一个部门领导(leader...
  • 我发现很多自连接查询都可以拆分的,有什么场景是一定需要使用自连接才能解决的吗?
  • 简单的单表自连接查询 insert into SayReply values ('其实我也不知道为啥不好','2017-04-21 11:34:43','曹操',3)insert into SayReply values ('我知道心情为啥不好','2017-04-...
  • 自连接查询 左表和右表是同一个表,根据连接查询条件查询两个表中的数据. 在这里简单做了一个表来进行分析,如果你能够理解这个,你会发现自连接其实并不难. 有一个省表,如下图有省ID以及省名 有一个市表,如下图有市ID...
  • --连接查询的三种格式select ename, deptno,dname from emp natural join dept;select ename, deptno,dname from emp join dept using(deptno);select emp.ename, emp.deptno,dept.dname from emp join dept on emp....
  • 问题:我们在Oracle数据库中,如果需求要查询出 EMP 表中的所有员工及员工对应的领导时,就需要用到自连接查询: 查询语句如下: select e.empno,e.ename,e.mgr from emp e,emp b where e.empno = b.mgr; 但是,...
  • 自连接查询的场景及使用 #什么是自连接? 自连接是一种特殊的表连接,它是指相互连接的表在物理上同为一张表,但是逻辑上确是多张表。自连接通常用于表中的数据有层次结构,如区域表,菜单表,产品分类等。 #代码...
  • MySQL 多表查询--笛卡尔积--外键约束--内连接查询--自连接查询--外连接查询--DML操作--数据备份和恢复 1.多表查询 通过一条SQL语句得到两张表不同的信息。这里就需要用到多表查询 ####单表查询语法: SELECT<...
  • oracle菜鸟学习之 自连接查询实验 实验表的创建 表字段说明: id:员工编号name:员工名字ano:管理人员编号 create table admin(id varchar2(4),name varchar2(10),ano varchar2(4)); insert into admin values('...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,746
精华内容 5,098
关键字:

自连接查询