skillup

技術ブログ

Database

自己結合に関して

投稿日:

以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。

下記のようなテーブルProductsがあるとします。

name | price
——–+——-
りんご | 100
みかん | 50
バナナ | 80

ここで下記のようなSQLをたたくと

下記のような列が得られます。

name | name
——–+——–
りんご | りんご
りんご | みかん
りんご | バナナ
みかん | りんご
みかん | みかん
みかん | バナナ
バナナ | りんご
バナナ | みかん
バナナ | バナナ

これは3行同士が掛け算されてできた結果でProductsのりんごはProductsの(りんご、みかん、ばなな)と結びついています。※図で書くとわかりやすいかも・・・

ここで例えば下記のようなSQLを書くと

下記ような結果になります。ちょうどりんご-りんごのような同列グループがなくなったわけです。

name | name
——–+——–
りんご | みかん
りんご | バナナ
みかん | りんご
みかん | バナナ
バナナ | りんご
バナナ | みかん

実務でもこの自己結合は比較的見かけますが、SQLを集合として考えないとなかなか難しいと思います。

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Postgres リモートホストからの接続他

今まで使ってきたデータベースはMySQLがほとんどなのですが、最近少し、Postgresを触っています。 今回はパスワードの設定とリモートからの接続など。 Contents1 postgresへのログ …

no image

SQL基礎 ウィンドウ関数

SQLの基礎(主にSELECT)を whereはレコードに対しての集計、havingはレコードの集合に対しての集計 ビューは一時的なselect文なのでサブクエリとほぼ等価 条件分岐で出力項目を変えた …

no image

Postgresメモ(データベース、スキーマ、他pgadminなど)

postgresをちょこちょこ触っており、超基礎的な事に関してMySQLでは触れられていないネタなどについて。 以前のリンク Postgresの基礎(主にMySQLとの違いなど) Contents1 …

no image

JPAでのリレーションに関して

JPAではテーブルをクラスで定義します。もちろん例外とかはいろいろあるのですが、1テーブル1クラスというつくりで、これをエンティティと呼びます。 もともとクラスを作ってからDBを作成したり、JTAの規 …

no image

Postgresの基礎(主にMySQLとの違いなど)

えー来月(2020年3月)より、postgresを使うかもしれないので、ちょっと復習を。 Contents1 以前のリンク2 基本コマンド比較2.1 超頻出系3 テーブル比較4 SELECT文5 do …

アーカイブ