Database > SQL

更新日 2012-03-18
広告

SELECT

単純なSELECT
SELECT 列名1, 列名2, ...
  FROM 表名1
  WHERE 条件1, 条件2
AS
SELECT 氏名 AS 名前
  FROM 社員
2つの表の直積(全組み合わせ)
SELECT 列名1, 列名2, ...
  FROM 表名1, 表名2
DISTINCT
SELECT DISTINCT 部署 FROM 社員
MAX, MIN, AVG, SUM (NULLは計算対象外)
SELECT MAX(成績) FROM 学生;
SELECT MIN(成績) FROM 学生;
SELECT AVG(成績) FROM 学生;
SELECT SUM(成績) FROM 学生;
COUNT
SELECT COUNT(*) FROM 社員
WHERE
SELECT * FROM 社員 WHERE 成績 = 100;
SELECT * FROM 社員 WHERE 成績 > 100;
SELECT * FROM 社員 WHERE 成績 >= 100;
SELECT * FROM 社員 WHERE 成績 < 100;
SELECT * FROM 社員 WHERE 成績 <= 100;
SELECT * FROM 社員 WHERE 成績 <> 100; # != と同義 (NULLは対象外)
WHERE NOT
SELECT * FROM 社員 WHERE NOT 成績 = 100;
WHERE .. IN
SELECT * FROM 社員 WHERE 成績 IN (80, 100);
WHERE .. BETWEEN
SELECT * FROM 社員 WHERE 成績 BETWEEN 80 AND 100;
WHERE .. IS NULL
SELECT * FROM 社員 WHERE 成績 IS NULL;
SELECT * FROM 社員 WHERE 成績 IS NOT NULL;
WHERE .. LIKE
SELECT * FROM 社員 WHERE 名前 LIKE '高%' # %はワイルドカード
WHERE 結合条件
SELECT * FROM 社員, 部署
  WHERE 所属部署コード = 部署コード;
# 
SELECT * FROM 社員, 部署
  WHERE 社員.所属部署コード = 部署.部署コード;
#
SELECT * FROM 社員 A, 部署 B
  WHERE A.所属部署コード = B.部署コード;
GROUP BY (GROUP BYで指定した列は、SELECTの対象として指定する必要あり)
SELECT 部署コード, 部署名, SUM(点数) FROM 社員, 部署
  WHERE 所属部署コード = 部署コード
  GROUP BY 部署コード, 部署名; 
HAVING (GROUP BYの集約結果に対する条件)
SELECT 部署コード, 部署名, SUM(点数) FROM 社員, 部署
  WHERE 所属部署コード = 部署コード
  GROUP BY 部署コード, 部署名
  HAVING SUM(点数) > 500; 
ORDER BY
SELECT * FROM 社員 ORDER BY 部署コード, 社員番号;
集約結果をORDER BY
SELECT 部署コード, SUM(点数) FROM 社員
  GROUP BY 部署コード
  ORDER BY 2 DESC; # ORDER BY SUM(点数)はNG

INSERT

単純なINSERT
INSERT INTO テーブル名 (列名1, 列名2, ...)
  VALUES (値1, 値2, ...);
SELECT結果をINSERT
INSERT INTO テーブル名 (列名1, 列名2, ...)
  SELECT 列A, 列B, ...
  FROM テーブル名a, テーブル名b, ... WHERE ...

UPDATE

UPDATE テーブル名 SET 列名1=値1, 列名2=値2, ...
  WHERE 条件

DELETE

DELETE FROM テーブル名 WHERE 条件

CREATE

CREATE TABLE
CREATE TABLE テーブル名 (
  列名1 データ型 制約,
  列名2 データ型 制約,
   :
  表制約
);
列制約を指定する例
CREATE TABLE 社員 (
  社員番号 DEC(10) PRIMARY KEY, # 10桁整数, 主キー
  部署コード INT REFERENCES 部署, # 外部キー
  名前 NCHAR(10) NOT NULL,
  勤続年数 INT DEFAULT 0,
  年齢 INT CHECK (年齢 >= 20)
);
表制約を指定する例
CREATE TABLE 社員 (
  社員番号 DEC(10),
  部署コード INT,
  名前 NCHAR(10),
  勤続年数 INT,
  年齢 INT,
  PRIMARY KEY (社員番号), # 複数の列を指定してもよい
  FOREIGN KEY (部署コード) REFERENCES 部署,
  CHECK (年齢 >= 20)
);
制約に名前をつける例
CREATE TABLE 社員 (
  社員番号 DEC(10),
  部署コード INT,
  名前 NCHAR(10),
  勤続年数 INT,
  年齢 INT,
  CONSTRAINT CONST1 PRIMARY KEY (社員番号),
  CONSTRAINT CONST2 FOREIGN KEY (部署コード) REFERENCES 部署,
  CONSTRAINT CONST3 CHECK (年齢 >= 20)
);
外部キー参照動作の定義
CREATE TABLE 社員 (
  社員番号 DEC(10),
  部署コード INT,
  名前 NCHAR(10),
  PRIMARY KEY (社員番号),
  FOREIGN KEY (部署コード) REFERENCES 部署 ON DELETE NO ACTION
);
この場合、主キー側(参照される側)の行を削除しようとしても場合、すでに参照されている場合は削除できない。 他に、以下がある。
# 主キー側と一緒に、参照している外部キー側の行も削除する
  FOREIGN KEY (部署コード) REFERENCES 部署 ON DELETE CASCADE
  FOREIGN KEY (部署コード) REFERENCES 部署 ON DELETE SET DEFAULT
  FOREIGN KEY (部署コード) REFERENCES 部署 ON DELETE SET NULL
  FOREIGN KEY (部署コード) REFERENCES 部署 ON UPDATE NO ACTION
  FOREIGN KEY (部署コード) REFERENCES 部署 ON UPDATE CASCADE
  FOREIGN KEY (部署コード) REFERENCES 部署 ON UPDATE SET DEFAULT
  FOREIGN KEY (部署コード) REFERENCES 部署 ON UPDATE SET NULL
CREATE VIEW
CREATE VIEW ビュー名 (列名1, 列名2, ...)
  AS SELECT 列名A, 列名B, ... FROM テーブル名1, テーブル名2, ...
  WHERE 結合条件など

GRANT

構文
GRANT 権限 ON テーブル名 TO ユーザID1, ユーザID2, ... [ WITH GRANT OPTION ]
GRANT ALL PRIVILEGES ON 社員 TO 23423, 23113;
GRANT SELECT, DELETE ON 社員 TO 22115;
GRANT SELECT ON 社員 TO PUBLIC; # 全員に権限付与
GRANT SELECT ON 社員 TO 22222; # GRANT SELECTの実行権限も付与
GRANT REFERENCES ON 社員 TO 22222; # テーブル「社員」に対する外部キーの設定権限

REVOKE

構文
REVOKE 権限 ON テーブル名 FROM ユーザID1, ユーザID2, ... 
REVOKE ALL PRIVILEGES ON 社員 FROM 10382

ROLE

CREATE ROLE ロール名
GRANT 権限 ON テーブル名 TO ロール名1, ロール名2, ... 
CREATE ROLE 管理者;
GRANT ALL PRIVILEGES ON 社員 TO 管理者;
GRANT 管理者 TO 11113; # ユーザ11113を管理者に設定
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system