データの制限およびソート
本日もSQL基礎の勉強。この分野は割と得意だったので、
結構割愛しているところ多いですが、
自分の備忘録程度の記事なので、悪しからず。。
Order by 句
SELECT文の実行結果のソートにはOrder by句を使用します。
ORDER BY句では、ソートする項目として、
列別名やSELECT句に指定されている順番(数値)を指定できます。
なお、SELECT文の中で列別名を使用できるのはORDER BY句だけです。
値にNULLが含まれる場合、ソートするとNULLは最大値としてソートされます。
--▽通常の記載
SELECT * FROM '表名1' WHERE '条件1'
ORDER BY '列名1' [ASC|DESC][, '列名2' [ASC|DESC]...];
--▽NULL値を最後に持っていきたいとき
ORDER BY '列名1' DESC NULLS LAST;
ソートカラムはテーブルに存在していれば、
SELECT句に記載していなくとも使用することができます。
昇順 | 降順 |
---|---|
ASC(省略可) | DESC(省略不可) |
SELECT句にて、大文字と小文字を区別するためなどに
二重引用符(")で囲んだ列別名を使用している場合は、
ORDER BY句でも同様に列別名を二重引用符(")で囲む必要があります。
(※「SELECT name "na"」とか書いたら「Order by "na"」で書くということ)
ワイルドカード
文字検索の際に、「藤〇さんの人数を知りたい」というような
一部が明確に決まっているのに対して、
他部分が明確じゃない文字列等を検索にワイルドカードを使用します。
ワイルドカードの種類は2種類です。
% | _ |
---|---|
0文字以上の任意の文字列 | 1文字の任意の文字列 |
上記で述べたような「藤〇さん」で解説すると、
・[藤%] の場合、藤さんも藤本さんも、藤井寺さんも表示されます。
・[藤_] の場合、藤本さんは同様に表示されますが藤井寺さんと藤さんは表示されません。
ワイルドカードは組合せて、実行することも可能です。
例えば、山岸、山、大山野、石山、山本屋、天王山の6人を登録していたとすると、
各組合せ結果は、下記の通りとなります。
組合せ | 結果 |
---|---|
_山 | 石山 |
山_ | 山岸 |
%山 | 山、石山、天王山 |
山% | 山、山岸、山本屋 |
_山_ | 大山野 |
_山% | 石山、大山野 |
%山_ | 山岸、大山野 |
%山% | 山、山岸、石山、山本屋、大山野、天王山 |
また、検索の際の文字パターンに""が含まれている場合、
ESCAPEオプションを指定して「」をリテラルとして扱う必要があります。
(名前を「名字_名前」形式で登録するような場合、ワイルドカードが値に含まれてしまう)
IN演算子
INは検索の際に、含まれるか否かで用いられます。
WHERE '列名1' IN ('条件');
IN演算子は、SQL文の実行時に内部的に
OR演算子による条件のセットとして処理されるので、
実行時のパフォーマンスに違いはありません。
LIKE演算子
LIKE演算子を使用すると、指定した文字パターンに一致した行を検索できます。
文字パターンには、「_」や、「%」といった、ワイルドカードを利用できます。
ワイルドカードをリテラルの一部として使用する場合は、
ESCAPEオプションを指定してワイルドカードをリテラルとして扱えるようにしなければなりません。
置換変数
SQL PlusやSQL Developerなどのツールでは、置換変数を利用できます。
置換変数を利用すると、WHERE句の条件などに指定する値を、
SQL文の中に直接記述するのではなく、実行時に値を指定できるようになります。
置換変数には「&置換変数」と「&&置換変数」の2種類があり、
「&置換変数」はSQL文実行後に変数の値が破棄されますが、
「&&置換変数」はセッションを切断もしくはUNDEFINEコマンドで破棄するまで値が保持されます。
例えば、下記のSQLようなSQLを組んだ場合、
SELECT * FROM &&1 WHERE '列名1' = '&2';
続けて2回目にこのSQL文を実行すると2のみに値を入力するよう促されます。
なお、置換変数はWHERE句だけではなく、SQL文の全ての箇所で使用できます。
次回
次回は副問合せのところのまとめをしようかなと。
今日は、とても寒くて、乾燥しているので、いつもより加湿器に頑張ってほしい。。。
唇を舐める癖がやめられず、今日も裂けまくりで、
リップクリームを塗るもののやっぱり簡単には治らない。。。
随時更新中@あんず飴