trdsql 簡単なSQL その2
Posted on:
検索条件
前回、列の並べ替え、抽出、行の並べ替えをしたので、今回は行の抽出です。 行を抽出するには、WHEREを付けて、検索条件を書きます。
前回と同じ例のファイルを使います。
trdsql -ih "SELECT id, \`name\` FROM header.csv WHERE id=1"
1,Orange
SQLのメインな機能ですね。検索条件を書くだけで、該当する行を出力できます。
AND, OR
AND や OR や ()括弧を使用することにより複雑な条件が書けます。
trdsql -ih "SELECT id, \`name\` FROM header.csv WHERE id='1' OR id='2'"
1,Orange
2,Melon
trdsql -ih "SELECT id, \`name\` FROM header.csv " "WHERE (id='1' OR id='2') AND \`name\`='Orange'"
1,Orange
前回にも書いたようにtrdsqlでは、CSVやLTSV、JSONの値をtext型として扱っています。そのため、「=」の条件で書いているときには、暗黙のCASTが効いて型をそれほど意識しなくても良いですが、範囲を指定するときには結果が変わってしまうので、CASTする必要があります。
trdsql -ih "SELECT id,\`name\` FROM header.csv " "WHERE CAST(id as int)>1"
2,Melon
3,Apple
SELECTを使用するときは、列の指定のところでCASTを使用して、そのCASTした列を指定して検索条件やORDER BYを書くことが出来ます。
その際には元の列名はCAST前の列を指しているので、AS 別名
を使用してCAST後の列名を使用します(CAST後の列名に元の名前を付けることは出来ます)。
trdsql -ih "SELECT CAST(id AS int) AS id,\`name\` FROM header.csv WHERE id>1"
2,Melon
3,Apple
IN
WHERE
の条件として、=
や ‘>’、<
の範囲指定以外にIN
句が使用できます。
複数の指定をORでつないで書いていたのをIN
句により簡潔に書くことができます。
trdsql -ih "SELECT * FROM header.csv WHERE id IN ('1','3')"
1,Orange
3,Apple
また、IN句の使い方として、列側を並べて書くことで、複数の列を一度に検索条件にできます。 例えば、idかnameに ‘Apple’がある行を検索できます。
trdsql -ih "SELECT * FROM header.csv WHERE 'Apple' IN (id,name)"
3,Apple