基本命令
練習用サイト
検索
SELECT 列名(*で全部) FROM 表名 WHERE 条件 (以下にオプション指定をすることがある) SELECT 都道府県名 FROM 都道府県表 WHRE 県コード = 27 // コードが27の県の都道府県名を表示 SELECT 都道府県名 FROM 都道府県表 WHRE 都道府県名 LIKE '%川' //件名の最後の文字が川 SELECT * FROM 気象観測 WHRE 月 in (3,7,8) //3がつ、7月、8月の全項目 SELECT * FROM 気象観測 WHRE 月 between 4 and 8 //4月から8月までの全項目
登録
INSERT INTO 表名 VALUES('S01','hoge',5000)
- 表の定義に沿った値を記述することが必要
- ゼロなのかNullなのかも
更新
UPDATE 表名 SET 列名1 =’文字’ 列名2= 289 WHERE 条件(更新する対象を特定する)//条件を入れずに実行すると全レコードが更新されるので注意
削除
DELETE FROM 表名 WHERE 条件 //条件を書かずに実行するとレコードが全部消えるので注意
条件の書き方
項目= 50 //イコール 項目 > 50 //50より大きい 項目 < 50 //50より小さい 項目 >= 50 //50以上 項目 <= 50 //50以下 項目<> 50 //50ではない
-
Nullは特別なので要注意
- 項目=Nullは使えない
- 項目 is Null または 項目 is not Null
演算子
-
LIKE
% 文字列 _ 一文字 SELECT * FROM 家計簿 WHERE メモ LIKE '%1月%' //1月が入っているもの SELECT * FROM 家計簿 WHERE メモ LIKE '1月%' //1月から始まる SELECT * FROM 家計簿 WHERE メモ LIKE '第__期' //第35期はヒットするが第9期や第102期はヒットしない。
- between 5 and 9 //5~9
-
IN: どれかと一致(不一致)
項目 in('a','b','c') // a,b,c が選ばれる 項目 not in ('a','b','c') //a,b,cを除く全て
-
ANYとALL 数値の大小で判定
- 書式: WHERE 基本演算子 ANY (値1,値2,値3)
- 書式: WHERE 基本演算子 ALL (値1,値2,値3)
- 基本演算子は=,<,>,<>,>= ,<=
SELECT * FROM 家計簿 WHERE 出金額 in (1000,2000,3000) // 1000,2000,3000のいずれかだけが選ばれる 2500は選ばれない SELECT * FROM 家計簿 WHERE 出金額 <ANY (1000,2000,3000) // 出金額が3000未満は全て選ばれる 2500は選ばれる SELECT * FROM 家計簿 WHERE 出金額 <ALL (1000,2000,3000) // 出金額が1000未満は全て選ばれる 2500は選ばれない
条件の組み合わせ
- AND と OR で条件を組み合わせることもできる。カッコで優先順位を明示するとよい。 (項目 = 'a' or 項目 = 'b') and (項目b = 'x' or 項目b = 'y')
検索結果の加工
- SELECT だけで使われる
DISTINCT:重複の削除
SELECT DISTINCT 列名 FROM 表名
Excelの重複削除と同じと考えればOK
ORDER BY:結果のソート
SELECT 列名 FROM 表名 ORDER BY キー //全件を並べて出力 SELECT 列名 FROM 表名 WHERE 条件 ORDER BY キー //条件に合致するものを並べて出力:普通これを使う SELECT 列名 FROM 表名 WHERE 条件 ORDER BY キー DESC //降順オプション SELECT 列名 FROM 表名 ORDER BY キー, キー2 SELECT 列名 FROM 表名 ORDER BY 需要家コード , 金額 DESC// 需要家コードを昇順、金額を降順で並べる(昇順は各必要がない)
OFFSET /FETCH>LiMIT OFFSET
-
MySQL では offset rech は使えないので代わりに limit offset を使う
limit レコード数 offset 抜き取るレコードの位置( select 結果リストの上位から数えて。なので、 order by は必須)
P481 第5章
34
select 商品コード,単価, trunc(単価*0.95) as キャンペーン価格 from 商品 where 商品区分 = '9' order by 商品コード
35
update 注文 set クーポン割引料 = クーポン割引料 - 300 where 注文日 between '2022-03-12' and '2022-03-14' and クーポン割引料 is not null and 数量 >1
36
update 注文 set 数量 = 数量 -1 where 注文番号 = '202202250126' and 商品コード = 'W0156'
37
select 注文番号|| '-' ||注文枝番 as 注文番号・枝番 from 注文 where 注文番号 between '202110010001' and '202110319999'
38
select distinct case 商品区分 when '1' then '1:衣類' when '2' then '2:靴' when '3' then '3:雑貨' when '9' then '9:その他' end as 区分 from 商品 order by 区分
39
select 商品コード,商品名,単価, case when 単価 < 3000 then 'S' when 単価 < 10000 then 'M' else 'L' end as 販売価格ランク, case 商品区分 when '1' then '1:衣類' when '2' then '2:靴' when '3' then '3:雑貨' when '9' then '9:その他' end as 商品区分 from 商品 order by 単価, 商品コード
40
select 商品名,length(商品名) as 文字数 from 商品 where length(商品名) >= 10 order by 文字数
41 select 注文日,substring(注文番号,9,4) from 注文 order by 注文日 42
update 商品 set 商品コード = replace(商品コード,'M','E') where substring(商品コード,1,1) = 'M'
43
select substring(商品コード,2,4) from 商品 where cast(substring(商品コード,2,4) as int) between 1000 and 2000 order by 1
44
update 廃番商品 set 廃番日 current_Date where 商品コード ='S1990'
45
select 商品コード,商品名,単価, trunc(単価*0.7) as 値下げした単価 from 商品 where 単価 >= 10000 order by 1