{"id":321,"date":"2019-04-06T19:45:38","date_gmt":"2019-04-07T03:45:38","guid":{"rendered":"https:\/\/db2tutorial.com\/?page_id=321"},"modified":"2020-04-11T06:59:37","modified_gmt":"2020-04-11T14:59:37","slug":"db2-self-join","status":"publish","type":"page","link":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/","title":{"rendered":"Db2 Self-Join"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn how to use Db2 self-join to join a table to itself to query hierarchical query or comparing rows within the same table.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to Db2 self-join<\/h2>\n\n\n\n<p>A self-join is a query in which a table is joined to itself using either <code><a href=\"https:\/\/db2tutorial.com\/db2-basics\/db2-inner-join\/\">INNER JOIN<\/a><\/code> or <code><a href=\"https:\/\/db2tutorial.com\/db2-basics\/db2-left-join\/\">LEFT JOIN<\/a><\/code> clause. When you reference a table twice in a query, you have to use the <a href=\"https:\/\/db2tutorial.com\/db2-basics\/db2-alias\/\">table aliases<\/a>.<\/p>\n\n\n\n<p>The following illustrates the syntax of a self-join in Db2:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-keyword\">SELECT<\/span>\n    select_list\n<span class=\"hljs-keyword\">FROM<\/span>\n    table_name t1\n    {<span class=\"hljs-keyword\">LEFT<\/span> | <span class=\"hljs-keyword\">INNER<\/span>} <span class=\"hljs-keyword\">JOIN<\/span> table_name t2\n        <span class=\"hljs-keyword\">ON<\/span> join_condition;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The self-join is useful to query hierarchical data or compare rows within the same table.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Db2 Self-Join examples<\/h2>\n\n\n\n<p>See the following <code>genres<\/code> table from the <a href=\"https:\/\/db2tutorial.com\/getting-started\/db2-sample-database\/\">sample database<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"236\" height=\"119\" src=\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png\" alt=\"\" class=\"wp-image-77\"\/><\/figure>\n\n\n\n<p>In this table, the <code>parent_id<\/code> column references to the <code>genre_id<\/code> column to establish a parent-child relationship.<\/p>\n\n\n\n<p>It means that for a genre you can use the value in the <code>parent_id<\/code> column to find its corresponding parent genre. The top genre has <code>NULL<\/code> in the <code>parent_id<\/code> column.<\/p>\n\n\n\n<p>This query joins the <code>genres<\/code> table to itself by comparing values in the <code>genre_id<\/code> and <code>parent_id<\/code> columns. It returns all genres and their corresponding parent genres in the hierarchy of the genres:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-keyword\">SELECT<\/span> \n    p.genre parent_genre, \n    c.genre sub_genre\n<span class=\"hljs-keyword\">FROM<\/span> \n    genres c\n    <span class=\"hljs-keyword\">INNER<\/span> <span class=\"hljs-keyword\">JOIN<\/span> genres p \n        <span class=\"hljs-keyword\">ON<\/span> p.genre_id = c.parent_id\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> \n    parent_genre, \n    sub_genre;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here is the partial output:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"276\" height=\"355\" src=\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/04\/db2-self-join-with-inner-join-clause.png\" alt=\"db2 self-join with inner join clause\" class=\"wp-image-323\" srcset=\"https:\/\/www.db2tutorial.com\/wp-content\/uploads\/2019\/04\/db2-self-join-with-inner-join-clause.png 276w, https:\/\/www.db2tutorial.com\/wp-content\/uploads\/2019\/04\/db2-self-join-with-inner-join-clause-233x300.png 233w\" sizes=\"auto, (max-width: 276px) 100vw, 276px\" \/><\/figure>\n\n\n\n<p>In this example, the <code>c<\/code> and <code>p<\/code> are the table aliases for child and parent respectively.<\/p>\n\n\n\n<p>To include the top genre in the result set, you need to use the <code>LEFT JOIN<\/code> instead of the <code>INNER JOIN<\/code> as shown in the following query:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"SQL (Structured Query Language)\" data-shcb-language-slug=\"sql\"><span><code class=\"hljs language-sql\"><span class=\"hljs-keyword\">SELECT<\/span> \n    p.genre parent_genre, \n    c.genre sub_genre\n<span class=\"hljs-keyword\">FROM<\/span> \n    genres c\n    <span class=\"hljs-keyword\">LEFT<\/span> <span class=\"hljs-keyword\">JOIN<\/span> genres p \n        <span class=\"hljs-keyword\">ON<\/span> p.genre_id = c.parent_id\n<span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> \n    parent_genre <span class=\"hljs-keyword\">NULLS<\/span> <span class=\"hljs-keyword\">FIRST<\/span>, \n    sub_genre;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SQL (Structured Query Language)<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">sql<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The following picture shows the partial output:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"285\" height=\"359\" src=\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/04\/db2-self-join-with-left-join-clause.png\" alt=\"db2 self-join with left join clause\" class=\"wp-image-325\" srcset=\"https:\/\/www.db2tutorial.com\/wp-content\/uploads\/2019\/04\/db2-self-join-with-left-join-clause.png 285w, https:\/\/www.db2tutorial.com\/wp-content\/uploads\/2019\/04\/db2-self-join-with-left-join-clause-238x300.png 238w\" sizes=\"auto, (max-width: 285px) 100vw, 285px\" \/><\/figure>\n\n\n\n<p>In this tutorial, you have learned how to use Db2 self-join to join a table to itself using either <code>INNER JOIN<\/code> or <code>LEFT JOIN<\/code>.<\/p>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"321\"\n\t\t\t\tdata-post-url=\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\"\n\t\t\t\tdata-post-title=\"Db2 Self-Join\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"321\"\n\t\t\t\tdata-post-url=\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\"\n\t\t\t\tdata-post-title=\"Db2 Self-Join\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":141,"menu_order":17,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-321","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Db2 Self-Join By Practical Examples<\/title>\n<meta name=\"description\" content=\"This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Db2 Self-Join By Practical Examples\" \/>\n<meta property=\"og:description\" content=\"This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\" \/>\n<meta property=\"og:site_name\" content=\"DB2 Tutorial\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-11T14:59:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\",\"url\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\",\"name\":\"Db2 Self-Join By Practical Examples\",\"isPartOf\":{\"@id\":\"https:\/\/www.db2tutorial.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png\",\"datePublished\":\"2019-04-07T03:45:38+00:00\",\"dateModified\":\"2020-04-11T14:59:37+00:00\",\"description\":\"This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#primaryimage\",\"url\":\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png\",\"contentUrl\":\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.db2tutorial.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Db2 Basics\",\"item\":\"https:\/\/www.db2tutorial.com\/db2-basics\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Db2 Self-Join\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.db2tutorial.com\/#website\",\"url\":\"https:\/\/www.db2tutorial.com\/\",\"name\":\"DB2 Tutorial\",\"description\":\"A Comprehensive DB2 Tutorial\",\"publisher\":{\"@id\":\"https:\/\/www.db2tutorial.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.db2tutorial.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.db2tutorial.com\/#organization\",\"name\":\"Db2 Tutorial\",\"url\":\"https:\/\/www.db2tutorial.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.db2tutorial.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/favicon.png\",\"contentUrl\":\"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/favicon.png\",\"width\":500,\"height\":500,\"caption\":\"Db2 Tutorial\"},\"image\":{\"@id\":\"https:\/\/www.db2tutorial.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Db2 Self-Join By Practical Examples","description":"This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/","og_locale":"en_US","og_type":"article","og_title":"Db2 Self-Join By Practical Examples","og_description":"This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.","og_url":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/","og_site_name":"DB2 Tutorial","article_modified_time":"2020-04-11T14:59:37+00:00","og_image":[{"url":"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/","url":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/","name":"Db2 Self-Join By Practical Examples","isPartOf":{"@id":"https:\/\/www.db2tutorial.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#primaryimage"},"image":{"@id":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#primaryimage"},"thumbnailUrl":"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png","datePublished":"2019-04-07T03:45:38+00:00","dateModified":"2020-04-11T14:59:37+00:00","description":"This tutorial shows you to use the Db2 self-join to query hierarchical data or compare rows within the same table.","breadcrumb":{"@id":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#primaryimage","url":"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png","contentUrl":"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/genres.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.db2tutorial.com\/db2-basics\/db2-self-join\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.db2tutorial.com\/"},{"@type":"ListItem","position":2,"name":"Db2 Basics","item":"https:\/\/www.db2tutorial.com\/db2-basics\/"},{"@type":"ListItem","position":3,"name":"Db2 Self-Join"}]},{"@type":"WebSite","@id":"https:\/\/www.db2tutorial.com\/#website","url":"https:\/\/www.db2tutorial.com\/","name":"DB2 Tutorial","description":"A Comprehensive DB2 Tutorial","publisher":{"@id":"https:\/\/www.db2tutorial.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.db2tutorial.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.db2tutorial.com\/#organization","name":"Db2 Tutorial","url":"https:\/\/www.db2tutorial.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.db2tutorial.com\/#\/schema\/logo\/image\/","url":"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/favicon.png","contentUrl":"https:\/\/db2tutorial.com\/wp-content\/uploads\/2019\/03\/favicon.png","width":500,"height":500,"caption":"Db2 Tutorial"},"image":{"@id":"https:\/\/www.db2tutorial.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/pages\/321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/comments?post=321"}],"version-history":[{"count":1,"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/pages\/321\/revisions"}],"predecessor-version":[{"id":1088,"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/pages\/321\/revisions\/1088"}],"up":[{"embeddable":true,"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/pages\/141"}],"wp:attachment":[{"href":"https:\/\/www.db2tutorial.com\/wp-json\/wp\/v2\/media?parent=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}