WebプログラミングU

 目次へ 

2015/6/16 久米

 

SQL文の基礎(3)複数テーブル

複数テーブルから検索する場合

  1. それぞれの表で同じ意味をもつ列を=で結ぶ user_seiseki.id=user_kurasu.id
  2. 複数表をfromの後にカンマ, で列挙 from user_seiseki, user_kurasu
  3. 同じ名前の列があれば、表.列名 として、どの表の列か分かるようにする select user_seiseki.id, name,
  SQL文 備考
表作成







※全列挿入なので
valuesの前の
列名省略可能

create table petya(
id int primary key auto_increment,
name varchar(32),
price int,
kind varchar(32));



insert into petya
(id, name, price, kind)
values
(1, '猫草', 400, '猫'),
(2, 'まぐろの缶詰', 100, '猫'),
(3, '犬小屋 ', 18000, '犬')

petya
id name price kind
1 猫草 400
2 まぐろの缶詰 100
3 犬小屋 18000
4 200
5 止まり木 300 インコ
6 ねこじゃらし 500
7 キャットフード 1000
8 ドックフード 1000
9 円盤 800
10 鳥のエサ 900 インコ
学生ごとの
クラス名の表



※全列挿入なので
valuesの前の
列名省略可能

create table petya2015(
id int primary key auto_increment,
uriage_kosu int);

insert into petya2015
(id, uriage_kosu)
values
(1, 100),
(2, 2500),
(3, 10),
(4, 500)

petya2015
id uriage_kosu
1 100
2 2500
3 10
4 500
5 30
6 1600
7 4500
8 4000
9 600
10 2000
売り上げを表示 select petya.id, name, price*uriage_kosu uriage
from petya, petya2015
where petya.id=petya2015.id
order by uriage desc;
 

猫用で
売上が50万円以上
のものを表示

select petya.id, name, price*uriage_kosu uriage
from petya, petya2015
where petya.id=petya2015.id
and kind='猫'
and price*uriage_kosu>=500000
order by uriage desc;
 
もうひとつ
年ごとの売上トップの表

create table petya_top(
id int primary key auto_increment,
year varchar(32),
p_id int);

insert into petya_top
(year, p_id)
values
('2013', 3),
('2014', 8),
('2015', 7)

petya_top
id year p_id
1 2013 3
2 2014 8
3 2015 7
2014年に
トップをとったものの
名前を表示
select petya.id, name, year
from petya, petya_top
where petya.id=petya_top.p_id
and year='2014';
 

 

 

 

 

 

 

 

 

 

※種類ごとの2015年総売り上げを算出するにはgroup byを使う
select kind, sum(price*uriage_kosu) so_uriage
from petya, petya2015
where petya.id=petya2015.id
group by kind
order by so_uriage desc;