オーロラさんの勉強帳

IT企業勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。少しでもお役に立てたら幸いです。

SQL基礎 選択・射影(投影)・結合 リレーショナルデータベース(RDB)のデータの取り扱い

 

リレーショナルデータベース・RDBのデータの取り出し方

リレーショナルデータベース(RDB)はデータを「行(レコード)」と「列(フィールド)」から構成する2次元の「表(テーブル)」として格納します。

そして、リレーショナルデータベースはテーブルに対して、選択・射影(投影)、結合の3つの機能・操作を使って、データを取り出すことができます。

 

選択

条件を指定して、その条件に合致した行(レコード)のみを取り出します。

 

f:id:auroralights:20200323232415p:plain

選択

 

 

射影・投影

条件に合った列(フィールド)を取り出します。

 

f:id:auroralights:20200323232614p:plain

射影・投影

 

 

結合

複数の表を共通するキーで結び付けて、1つの表として取り出します。

f:id:auroralights:20200323232921p:plain

結合

 

上記は選択、射影(投影)、結合の1つずつの記載になりますが、実際のシステム、業務では選択、射影(投影)、結合をを組み合わせて使います。

 

SQLで選択、射影(投影)、結合を試してみる

2つのテスト用のテーブルを用意して、選択、射影(投影)、結合SQLで使ってみましょう。

 

<テスト用テーブルの作成>

CREATE TABLE test1 (
 id NUMBER(5) constraint id_pk PRIMARY KEY,
 name VARCHAR2(10),
 email VARCHAR2(14),
 country_cd NUMBER(10)
);

 

CREATE TABLE test2 (
 country_cd NUMBER(10),
 country VARCHAR2(10)
);

 

<テスト用テーブルにデータを挿入>

・test1用データ

INSERT
INTO test1
VALUES (1, 'AAA', 'AAA@kaisha.com', 1);
INSERT
INTO test1
VALUES (2, 'BBB', 'BBB@kaisha.com', 2);
INSERT
INTO test1
VALUES (3, 'CCC', 'CCC@kaisha.com', 1);
INSERT
INTO test1
VALUES (4, 'DDD', 'DDD@kaisha.com', 3);
INSERT
INTO test1
VALUES (5, 'EEE', 'EEE@kaisha.com', 3);

 

f:id:auroralights:20200323235224p:plain

test1

 

・test2用データ

INSERT
INTO test2
VALUES (1, 'JAPAN');
INSERT
INTO test2
VALUES (2, 'AMERICA');
INSERT
INTO test2
VALUES (3, 'GERMAN');

 

f:id:auroralights:20200323235320p:plain

test2

 

選択 SQL

select * from test1 where country_cd = 3;

f:id:auroralights:20200323235403p:plain

sample:選択

select * from test1 where id between 1 and 3;

f:id:auroralights:20200323235544p:plain

sample2:選択

 

射影・投影 SQL

select name from test1;

f:id:auroralights:20200323235704p:plain

sample:射影・投影

 

 

結合 SQL

select
  *
from
  test1 a
  inner join test2 b
    on a.country_cd = b.country_cd;

 

f:id:auroralights:20200323235944p:plain

sample:結合

 

 select
  id,name,a.country_cd,country
from
  test1 a
  inner join test2 b
    on a.country_cd = b.country_cd;

 

f:id:auroralights:20200324000436p:plain

sample2:結合