自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • EXISTSの使い方

    DBはOracle。 外部キーを使った存在チェック SELECT d.department_id, d.department_name FROM departments d WHERE EXISTS ( SELECT 1 FROM employees e WHERE e.department_id = d.department_id ); このSQLは、部署内に社員がいる部署だけを返す。 まず、departments内のデータを取り出す。 employeesからdepartment_id で一致するものが1件でもあれば、そのdepartmentsを表示する。 イメージ的には全走をして、行が見つかればTRUEを返してアーリーリターンをしている。(※ただしDB ...
  • Oracleデータベース演習

    結合と集約をセットで扱う SELECT E.JOB_ID, SUM(E.SALARY) AS SUM_SALARY , AVG(E.SALARY) AS AVG_SALARY, J.JOB_TITLE FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID GROUP BY E.JOB_ID , J.JOB_TITLE; 補足1: OracleではテーブルにはASを使ってはいけない。 PostgreSQLやMySQL、SQLiteでは列のエイリアスに使うASを、テーブルにも使える。 よって、以下SQLは有効。 SELECT E.JOB_ID, SUM(E.SALARY) AS SUM_SALARY , AVG(E.SALARY) AS AVG_SALARY, J.JOB_TITLE FROM EMPLOYEES AS E INNER JOIN JOBS AS J ON J.JOB_ID = E.JOB_ID GROUP BY E.JOB_ID , J.JOB_TITLE; しかし、Oracleにおいては、テーブルのエイリアスにASを使ってはいけない。 よって ...
  • 【SQL】Oracleデータベースのファンクション(関数)の一覧

    NVL(A,B) AがNULLならBを返す 以下は、bonus カラムの値がNULLの場合、そのまま表示させず、0を返すようにしている。 SELECT NVL(bonus, 0) AS bonus_value FROM employees; 文字列を返すこともできる。ただし元のカラムの値と同じデータ型に限る。 SELECT NVL(middle_name, '(なし)') AS middle FROM users; つまり以下はエラー(暗黙的に型変換される可能性もあるが、エラーになることがあるため、推奨されない) SELECT NVL(bonus, '賞与なし') AS bonus_value FROM employees; この場合、型変換を明示的に指定して変換をするとよいだ ...