So-net無料ブログ作成
検索選択

SQLの基本-演算子 [SQL]


SQLの演算子

SELECT及びWHERE句に指定することが可能な演算子

思いのほか便利な演算子が揃っています。

・数値及び日付の加減乗除演算

 優先順位

* 同一の優先順位にある演算子は左から順に計算

* カッコ内にある演算子は最初に計算

* 乗算、除算、剰余演算子の次に加算、減算を計算

結果
数値 + 数値 数値
日付 + 数値 日付
日付 + 期間 日付
数値 - 数値 数値
日付 - 数値 日付
日付 - 期間 日付
数値 - 日付 数値
数値 * 数値 数値
数値 / 数値 数値
数値 % 数値 余り
(SQL Server,MySQL,PostgreSQL)



・文字列の結合

文字列式1 || 文字列式2 = 文字列式1文字列式2 (Oracle,PostgreSQL)

文字列式1 + 文字列式2 = 文字列式1文字列式2 (SQL Server)

・単項演算子

+式

 式の符号を正する。

-式

 式の符号を負する。-(-2)は+2と評価されます。

~式

 式のビットを全て反転する。
 2進数の1の補数を得ます。

・ビット演算子

&,|,^,~<<,>>

ビット演算 意味
式1 & 式2 式1 ビット演算AND 式2
式1 | 式2 式1 ビット演算OR 式2
式1 ^ 式2 式1 ビット演算XOR 式2
式1 << 式2 式1を式2分左にビットシフト
式1 << 式2 式1を式2分左にビットシフト
式1 >> 式2 式1を式2分右にビットシフト
~式1 ビット演算NOT 式1



比較演算子

式1 比較演算子 式2

比較演算子

条件式 意味
= 等しい a='10'
列aの値が10と等しい
< 小さい a<'10'
列aの値が10より小さい
<= 以下 a<='10'
列aの値が10以下
> 大きい a>'10'
列aの値が10より大きい
>= 以上 a>='10'
列aの値が10以上
LIKE ワイルドカード a LIKE 'a%'
先頭の文字がa
a LIKE '%a'
最後文字がa
a LIKE 'a%b'
先頭の文字がaで最後の文字がb
ワイルドカードには「_」と「%」があり、 「_」は任意の1文字で、「%」は0文字以上の任意の文字列
BETWEEN 範囲指定 a BETWEEN '10' AND '20'
列aの値が10~20までの値
IS NULL NULLの検索 a IS NULL
列aに値がセットされていない(NULL)
IS NOT NULL 非NULLの検索 a IS NOT NULL
列aに値がセットされている
IN 複数の値を検索 a IN ('2','4','6')
列aの値が2,4,6のデータを検索
=とORで表現できるがINを使用した方がコストがかからないといわれている。
ANY、SOME 複数の値を検索 a = ANY ('2','4','6')
指定した値と比較演算子で一致したレコードを表示
INとは違い比較演算子が使用可能
・場合わけ
CASE WHEN 条件式1 THEN リターン式1
[WHEN 条件式2 THEN リターン式2 ...]
[ELSE リターン式3 ] END

CASE 条件式1 WHEN 値式1 THEN リターン式1
[WHEN 値式2 THEN リターン式2 ...]
[ELSE リターン式3 ] END

・複数の検索結果全てを取得
SELECT XXXXXXXXXXXXX FROM XXX UNION [ALL]
SELECT YYYYYYYYYYYYY FROM YYY

・複数の検索結果の共通部分を取得
(Oracle,PostgreSQL)
SELECT XXXXXXXXXXXXX FROM XXX INTERSECT
SELECT YYYYYYYYYYYYY FROM YYY

・複数の検索結果の差分を取得
(Oracle)
SELECT XXXXXXXXXXXXX FROM XXX MINUS
SELECT YYYYYYYYYYYYY FROM YYY

(PostgreSQL)
SELECT XXXXXXXXXXXXX FROM XXX EXCEPT [ALL]
SELECT YYYYYYYYYYYYY FROM YYY

・小計を集計する
(Oracle)
SELECT *列関数を含む* GROUP BY ROLLUP(列名1,[, 列名2 ...])
(SQL Server)
SELECT *列関数を含む* GROUP BY 列名1,[, 列名2 ...] WITH ROLLUP
・クロス集計する
(Oracle)
SELECT *列関数を含む* GROUP BY CUBE(列名1,[, 列名2 ...])
(SQL Server)
SELECT *列関数を含む* GROUP BY 列名1,[, 列名2 ...] WITH CUBE

・優先順位
演算の実行順序は演算子毎に優先度が有るので式の評価結果に大きな影響します。
同じ優先度の演算子は左から評価されますが、括弧が有る場合は括弧が優先的に評価されます。
演算子
+,- ,~ (単項演算し)
* (乗算)、/ (除算)、% (剰余)
+ (加算)、(+, || 連結)、- (減算)
>=,>,<,>=,<=,<>,!=, !>, !< (比較演算子)
^,&,| (ビット演算子)
NOT
AND
ALL、ANY、BETWEEN、IN、LIKE、OR
=

nice!(0)  コメント(0)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

おぼえがき on sqlserver2005 その4(坂葉菜月の徒然書き 2008-11-26 13:01)

SQLにおける論理演算において、 ANDとORは優先度が違う。 参考(http://a-programmer.blog.so-net.ne.jp/2007-11-10) まあ、意味を考えれば、もっともですがf^_^; ていうか基本ですよねぇ。。。。orz つーことで下二つはまった…[続く]

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

関連リンク

メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。