0
0

【備忘録】SQL

Posted at

SQL

関数

MID

MID({対象の文字列}, {何文字目から}, {何文字分抽出するか})
文字列を抽出する関数

SELECT MID('123456789', 2, 2)
-> 23

TOP

SELECT TOP {何行} * FROM table
SQL結果のレコード数を指定できる関数
上から何行分出力するかを指定できる

SELECT TOP 3 * FROM table;

GETDATE

SELECT GETDATE()
現在の日時を取得する関数

SELECT * FROM table
WHERE start_date <= GETDATE();

DATETIME

SELECT DATETIME(GETDATE(), '%Y-%m-%d')
日付の出力形式を整形する関数

CONVERT

CONVERT({型名}, {対象文字列})
型変換を行う関数

CONVERT(NVARCHAR,100.00)

UNION

{SELECT文} UNION {SELECT文}
二つのSQL結果を縦につなげて1つの実行結果のように見せる関数

  • レコードが重複しない
  • 出力結果が同じテーブル構造でないといけない
SELECT * FROM table1
UNION
SELECT * FROM table2

CONCAT

CONCAT({対象文字列1}, {対象文字列2}, ....)
複数のカラムを結合して表示できる関数

  • NULLも結合できる("+"で結合した場合、すべてNULLになる)
SELECT CONCAT("hoge", NULL, "fuga")
-> hogefuga

ISNULL

ISNULL({対象}, {置き換え後の文字列})
対象がNULLの場合に置き換える関数

SELECT ISNULL(NULL, "test")
-> "test"

システム変数

@@ROWCOUNT

直前のSQLで影響を受けたレコード数を持つ変数
SELECT文で3行表示されれば3を持つし、UPDATEで5行更新したら5を持つ
レコードの存在チェックに使える

記法

JOINとEXISTSの使い分け

どちらも2つのテーブルをつなげて条件を付けることができる

  • JOINの場合
    • 結合される側のテーブルの同じレコードが複数できる
    • バリエーションをすべて見たかったらこっち
  • EXISTSの場合
    • 結合される側のテーブルは複製されない
    • 重複しない単純な種類数を見たかったらこっち

CASE文

  • 単純CASE式
    • 対象の1データに対して条件をかけて分岐させたいとき
CASE column
    WHEN '男' THEN 1
    WHEN '女' THEN 2
    ELSE 3
END
  • 検索CASE式
    • 条件によって使うデータを複数パターンで切り替えたいとき
CASE
    WHEN sale IS NOT NULL THEN sale_price
    WHEN tax IS NOT NULL THEN tax_price
    ELSE price
END

IF文

IF 条件1
BEGIN
    実行文1
END
ELSE IF 条件2
BEGIN
    実行文2
END
ELSE
BEGIN
    実行文3
END

変数

SQLも変数を使える

DEWCLARE @price INT(8)
SELECT @price = price FROM table

VARCHAR と NVARCHAR

特徴 サイズ Umicode
VARCHAR 可変長 8000 B -
NVARCHAR 可変長 8000文字
CHAR 固定長 8000 B -
NCHAR 固定長 8000文字
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0