SQL

仕事で使えるSQLコマンド一覧



一般的に使うSQLのコマンドの一覧になります。

仕事の都合上、HiRDB / Oracle のSQLコマンドを載せています。
他のRDBでも利用できるコマンドが多くあるため、ご活用ください。

項目/説明 SQL 
参照#構文
SELECT * FROM テーブル名 WHERE 条件式 ; 
#実行例
SELECT * FROM USER_LIST WHERE name = 'miya' ; 
更新#構文
UPDATE テーブル名 SET NAME = '変えたい値' WHERE 更新対象の条件式 ; 
#実行例
UPDATE USER_LIST SET NAME = 'MIYAMON' WHERE NAME = 'MIYA'; 
削除 #構文
DELETE FROM テーブル名 WHERE 条件式; 
#実行例
DELETE FROM USER_LIST WHERE NAME = 'MIYA'; 
追加 (値を指定)#構文
INSERT INTO テーブル名 VALUES ('','','') ;
#実行例
INSERT INTO USER_LIST VALUES('001','MIYA','2019-06-19 00:00:00') ;
INSERT文のVALUESの値にSELECTの結果を使う。 INSERT INTO テーブル名 (SELECT文) 
スキーマの作成 GRANT DBA TO スキーマ名 IDENTIFIED BY パスワード; 
CREATE SCHEMA AUTHORIZATION スキーマ名; 
スキーマ権限付与 
(作成したスキーマAから、別のスキーマBのテーブルを参照したい場合) 
スキーマBで実施 
GRANT SELECT ON スキーマB.テーブル名 TO スキーマA; 
スキーマAで接続確認 
SELECT COUNT(*) FROM スキーマA.テーブル ; 
→参照できれば成功 
カラム名一覧を見たいとき ※HiRDBの場合
COLUMNS テーブル名;
※Oracleの場合
SELECT
OWNER
,TABLE_NAME
,COLUMN_NAME
,COLUMN_ID
FROM
ALL_TAB_COLUMNS
WHERE
TABLE_NAME = 'テーブル名'
ORDER BY
COLUMN_ID;
テーブル一覧を見たいとき ※HiRDBの場合
TABLES;
※Oracleの場合
SELECT TABLE_NAME FROM USER_TABLES ;
テーブルの主キーやTable IDを知りたいとき tableinf テーブル名; 
プロシージャのソースが見たいとき ※HiRDBの場合
select * from master.sql_routines where ROUTINE_NAME = 'プロシージャ名' ;
※Oracleの場合
select text from user_source where name = 'プロシージャ名' order by line;
トリガーが適用されているか見たい時 SELECT * FROM master.SQL_TRIGGER_DEF_SOURCE WHERE TRIGGER_NAME='トリガ名' ; 
トリガーの適用日等を調べる時 SELECT * FROM master.SQL_TRIGGERS WHERE TRIGGER_NAME='トリガ名' ; 
トリガー、プロシージャ、テーブル作成等の後に行うおまじない。 ALTER ROUTINE; 
プロシージャ一覧(ルーチン情報)を見たい時 routines; 
とあるテーブルのとあるカラムが設定の定義をスキーマ毎に表示して確認 select * from master.sql_columns where TABLE_NAME='★テーブル名' and column_name='★カラム名' ; 
ルーチン定義情報 
(プロシージャ等の定義を参照する。SQLエグゼキュータより実行可能) 
select ROUTINE_NAME,SPECIFIC_NAME,ROUTINE_VALID from master.sql_routines where ROUTINE_NAME = 'プロシージャ名' ; 
インデックス確認 ※HiRDBの場合
select * from master.SQL_INDEX_COLINF where TABLE_NAME = 'インデックス名' order by INDEX_ID,INDEX_ORDER ;
※Oracleの場合
SELECT * FROM USER_INDEXES WHERE INDEX_NAME = 'インデックス名';
エラーが発生したテーブルを知りたい時 select * from master.sql_indexes where index_id = 'インデックスナンバー' ; 
テーブルにカラム追加 構文:ALTER TABLE テーブル名 ADD 追加したいカラム名 型 ; 
例文:ALTER TABLE URIAGE ADD NEW_AAA CHAR(1) ; 
テーブルのカラム削除 構文:ALTER TABLE テーブル名 DROP カラム名 WITH PROGRAM ; 
例文:ALTER TABLE URIAGE DROP NEW_AAA WITH PROGRAM ; 
timestamp型をカットしてDATE形式で表示 
日付毎にカウントしたい場合に便利。
SELECT SUBSTR(char(カラム名(TIMESTAMP型)),1,10) FROM テーブル名 ;
# 2019-01-01 12:01:01  ⇒ 2019-01-01 で表示される。
timestamp型をカットしてDATE形式で表示 して、日付毎にカウントselect VARCHAR_FORMAT(TIMESTAMP(CHAR(カラム名[TIMESTAMP型])),'YYYY-MM-DD'),count(*)
from テーブル名
group by VARCHAR_FORMAT(TIMESTAMP(CHAR(カラム名[TIMESTAMP型])),'YYYY-MM-DD') ;
DATE型+指定した日数 ※HiRDBの場合
SELECT (DATE(CURRENT_DATE) - 7 DAY) FROM ~
※Oracleの場合
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD')-9 FROM ~
現在日時-9時間したい場合(GMTをJSTに変換する時に使用) ※HiRDBの場合
TIMESTAMP(ADD_INTERVAL(VARCHAR_FORMAT(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH:MI:SS'), -00000000090000))
※Oracleの場合
SYSDATE - 9/24
置換(指定のカラムを置換して表示する) REPLACE SELECT REPLACE('イヌヌーピー', 'イヌ', 'ス') 
→結果がスヌーピーになる!! 
文字列式(16進数)の確認 SELECT HEX(カラム名) FROM テーブル名 ; 
オートコミットのオンオフコミットオフ 
set auto commit off; 

ロールバック 
rollback; 

コミットオン 
set auto commit on; 

※DBをロックする方法 末尾に「 with exclusive lock;」と加える 
select * from テーブル名 where カラム名=値' with exclusive lock; 
空文字だった場合、NULLと表示するSQL文 : INSERT用データ作成のときなどにやくにたつ select CASE WHEN MOD_USERID IS NULL THEN 'NULL' ELSE MOD_USERID END from テーブル名 where  カラム名=値 ; 
カラムの値によって、表示する値を置き換える。SELECT  SUM(popularity),  
CASE pre_name 
WHEN '徳島県' THEN '四国' 
WHEN '香川県' THEN '四国' 
WHEN '愛媛県' THEN '四国' 
WHEN '高知県' THEN '四国' 
WHEN '福岡県' THEN '九州' 
WHEN '佐賀県' THEN '九州' 
WHEN '長崎県' THEN '九州' 
WHEN '熊本県' THEN '九州' 
WHEN '大分県' THEN '九州' 
ELSE 'その他' END 
  FROM Table_A 
CASEで条件指定する場合   CASE WHEN PM.PASSWORD_EXPIRE_TSTAMP > CURRENT_TIMESTAMP 
   THEN '1' 
   ELSE '0' 
  END PASSWORD_EXPIRE_FLG 
パージ文:テーブルのレコードを全て削除、領域も解放してくれるため全削除はDELETEではなくこっちを使うべき。 PURGE TABLE テーブル名; 
バイト数で検索 select * from テーブル名 where length(カラム名) > 8 ; 
TABLE1にあって、TABLE2にないものを出す。 
SELECT ITEM1 FROM TABLE1 
EXCEPT 
SELECT ITEM1 FROM TABLE2 
TESTTABLE1のITEM1にはデータとして1,2,3とした行を持っており、 
TESTTABLE2のITEM1にはデータとして2,4,6とした行を持っている場合 

SELECT ITEM1 FROM TESTTABLE1 
EXCEPT 
SELECT ITEM1 FROM TESTTABLE2 

結果 
1,3を取得 
メールアドレスのローカルパートを種別に集計したい。 
※対象カラムの型がMVARCHARの時はCASTで変換する必要がある。 
SUBSTR(MAIL,POSSTR(CAST(MAIL as VARC
SELECTの表示件数を指定する10件表示させる場合
HiRDB:
limit 10

Oracle:
where rownum <= 10

※limit はwhere句は不要ですが、 rownum はwhere句が必要です。
テーブルの表領域を削除(DELETE文よりも高速に削除したい場合に利用)TRUNCATE table テーブル名

 

仕事で使えるLinuxコマンドも纏めています。よろしければご一緒にご活用ください。

仕事で使うLinux/UNIXコマンド一覧

続きを見る

 


SQL 第2版 ゼロからはじめるデータベース操作


ビッグデータ分析・活用のためのSQLレシピ

-SQL
-