直線上に配置


SQL(Structured Query Language)
  • SQLとは?

    データベースの活用範囲は広く、非常に多くの人が利用します。しかし、すべての利用者がコンピュータの専門家とは限りません。DBMSは非常に高度な技術で構成されますが、それらをすべて熟知した上で利用することは不可能です。そこでより簡単にDBMSと対話的にやり取りできる言葉(ルール)が必要となります。この言葉として使われるのが「SQL」です。
    (ネットワークデータベースにはNDLと呼ばれる言語がある)

  • SQLの構成

    • DDL(データ定義言語)
      データベースの構造(スキーマ)を定義

      CREATE SCHEMA スキーマ定義
      CREATE TABLE テーブル定義
      CREATE VIEW ビュー定義
      GRANT(グラント) 処理権限の設定
      REVOKE(リボーク) 処理権限の解除

    • DML(データ操作言語)
      データの抽出、加工

      SELECT データの抽出
      INSERT データの挿入
      UPDATE データの更新
      DELETE データの削除
      DECLARE(デクレア) ホスト変数と
      カーソル(CURSOR)の定義

    • DCL(データ制御言語)
      データ変更の確定、取消

      BEGIN トランザクション開始
      COMMIT トランザクションの確定
      ROLLBACK トランザクションの取消
      SAVEPOINT チェックポイント設定
      LOCK 資源のロック

    • 組み込み型SQL(親言語方式)
      COBOL、C、JAVA(親言語)のプログラムに記述
       →SQLプリコンパイラ
        (DBアクセス関数の呼び出し文に変換)

      (例)
      EXEC SQL DECLARE カーソル名 CURSOR FOR
      SELECT 〜;
      END-EXEC
      ※SQLJ(Java):「#sql で始まり、;で終了する」※JDBCでも可能
      http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_3b.html

      DB(問合せ結果)→カーソル(変数)
      プログラムではカーソルからレコードを1件ずつ処理

      (カーソル操作)
      DECLARE CURSOR カーソル宣言

      DECLARE CR1 CURSOR FOR
      SELECT * FROM TBL1
      WHERE 検索条件
      OPEN カーソル操作開始

      OPEN CR1
      FETCH レコード読込(※繰り返し処理)

      FETCH CR1 INTO 受け取り変数
      UPDATE レコード更新

      UPDATE TBL1
      SET CLMB=値
      WHERE CURRENT OF CR1
      DELETE レコード削除

      DELETE FROM TBL1
      WHERE CURRENT OF CR1
      CLOSE CURSOR カーソル操作終了

      CLOSE CR1
      ※SQL単独利用:独立言語方式

  • SELECT文
    データの抽出、集計

    (書式)

     SELECT 列名 FROM 表明 WHERE 条件
     

    • 関係演算(射影、選択、結合)

      (サンプルテーブル)
      <学生>
      学籍番号 氏名 学部コード 成績
      0001 太郎 11 80
      0002 花子 21 65
      0003 次郎 11 74
      0004 三郎 21 83
      <学部>
      学部コード 学部名
      11 文学
      21 教育

      1. 射影

        SELECT 学部名 FROM 学部

        学部名
        教育

      2. 選択

        SELECT * FROM 学生 WHERE 成績 >= 80

        学籍番号 氏名 学部コード 成績
        0001 太郎 11 80
        0004 三郎 21 83
        ※「*」はすべての列を表す特殊記号

      3. 結合

        SELECT 学生.氏名, 学部.学部名
        FROM 学生,学部
        WHERE 学生.学部コード = 学部.学部コード

        ※結合キー(学生.学部コード、学部.学部コード)

        氏名 学部名
        太郎
        花子 教育
        次郎
        三郎 教育
        ※列名が重複する場合は表名は必須

    • 条件指定

      1. 複数条件
        論理演算子(AND,OR,NOT)

        SELECT * FROM 学生
        WHERE 学部コード = 11 AND 成績 >= 80

      2. ヌル
        IS NULL(空値)※IS NOT NULL

      3. 範囲
        BETWEEN 値1 AND 値2(値1から2の間)

      4. 指定値
        IN(値1,2,3・・・・) (指定値内のどれか)

      5. 文字列条件
        LIKE N’文字列%_’(指定文字列に一致)

        文字列「’」で囲む、日本語は「N」を前に不可

        ワイルドカード
        任意の文字列(0文字以上)
        _ 任意の1文字


      6. 重複行排除

        SELECT DISTINCT 項目名

      7. 副問合せ
        SELECT文の入れ子(WHERE句でSELECT)

        (返却1行)
        WHERE 項目名 =
        ( SELECT 項目名 FROM 表名 WHERE 条件)

        (返却複数行)
        WHERE 項目名 IN
        ( SELECT 項目名 FROM 表名 WHERE 条件)

        (相関副問合せ)
        副問合せの繰り返し(※親表レコードごと)
        FROM 担当表 T
        WHERE EXISTS
        ( SELECT 項目名 FROM 表名 G
          WHERE T.項目=G.項目)
        ※T,Gは表の別名、EXISTSはレコードの有無

    • 集計計算

      関数による計算、グループ化

      1. 集合関数

        SELECT 集合関数(項目名) FROM 表名

        集合関数
        COUNT レコード(行)数
        SUM 合計
        AVG 平均
        MAX 最大
        MIN 最小

      2. グループ化

        GROUP BY 項目名 (指定項目でグループ化)

        ※複数項目の指定可
        ※SELECT項目はGROUP指定項目に限定

      3. グループ化後の抽出条件

        GROUP BY 項目名
        HAVING 条件

        ※GROUP BYと組み合わせて利用
        ※条件項目はGROUP BY指定項目のみ

    • 整列設定(ソート)
      指定項目で昇、降順

      ORDER BY 項目名 整列キー

      ※複数項目の指定可
      ※省略時はASC

      (整列キー)
       ASC(Ascending) 昇順
       DESC(Descending) 降順

  • データ操作(その他)
    • INSERT文

      レコードの追加

      1. 値指定
        INSERT INTO 表名(項目名,・・・)
        VALUES(値,・・・)

      2. 検索データ指定
        INSERT INT 表名(項目名,・・・)
        SELECT 項目名 FROM 表名

    • UPDATE文

      レコードの更新

      UPDATE 表名 SET 項目名=値 WHERE 条件

      ※条件指定がない場合、すべてのレコードが更新

    • DELETE文

      レコードの削除

      DELETE FROM 表名 WHERE 条件

      ※条件指定がない場合、すべてのレコードが削除

  • CREATE文
    • テーブル定義

      テーブルの作成(実データを格納する枠組み)

      CREATE TABLE 表名(
      列名 列属性(サイズ) [列制約,]
      [表制約])

      列属性 データ型(CHAR,DECIMAL)
      データサイズ(文字数、桁数)
      制約 主キー(PRIMARY KEY)、
      外部キー(FOREIGN KEY,REFERENCES)
      非ヌル(NOT NULL)、
      一意性(UNIQE)
      妥当値(CHECK)

    • ビュー定義

      仮想表の作成(実データを持たない)

      CREATE VIEW ビュー表名 AS SELECT文


  • SQLの実行順序(ANSI)

    FROM → WHERE → GROUP BY →

    HAVING → SELECT → ORDERE


  • SQLバージョン
    SQL86(SQL87) COBOL、FORTRAN、PL/Iなど、
    親言語(母言語、ホスト言語とも言う)への
    埋込みSQL文仕様策定
    SQL89 マイナーバージョン
    DDL仕様策定
    制約および整合性機能を追加
    C言語への埋込みSQL文仕様の追加
    SQL92(SQL2) メジャーバージョン
    データ型の拡張、外部結合、DDL仕様追加
    SQL99(SQL3) オブジェクト指向
    Javaを親言語とする埋め込みSQL規格(SQLJ)
    SQL 2003 XML 連携


授業資料メニュー

お問合せフォーム

トップ アイコン
トップページへもどる


直線上に配置