SQLの基礎

当SQLはMicrosoft SQL Serverの説明です、他のデータベースでは動作しない場合があります。
また、使用例はIPROGRAMの規約を適用しています。
IPROGRAMの規約(抜粋)
◎全ての名称は半角の英小文字と数字と'_'とする。(海外対応の場合)
◎テーブル名は25文字以内とし最後に必ず'_table'を付ける。
◎データ名は先頭に'd_'を必ず付けること。
◎z_del_time(行を削除した時間)がNULL以外の時は削除済み行とみなす。
◎マスターデータベース(開発支援で作ったテーブル)上のテーブルの先頭に'?_m?'(Ver1は'm.')を付けること。
  1. データベースの基本

  2. データベースに登録されるデータはそれぞれテーブルを単位として格納されます。
    テーブルは行と列の表で表現できます、列はそれぞれのデータ名(列名)を意味し、行は1件のデータを意味します。
    例: 商品コードテーブル(?_m?syouhin_code_table)
    商品コード(d_syouhin_code)商品名(d_syouhin_mei)単価(d_tanka)削除時間(z_del_time)
    AAAAAAAAAA鉛筆50NULL
    BBBBBBBBBBノート30NULL
    例: 仕入れ実績テーブル(?_m?siire_zisseki_table)
    伝票NO.(d_denpyou_no)商品コード(d_syouhin_code)仕入れ日(d_siire_bi)数量(d_suuryou)削除時間(z_del_time)
    1AAAAAAAAAA1997-07-231500NULL
    2BBBBBBBBBB1997-07-242000NULL
    3AAAAAAAAAA1997-07-271000NULL

  3. テーブルの行の取り出し方法
  4. ([...]内は省略可能の意味です)
    select [distinct] 式,...
    [from 名 [別名] [結合 名 [別名][on 条件]],...]
    [where 条件]
    [group by 式,...]
    [having 条件]
    [order by 式 [desc],...]
    ☆distinctは一意な行のみ取得されます。
    ☆式はCASE式も記入できます。(式,CASE式は下記)
    ☆fromは使用するテーブル名やビユー名を指定します。
    、又テーブル同士を結合する事もできます。(結合は下記)
    ☆別名を指定すると別名.列名で列を一意に指定できます。
    ☆whereは取得する行を制限する条件を指定します。(条件は下記)
    ☆group byは集計のキーを指定します。
    、又集計関数が含まれている場合は各の集計値も返します。
    ☆havingは集計関数に対し制限する条件を指定します。
    ☆order byは行の取得の順番を指定します。
    ☆descは大きい順を指定します。

  5. 単純な行の取り出し方法
  6. select 式,... from テーブル名 order by 式[desc],...
    ☆selectの次の式に取り出したいデータ名を","で区切り記入します。
    ☆fromの次にテーブル名を記入します。
    ☆order byの次に表示したいデータの順序を","で区切り記入します。
    (大きい順の場合はdescを記入します)
    (テーブルの格納順序は特に決められていないのでorder byを必ず記入します)
    例: select d_denpyou_no,d_syouhin_code,d_siire_bi,d_suuryou from ?_m?siire_zisseki_table order by d_denpyou_no

  7. 同じ内容の行を取り出さない方法
  8. select distinct 式,... from テーブル名 order by 式,...
    ☆selectの次にdistinctを記入します。
    例: select distinct d_syouhin_code from ?_m?siire_zisseki_table order by d_syouhin_code

  9. 条件に合う行を取り出す方法
  10. select 式,... from テーブル名 where 条件 order by 式,...
    ☆whereの次ぎに条件を記入します。
    例: select d_denpyou_no,d_syouhin_code,d_siire_bi,d_suuryou from ?_m?siire_zisseki_table where d_denpyou_no='2' and z_del_time is null order by d_denpyou_no

  11. 数量等を合計する方法
  12. select 式,sum(式)... from テーブル名 where 条件 group by 式,...
    ☆group byの次ぎに合計のキーを記入します。
    ☆sumの付かない式のデータ名はgroup by以下になければなりません。
    ☆sum(合計)以外にcount(行数),min(最小値),max(最大値),avg(平均値)があります。
    例: select d_syouhin_code,sum(d_suuryou) from ?_m?siire_zisseki_table where z_del_time is null group by d_syouhin_code

  13. 式の記入方法
  14. ◎数値や文字列を指定できます。(文字列は"'"で囲って下さい)
    例:123.45 : ’ABCD’
    ◎データ名(列名)を指定できます。
    例:d_syouhin_code
    ◎関数を指定できます。(関数は下記)
    ◎数値は算術演算子(+,-,*=乗算,/=除算)を使用できます。
    例:d_suuryou*d_tanka
    ◎文字列は+記号で結合できます。
    例:d_syouhin_code+'('+d_syouhin_mei+')'
    ◎1つの値を返すサブクエリーを指定できます。(サブクエリーは下記)
    ◎CASE式を指定できます。(CASE式は下記)

  15. CASE式の記入方法
  16. ◎単純CASE式の場合([..]内は省略可能の意味です)
    case 式 when 式 then 式 [when 式 then 式 ...] [else 式] end
    ☆caseの式にwhenの式が一致した時thenの式を返します。
    ◎検索CASE式の場合
    case when 条件 then 式 [when 条件 then 式 ...] [else 式] end
    ☆whenの条件が一致した時thenの式を返します。
    ◎CASE関連の関数。
    coalesce(式、式、...) 最初のNULL以外の式を返します。
    nullif(式1、式2) 式1と式2が等しい時NULLを以外は式1を返します。

  17. 条件の記入方法
  18. ◎式 比較演算子 式 (比較演算子,=,>,<,>=,<=,<>)
    ◎式 is [not] null (ヌル値の判定)
    ◎[not] exists サブクエリー (サブクエリーに存在するかの判定)
    ◎式 [not] in (定数又は列名,...) (一つと一致するかの判定)
    ◎式 [not] in (サブクエリー) (サブクエリーの一つと一致するかの判定)
    (注意:サブクエリーのデータが多い時は遅いのでexistsを使用する)
    ◎式 [not] like '文字列' (ワイルドカード文字によるパターン照合)
    ◎andで2つの条件の論理積を指定できます。
    ◎orで2つの条件の論理和を指定できます。
    ◎notで条件を否定できます。
    ◎(,)でグループ分けできます。

  19. 関数の記入方法
  20. ◎集計関数
    avg(列)........平均値を返します。
    count(列).......NULLでない値の行数を返します。
    count(*)........NULL値も含むすべての行数を返します。
    max(列).........最大値を返します。
    min(列).........最小値を返します。
    sum(列).........合計値を返します。
    ◎CONVERT関数
    convert(データ型,列[,スタイル])
    ☆データ型
    char(文字数)............文字を指定します。
    datetime................日付けと時刻を指定します。
    decimal(桁数,少数).....真数を指定します。
    float...................概数を指定します。
    int.....................整数を指定します。
    ☆スタイル(日付け時刻の変換方法を指定します、下記は一部分です)
    112......yyyymmdd の出力になります。(ISO)
    114......hh:mi:ss:mmmm の出力になります。
    ◎日付け関数
    dateadd(パラメータ,数値,日付け).....日付けの計算をします。
    datepart(パラメータ,日付け).........日付けの要素を整数で返します
    ☆パラメータ
    yy.......年.....1753-999
    mm.......月.....1-12
    dd.......日.....1-31
    dw.......曜日...1-7(日-土)
    hh.......時.....0-23
    mi.......分.....0-59
    ss.......秒.....0-59
    ms.......ミリ秒.0-999
    ◎数学関数(一部分掲載)
    pi()......................3.14...を返します。
    power(数値A, 数値B)......数値Aの数値B乗を返します。
    round(数値,少数桁位置)..四捨五入します。
    sqrt(数値)................平方根を返します。
    ◎文字関数(一部分掲載)
    datalength(文字).........文字の実際の長さを返します。
    (注意:char()の列の長さを常に同じなのでrtrim()で右空白を取って下さい)
    lower(文字)..............小文字変換します。
    ltrim(文字)...............先行空白を削除します。
    rtrim(文字)..............後続空白を削除します。
    substring(文字,開始位置、長さ)..文字列の一部を返します。
    upper(文字)..............大文字変換します。

  21. サブクエリーの説明
  22. ◎基本的にはselectと同じですが上位の列名も使用できます。
    ◎全ての機能がつかえるわけではありません。(制限あり)

  23. ワイルドカード文字の説明
  24. %..................0個以上の任意の文字列。
    _(アンダーライン).任意の1文字。
    [].................指定した範囲内の1文字(A-CはA,B,C)
    [^]................指定した範囲以外の1文字。

  25. テーブルの結合の方法
  26. ◎テーブルを複数結合することが出来ます。
    from 名 [別名] [結合 名 [別名][on 条件]],...]
    ☆別名を指定すると別名.列名で列を一意に指定できます。
    ☆結合は次の指定が出来ます。
    cross join..2つののクロス結合です。
    (注意:on以下の条件は指定できません)
    inner.......全ての内部行を返します、不一致行は破棄します。
    left [outer]...左外部行を返します、無い列はNULLを返します。
    right [outer]..右外部行を返します、無い列はNULLを返します。
    full [outer]..条件に合わない行も返します。
    例:select zisseki.d_syouhin_code,d_suuryou*d_tanka from ?_m?siire_zisseki_table zisseki left join ?_m? syouhin_code_table code on zisseki.d_syouhin_code=code.d_syouhin_code

  27. 行を追加する方法
  28. insert into テーブル名 (列名,...) valuse(式,...)
    insert into テーブル名 (列名,...) select .....

  29. 行を変更する方法
  30. update テーブル名 set 列名=式,... [from テーブル名,...] where 条件
    ☆fromにより別のの列名を式で使用できます。
    ☆条件を記入しないとすべての行が処理されるので注意下さい。

  31. 行を削除する方法
  32. delete form テーブル名 where 条件
    ☆条件を記入しないとすべての行が削除されるので注意下さい。
    ☆IPROGRAMではワークデータベース上のテーブルのみ行を削除できます。

  33. テーブルを作る方法(作る許可がないと作れません)
  34. create table テーブル名 (列名 データ型,...)
    ☆IPROGRAMではワークデータベース上のテーブルのみ作れます、具体的にはテーブル名の先頭を?_temp_table?にして作ります。
    ☆ワークデータでないマスターデータベース上のテーブルは、開発支援ツールで作ります。

  35. テーブル自体を削除する方法
  36. drop table テーブル名
    ☆IPROGRAMではワークデータベース上のテーブルのみテーブル自体を削除できます。

以上。

All Rights Reserved, Copyright (C) 2002-2004 Nobumichi Harasawa.