MySQL - 05

14158 ワード

MySQL - 05


join


RDBMSでは、仮想結果テーブルを作成し、結果を表示するためにユーザが必要とする情報のみを取得する技術である.
from 테이블1 join 테이블2 on 조인 조건식

join例


ownerテーブルとcarテーブルを作成し、外部キーを作成して依存関係にします.
親テーブルはowner、子テーブルはcarテーブルです.
create table owner(
	id varchar(300) primary key,
    name varchar(300),
    phone varchar(300),
    age int, 
    addr varchar(300)
);
create table car(
	carnum varchar(300) primary key,
    brand varchar(300),
    color varchar(300),
    price int, 
    id varchar(300),
    constraint car_owner_fk foreign key(id) reference owner(id)
);
各テーブルにデータを適切な形式で配置します.
insert into owner values('apple', '김사과', '01012341234', 20, '서울시 송파구 잠실동');
insert into owner values('banana', '반하나', '01011111111', 65, '서울시 강남구');
insert into owner values('cherry', '이체리', '01022222222', 35, '서울시 은평구');

insert into car values('135다7961', 'K8', 'White', '4000', 'apple');
insert into car values('246다2468', 'Porsche', 'Yellow', '18000', 'apple');
insert into car values('99구9999', 'Avante', 'White', 1800, 'cherry');
insert into car values('22이2222', 'GV80', 'Blue', 8600, 'banana');
insert into car values('11가1111', 'Bentley', 'White', 30000, 'banana');
各テーブルにはデータが含まれています.私たちが欲しいデータは会員の名前と電話番号、会員のナンバープレート、その車のブランド、価格情報です.
このとき,異なるテーブルの情報を1つのテーブル情報に合成してjoinと表す.
select name, phone, carnum, brand, price from owner join car;
上記の表現を使用すると、エラーは発生しませんが、どのデータがどのテーブルに存在するかを明確に作成しないと、データテーブルは可読性とデータ追跡が困難なテーブルとして宣言されます.
データ・テーブルを指定する方法は次のとおりです.テーブル名は使用できますが、別名はクエリー・ステートメントの長さを延長する可能性があります.
select o.name, o.phone, c.carnum, c.brand, c.price from owner o join car c;
出力15行が表示されます.これはjoin文に条件式がなく、可能な限りすべての数を表示するためのエラーです.
この誤りを避けるために,条件式を用いて所望の情報を生成した.
欲しい情報は会員の名前と会員の自動車情報です.したがって,自動車のidは会員idと一致する情報しか得られない.
select o.name, o.phone, c.carnum, c.brand, c.price 
from owner o join car c on c.id = o.id;

サブクエリ


SQL文の内部でSQL文を宣言する方法
データの値自体として使用したい場合、つまりテーブルからの結果の値をクエリー文に入れたい場合、またはテーブル自体をクエリー文に入れたい場合に使用します.
サブクエリの場所によっては、次のように呼ばれます.
from : inline view
select : scalar
where : sub query
ここでselectとwhereはいくつかの条件で使用されるため、値として出力されるクエリー文のみがサブクエリーとして挿入されます.


りんごが持つ平均茶より高いお茶の名前(りんごを除く)
# 평균을 구하고 
select avg(price) from car where id = 'apple';
# 이 평균값보다 높은 차를 검색하면 된다.
select brand, id from car where price > 11000 and id != 'apple';
このように書くことができますが、使い捨ての書き方があります.
サブクエリを適用します.
select brand, id from car 
where price > (select round(avg(price),2) from car where id = 'apple') 
and id != 'apple';
クエリー結果のテーブルで検索する場合は、次の操作を行います.
Apple carテーブルで最も価格の高い車の価格とブランド
select brand, price from car 
where price = (select max(price) from (select * from car where id = 'apple') r);
表自体を用いてフィルタリングを行い,これらの値を用いて必要な情報を出力する.