- eパウダ〜とは - New! - おべんきょう - おしゃべり - メンバーページ - お茶会(オフ情報) - ショッピング - リンク -
 

 SQL構文

  ● いわゆる覚え書き。自分が学んだことを忘れないように残しておこうと思います。

   ● 目次 ●

  ・ はじめに

  ・ SELECT〜FROM で単一列データを取り出すには

  ・ SELECT〜FROM で複数列データを取り出すには

  ・ AS句を使って列に別名をつけるには

  ・ WHERE句で条件を絞り込むには

  ・ 比較演算子一覧

  ・ 指定した文字列が含まれるかを調べるには (LIKE演算子)

  ・ 指定した文字列が含まれないかを調べるには (NOT LIKE演算子)

  ・ INNER JOIN

  ・ DISTINCT

  ・ DELETE

  ・ UPDATE

  ・ INSERT

  ・ 税抜きの価格を取り出し税込価格として取得するには

  ・ 列と列の演算結果を別名で表示するには

  ・ 列と列の連結を行うには

  ・ 列と文字列の連結を行うには

  ・ 平均値を取得するには(AVG)

  ・ 最大値を取得するには(MAX)

  ・ 最小値を取得するには(MIN)

  ・ 個数を取得するには(COUNT)

  ・ 合計値を取得するには(SUM)

  ・ CASE句で条件分岐するには

  ・ 日付を大小判断するには

  ・ 任意の日を指定するには(1日)

  ・ 任意の日を指定するには(2日以上)

  ・ 日付の要素を整数で取得するには(DATEPART関数)

  ・ datepart一覧

  ・ 月別リストを取得するには(CONVERT関数)

  ・ あとがき

 


 

  はじめに

   2004年冬から、SQLの勉強を始めました。

   またしても実践と言う名の勉強だから恐ろしいものです・・・(^o^; はは

 

  ご注意

  ※ Microsoft SQL Server 2000、および Microsoft MSDE上で実行しています


 

  SELECT〜FROM で単一列データを取り出すには

   ・テーブルからデータを取り出す構文

 

 

  SELECT

    列名

  FROM

    テーブル名

  ;

 

 

    例) SELECT * FROM Customer (Customerテーブルからすべての列データを取得)

    例) SELECT NAME FROM Customer (CustomerテーブルからNAME列のデータを取得)

 

 

  SELECT〜FROM で複数列データを取り出すには

   ・複数の列を取り出す構文 (列をカンマで区切る。最後尾にはカンマはつけない)

 

 

  SELECT

    列名

   列名

  FROM

    テーブル名

  ;

 

    例) SELECT ID, NAME FROM Customer (Customerテーブルから ID と NAME 列のデータを取得)


 

  AS句を使って列に別名をつけるには

   ・列に別名をつける構文

 

 

  SELECT

    列名  AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT NAME AS 名前 FROM Customer (NAME列に名前と言う別名をつける)

   ※同じ列を、違う別名によって区別することもできる。

   ※RDBMSの種類によってはAS句が使えないらしい。SQL Server 2000は使える。

   ※列名に日本語を使用するとエラーになる事が。一般的にはダブルクォーテーション " でくくって回避
    するそうですが、SQL Serverではシングルクォーテーション ' でくくって回避する。

 

 

  WHERE句で条件を絞り込むには

   ・WHERE句で、条件に合うレコードだけを取り出す

 

 

  SELECT

    列名 ( 複数列も可 )

  FROM

    テーブル名

  WHERE

    条件

  ;

 

 

    例) SELECT * FROM Customers WHERE CustomerID = 'PARIS' (CustomerID が PARISのレコードを取得)

     ※ 文字列型を比較する場合は対象文字列をシングルクォーテーションで囲む。( SQL Server の場合 )

   ● ANDOR を使うことによって、複数の条件組み合わせることも出来ます。●

    例) SELECT COUNT (*) FROM Customers WHERE City = 'Paris' AND CustomerID = 'PARIS'
       ( City が Prisで、かつ CustomerID が PARIS と言う条件に合致するレコードの件数を取得 )

    例) SELECT * FROM Customers WHERE City ='Paris' OR City = 'London'
       ( City が Paris または London と言う条件に合致するレコードを取得 )

    比較演算子一覧へ


 

  比較演算子一覧

   ・WHERE句で条件を指定する際に利用できる代表的な比較演算子

 
演算子 使用例 意味
 =  x = y  xとyが等しい場合にTRUEを返す
 <>  x <> y  xとyが等しくない場合にTRUEを返す
 <  x < y  xがyよりも小さい場合にTRUEを返す
 <=  x <= y  xがy以下の場合にTRUEを返す
 >  x > y  xがyよりも大きい場合にTRUEを返す
 >=  x >= y  xがy以上の場合にTRUEを返す
 IN  x IN y  xがyの中のいずれかの場合にTRUEを返す
 NOT IN  x NOT IN y  xがyの中のいずれでもない場合にTRUEを返す
 BETWEEN  z BETWEEN x AND y  zがx以上y以下の範囲に含まれる場合にTRUEを返す
 NOT BETWEEN   z NOT BETWEEN x AND y  zがx以上y以下の範囲に含まれない場合にTRUEを返す
 EXISTS  x EXISTS y

 サブクエリ(y)によって行が1行以上戻される場合に
 TRUEを返す

 NOT EXISTS  x NOT EXISTS y  サブクエリ(y)によって行が1行も戻されない場合に
 TRUEを返す
 LIKE  x LIKE y  xが、パターンyと一致する場合にTRUEを返す
 NOT LIKE  x NOT LIKE y  xが、パターンyと一致しない場合にTRUEを返す
 IS NULL  x IS NULL  xがNULLの場合にTRUEを返す
 IS NOT NULL  x IS NOT NULL  xがNULLではない場合にTRUEを返す

  参考文献)SQL 書き方ドリル(羽生章洋さん著)


 

  指定した文字列が含まれるかを調べるには (LIKE演算子)

   LIKE演算子を使って指定した文字列が含まれるかどうかを調べることができます。

   任意の文字列の場合は % , 任意の1文字の場合は _ を使って調べられます。

    例) SELECT * FROM Company WHERE CompanyName LIKE '%有限会社%';
       (会社名に、有限会社と言う文字列が含まれるかを調べる)

    例) SELECT * FROM Members WHERE FamilyName LIKE '_木';
       (一文字 + 木 がつく名字かを
調べる)
       ○ 鈴木、大木 × 佐々木


 

  指定した文字列が含まれないかを調べるには (NOT LIKE演算子)

   NOT LIKE演算子を使って指定した文字列が含まれないかを調べることができます。

   任意の文字列の場合は % , 任意の1文字の場合は _ を使って調べられます。

    例) SELECT * FROM Company WHERE CompanyName NOT LIKE '%有限%';
       (会社名に、有限と言う文字列が含まれないかを調べる)

    例) SELECT * FROM Members WHERE FamilyName NOT LIKE '_木';
       (一文字 + 木 がつく名字かを
調べる)
       ○ 佐々木 × 鈴木、大木


 

  INNER JOIN

    テーブルを結合

    例) SELECT * FROM Customer INNER JOIN MasterDB

 


 

  DISTINCT

    同じ値を一つにまとめて表示

    例) SELECT DISTINCT UserID FROM Customer

 


 

  DELETE

    DELETE FROM <テーブル名> WHERE <削除するレコードの条件>

 


 

  UPDATE

    UPDATE <テーブル名> SET <列名> = '値' WHERE <更新するレコードの条件>

 


 

  INSERT

    INSERT <テーブル名> <列名> VALUES <追加するデータ>

 


 

  税抜きの価格を取り出し税込価格として取得するには

   ・列に対して演算を行い別名をつける構文

 

 

  SELECT

    列名 演算子 値 AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT Price * 1.05 AS 税込価格 FROM Product (Priceに消費税率をかけて税込みと言う別名をつける)


 

  列と列の演算結果を別名で表示するには

   ・列同士で演算を行い別名をつける構文

 

 

  SELECT

    列名 演算子 列名 AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT Price * Amount AS 合計価格 FROM Product (PriceにAmountをかけて合計価格と言う別名をつける)


 

  列と列の連結を行うには

   ・列と列の連結を行い、別名をつける構文

 

 

  SELECT

    列名 + 列名 AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT FamilyName + Name AS 宛名 FROM Customers (名字と名前を連結して宛名と言う別名をつける)

    ※ + は SQL Serverの場合。(その他の場合は || を使うらしい)


 

  列と文字列の連結を行うには

   ・列と文字列の連結を行い、別名をつける構文

 

 

  SELECT

    列名 + 文字列 AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT FamilyName + '様' AS お客様名字 FROM Customers (名字と様を連結してお客様名という別名をつける)

    ※ + は SQL Serverの場合。(その他の場合は || を使うらしい)


 

  平均値を取得するには(AVG)

   ・平均値を取得する構文

 

 

  SELECT

    AVG( 列名 または 演算式 ) AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT AVG(Age) AS 平均年齢 FROM Members (メンバーの平均年齢を取得し、平均年齢という別名をつける)

    ※ 指定できる列は数値型の列のみ。

    ※ 集合関数は複数の行の値をまとめて一つの結果を得ることができる


 

  最大値を取得するには(MAX)

   ・最大値を取得する構文

 

 

  SELECT

    MAX( 列名 または 演算式 ) AS  別名

  FROM

    テーブル名

  ;

 


    例) SELECT MAX(Age) AS 最高年齢 FROM Members (メンバーの年齢から最大値を取得し、最高年齢という別名をつける)

    ※ 集合関数は複数の行の値をまとめて一つの結果を得ることができる


 

  最小値を取得するには(MIN)

   ・最大値を取得する構文

 

  SELECT

    MIN( 列名 または 演算式 ) AS  別名

  FROM

    テーブル名

  ;

    例) SELECT MIN(Age) AS 最低年齢 FROM Members (メンバーの年齢から最小値を取得し、最低年齢と言う別名をつける)

    ※ 集合関数は複数の行の値をまとめて一つの結果を得ることができる


 

  個数を取得するには(COUNT)

   ・個数を取得する構文

 

  SELECT

    COUNT( 列名 または * ) AS  別名

  FROM

    テーブル名

  ;

    例) SELECT COUNT (*) AS メンバー人数 FROM Members (メンバー数(=レコード数)を取得して、メンバー人数と言う別名をつける)

    ※ 集合関数は複数の行の値をまとめて一つの結果を得ることができる


 

  合計値を取得するには(SUM)

   ・合計値を取得する構文

 

 

  SELECT

    SUM( 列名 または 演算式 ) AS  別名

  FROM

    テーブル名

  ;

 

    例) SELECT SUM(Price) AS 価格合計 FROM Products (商品価格の合計を取得し、価格合計という別名をつける)

    ※ 指定できる列は数値型の列のみ。

    ※ 集合関数は複数の行の値をまとめて一つの結果を得ることができる


 

  CASE句で条件分岐するには

   ・CASE句を使って条件を分岐する構文

 

 

  SELECT

   (列名 AS 別名 ,) ←なくてもOK

    CASE

    WHEN 条件 THEN 返値

   WHEN 条件 THEN 返値) ←なくてもOK

   ELSE 返値) ←なくてもOK

    END

  FROM

    テーブル名

  ;

 

    例) SELECT
        CASE
         WHEN Class = 'にじぐみ' THEN '年長さん'
         WHEN Class = 'ぞうぐみ' THEN '年少さん'
         ELSE '保育クラス' AS 年齢層
       FROM Students
       (クラス名で年長さんか年少さんを取得し、年齢層という別名をつける)

    例) SELECT
        ClassName AS クラス名
       ,

        CASE
         WHEN Class = 'にじぐみ' THEN '年長さん'
         WHEN Class = 'ぞうぐみ' THEN '年少さん'
         ELSE '保育クラス' AS 年齢層
       FROM Students
       (結果は、クラス名、年齢層となる)


 

  日付を大小判断するには

    例) SELECT * FROM DB WHERE SAMPLE_DATE > '2004/08/06';

   シングルクォーテーションで囲った日付と>や<や>=や<=を使って条件を指定することができます。

   記事作成日 : 2004/08/06

   記事最終更新日 : まだない。


 

  任意の日を指定するには(1日)

    例) SELECT * FROM DB WHERE SAMPLE_DATE >= '2005/02/16' AND SAMPLE_DATE < '2005/02/17';

   シングルクォーテーションで囲った日付と>や<や>=や<=を使って条件を指定することができます。

   学習先 : SQL侍さんによるアドバイス。

   記事作成日 : 2005/02/16

   記事最終更新日 : まだない。
   


 

  任意の日を指定するには(2日以上)

    例) SELECT * FROM DB WHERE SAMPLE_DATE BETWEEN '2005/02/16' AND '2005/02/17 23:59:59';

   BETWEEN を使って範囲を指定することができます。

   学習先 : SQL侍さんによるアドバイス。

   記事作成日 : 2005/02/16

   記事最終更新日 : 2005/03/10 SQL侍さんによるアドバイスにより一部修正。


 

  日付の要素を整数で取得するには(DATEPART関数)

   ・指定された日付の、特定の日付の要素を整数で取得する

 

  SELECT

    DATEPART( datepart, date ) AS  別名

  FROM

    テーブル名

  ;

    例) SELECT DATEPART(month, BirthDate) AS 誕生日月 FROM Employees (誕生日月を整数で取得し、誕生日月と言う別名をつける)

 

    ● DATEPART関数について ●

    
datepart : 日付の要素 → datepart一覧
    date : datetime型、または smalldatetime型の列、またはそれを返す式。
    戻り値:int型


 

  datepart一覧

   ・日付の要素 (datepart) と Microsoft SQL Server で認識される省略形

 
datepart 省略形

 year

 yy, yyyy
 quarter  qq, q
 month  mm, m
 dayofyear  dy, y
 day  dd, d
 week  wk, ww
 weekday  dw
 hour  hh
 minute  mi, n
 second  ss, s
 millisecond  ms

  参考文献)SQL Server Books Online


 

  月別リストを取得するには(CONVERT関数)

   ・指定した年月のデータを、新しい順に(最近のものが上にくるように)取得する

 

  SELECT

  列名 AS  別名

  FROM

    テーブル名

  WHERE

    CONVERT(varchar, datepart(yyyy, 列名(datetime型)) +

    CONVERT(varchar, datepart(mm, 列名(datetime型))

    LIKE '200512'

  ORDER BY 列名(datetime型) DESC

  ;

    例) SELECT NAME AS 名前 FROM Members WHERE CONVERT(varchar, datepart(yyyy, BIRTHDAY)) +

        CONVERT(varchar, datepart(mm, BIRTHDAY)) LIKE '200512'

        ORDER BY 列名(datetime型) DESC

    (誕生日月の人の名前をリストアップする)


 

  あとがき

   内容的におかしいところ、見づらい個所(色使い)などございましたらご指摘ください。

   同じようにMicrosoft SQL Server を利用されている方からの苦労話も大歓迎です。

 

     モンドリィの自習室 - トップへ - SQL関連Tipsへ