- 読取(SELECT)
- 追加(INSERT)
- 更新(UPDATE)
- 削除(DELETE)
- テーブル作成(CREATE TABLE)
- テーブル削除(DROP TABLE)
- テーブル複製(CREATE SELECT)
- 件数をカウント(COUNT)
- 結合して抽出(UNION)
- 存在判定(EXISTS)
- 差分を抽出(MINUS)
- 一致行を抽出(INTERSECT)
読取(SELECT)
--全項目 SELECT * FROM 社員マスタ WHERE 氏名 = '田中'; --よく使うもの SELECT 社員.社員コード AS コード --ASまたはスペースで別名 , 氏名 , COUNT(資格.社員コード) FROM 社員マスタ 社員 --ASまたはスペースで別名 LEFT JOIN 資格情報 資格 --テーブル結合 ON 社員.社員コード = 資格.社員コード --結合条件 WHERE 社員.社員コード LIKE '00%' --曖昧検索(%と_が使える) AND 社員.社員コード IN ('0001','0002') --複数条件 GROUP BY 社員.社員コード, 社員.氏名 --グループ化(COUNTやSUMの時に必要) ORDER BY 社員.氏名 DESC --並び替え(ASCで昇順、DESCで降順 ※省略でASC)
追加(INSERT)
--全項目 INSERT INTO 社員マスタ VALUES (1,'田中',25); --一部項目 INSERT INTO 社員マスタ (社員コード, 氏名) VALUES (7,'浜田'); --別テーブルから(まるごと) INSERT INTO 社員マスタ SELECT * FROM BK_社員マスタ; --別テーブルから(条件付き) INSERT INTO 社員マスタ SELECT 社員コード,氏名 FROM BK_社員マスタ WHERE 社員コード=0001;
更新(UPDATE)
--対象行 UPDATE 社員マスタ SET 氏名 = '高田', 部署コード= '005' WHERE 社員コード = 1; --全行 UPDATE 社員マスタ SET 氏名 = '高田', 部署コード = '005'; --別の列の値に置き換え UPDATE 社員マスタ SET 生年月日 = 入社年月日;
削除(DELETE)
※TRUNCATEは早いがロールバック不可
--対象行 DELETE FROM 社員マスタ WHERE 社員コード = '1'; --全行 DELETE FROM 社員マスタ; TRUNCATE TABLE 社員マスタ;
テーブル作成(CREATE TABLE)
型はDBの種類によって異なる(例はPostgreSQL)
CREATE TABLE 社員マスタ ( 社員コード SERIAL , 氏名 VARCHAR(20) NOT NULL , 生年月日 DATE , 年齢 INTEGER , 住所 TEXT , PRIMARY KEY (社員コード) );
テーブル削除(DROP TABLE)
DROP TABLE 社員マスタ; --存在する場合のみ削除 DROP TABLE IF EXISTS 社員マスタ;
テーブル複製(CREATE SELECT)
キー情報などはコピーされないため注意
※ORACLE、PostgreSQL、MySQLのみ
--データあり CREATE TABLE BK_社員マスタ AS SELECT * FROM 社員マスタ; --データあり(条件指定) CREATE TABLE BK_社員マスタ AS SELECT 社員コード,氏名 FROM 社員マスタ WHERE 部署コード='001'; --データなし CREATE TABLE BK_社員マスタ AS SELECT * FROM 社員マスタ WHERE 1<>1;
件数をカウント(COUNT)
--全件 SELECT COUNT(*) FROM 資格情報; --NULLをカウントしない SELECT COUNT(取得日) FROM 資格情報; --重複をカウントしない SELECT COUNT(DISTINCT 社員コード) FROM 資格情報; --グループごとの集計 SELECT 社員コード, COUNT(社員コード) FROM 資格情報 GROUP BY 社員コード;
結合して抽出(UNION)
--重複行は出力しない SELECT * FROM 社員A UNION SELECT * FROM 社員B --すべて出力 SELECT * FROM 社員A UNION ALL SELECT * FROM 社員B
存在判定(EXISTS)
--サンプル2に存在するIDを出力 SELECT * FROM サンプル1 A WHERE EXISTS (SELECT * FROM サンプル2 B WHERE A.ID=B.ID) --サンプル2に存在すれば出力 SELECT * FROM サンプル1 A WHERE EXISTS (SELECT * FROM サンプル2 B WHERE A.ID=2)
差分を抽出(MINUS)
2つのテーブルの行の差分を抽出
SELECT * FROM 社員A EXCEPT --ORACLEの場合はMINUS SELECT * FROM 社員B
一致行を抽出(INTERSECT)
2つのテーブルの一致した行を抽出
SELECT * FROM 社員A INTERSECT SELECT * FROM 社員B