世界でいちばん簡単なSQLのe本[最新版] SQLの基本と考え方がわかる本

概 要

プログラミングやシステム運用経験のまったくない人を対象に、データベースの仕組みやSQLというプログラミング言語の使い方を解説した入門書です。SQLは、データベースの主流であるリレーショナルデータベースを操作するための言語です。このため、SQLを学んでおけば、システム開発に携わったときに役立ちます。本書は、SQLプログラミングの考え方、データベースの仕組み、MySQLの基本から文法の基礎まで、オールカラーのイラストとコラムで解説しています。実際にサンプルコードを作り、処理結果を確認しながら読み進めることでSQLの基本が自然にマスターできます。Windows 8/7/Vista/XP環境に対応。サンプルファイルのダウンロードサービス付き。

著者 金城俊哉
価格 本体1600円(税別)
ISBN 978-4-7980-3856-8
発売日 2013/6/28
判型 A5
色数 4色
ページ数 322
CD/DVD
対象読者 初級
シリーズ
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

Chapter1 SQLって何だろう

Section 01 SQLの前にまずはデータベースについて知ろう

そもそもデータベースって何?

データベースを管理する――DBMSの役割

Excelは何でデータベースソフトではなく「表計算ソフト」なの?

Section 02 コンピューターで扱うデータベースの種類

階層型データベース(Hierarchical Database)

リレーショナルデータベース(Relational Database:RDB)

リレーショナルデータベース管理システム(RDBMS)

Section 03 RDBとRDBMSとクライアントプログラム

操作する側と操作される側、データを保管する部分

RDBMSの構成

クライアントプログラムはSQL文でRDBMSに処理を依頼する

Section 04 データを登録するテーブルを見てみよう

テーブルの構造

Section 05 やっと登場! SQLって何?

SQLはデータベースを操作するためのプログラミング言語です

SQLが方言を話すって?

Section 06 まずはSQLで書いたコードを見てみよう

実際のSQL文はこうなっている

SQL文の種類は3つのグループに分けられる

Section 07 SQLの基本的な書き方

キーワードはすべて半角のアルファベットで入力する

単語と単語の間は半角スペースか改行で区切る

SQL文の最後には「;」を付ける

Chapter2 データベースを用意しよう

Section 01 データベースシステムのダウンロードとインストール

データベースシステムのダウンロードからインストールまでの流れ

MySQLをダウンロードする

データベースシステムのインストール

データベースシステムの設定

Section 02 Windows版MySQLへのログイン

スタート画面からmysqlを起動してログインする

mysqlの終了

Section 03 Windows版PostgreSQLへのログイン

スタート画面から「psql」を起動してPostgreSQLにログインする

psqlの終了

Section 04 Windows版Oracleへのログイン

コマンドプロンプトからSQLPLUSを起動してログインする

SQLPLUSの終了

Section 05 SQL Serverへのログイン

SQL Serverへログインする

Chapter3 はじめの一歩! データベースとテーブルの作成

Section 01 まずはデータベースを作る

データベースを作成する――CREATE DATABASE

データベースに接続する――USE文

データベースを削除する――DROP DATABASE文

Section 02 データを登録するためのテーブルを作る

テーブルを作成する――CREATE TABLE

テーブルの削除――DROP TABLE

Section 03 テーブルの構造を確認してみよう

テーブルの設定情報を見る――SHOW CREATE TABLE

列の構造を見てみよう

Section 04 データは「型」で分別する

テーブルに登録するデータは型でグループ分けをする

数値型――INTEGER型

文字列型(1)――CHAR型

文字列型(2)――VARCHAR型

日付型――DATE型

Section 05 テーブルの内容を変更する

テーブルの内容を変更する――ALTER TABLE文

列のデータ型を変更する――ALTER TABLE…MODIFY…

列を追加する――ALTER TABLE…ADD COLUMN…

Section 06 テーブル名と列名の変更

テーブルの名前を変更する――ALTER TABLE…RENAME TO…

列の名前を変更する――ALTER TABLE…CHANGE…

Chapter4 これで完璧! データの登録、削除、更新

Section 01 データを登録してみよう

データを登録する――INSERT INTO…VALUES

Section 02 複数のデータをまとめて登録してみよう

一度に複数行のデータを登録する

一度に複数行のデータを登録する――Oracleの場合

Section 03 登録したデータを一覧で表示する

テーブルのデータを表示する――SELECT文(1)

特定の列のデータを表示する――SELECT文(2)

Section 04 行単位でデータを削除する

特定の行のデータを削除する――DELETE FROM…WHERE…

条件を記述する方法――WHERE以下の記述

すべての行データを一括して削除する――DELETE FROM…

Section 05 間違えて登録したデータを修正する

登録済みのデータを修正する――UPDATE…SET…WHERE…

すべての行のデータを一括して修正する――UPDATE…SET…

Section 06 確定しているデータだけを登録する

列を指定してデータを登録する――INSERT文

何もないことを示すための値何もないことを示すための値――NULL

Section 07 重要なデータの入力を強制する

空のデータを登録できないようにする――NOT NULL制約

NOT NULL制約の列にデータを登録しないとどうなるのか

NOT NULL制約を設定する構文は製品ごとに異なる

Section 08 何も登録しないときは自動的に「0」を入れる

何も登録しなかったときの列の値を決めておく――デフォルト値の設定

デフォルト値が登録されるか見てみよう

デフォルト値を設定する構文は製品ごとに異なる

Section 09 同じデータの重複登録を禁止する

重複したデータの登録を禁止する――主キーの設定

主キーを設定した列に重複したデータを登録してみる

主キーを設定する構文は製品ごとに異なる

Section 10 制約を解除する

NOT NULL制約を解除する――ALTER TABLE

デフォルト値の設定を解除する――ALTER TABLE

主キーの設定を解除する

Chapter5 データ検索のキモ

Section 01 見たい列のデータだけを取り出す

見たい列のデータを取り出す――SELECT…FROM文

データを取り出すときに列名を別の名前にする

Section 02 あのデータはどこ―…データの検索

条件に合ったデータを検索して抽出する――SELECT…FROM…WHERE…

検索結果の列を指定してみよう――SELECT 列名1,列名2…

Section 03 指定した範囲のデータを探す!…検索条件の範囲指定

検索する条件の範囲を指定する――BETWEEN…AND…

指定した範囲に一致した商品名だけを表示する

条件の範囲以外のデータを検索する――NOT BETWEEN…AND…

Section 04 どれかに一致するデータはある―…検索条件の列挙

検索条件に設定する値を並べて記述する――IN()

どれかの値に一致するデータがあるか調べる

すべての値に一致しない値を検索する――NOT IN()

Section 05 「ベリー」を含むデータを検索して!…あいまい検索

指定した文字を含むデータを検索する――LIKEによるあいまい検索

すべての値に一致しない値を検索する――NOT LIKE…

Section 06 データ未入力の行を教えて!…NULLの検索

データが入力されていない箇所を検索する――IS NULL

列の値がNULLではない行を検索する――IS NOT NULL

Section 07 で△△なデータを探して!…AND演算子

複数の条件を指定する――論理演算子

「 かつ△△」の条件で検索する――AND演算子

ANDとBETWEEN…AND

Section 08 または△△なデータを探して!…OR演算子

「 または△△」の条件で検索する――OR演算子

ORとIN()

Section 09 AまたはB、かつCなデータを探す…ANDとOR

「 または△△、かつ××」の条件で検索する

優先したい処理は( )で括る

論理演算子が実行される順序

Section 10 検索結果を並び替え

検索結果を並べ替える――ORDER BY

検索結果を並べ替える基準になる列の指定

Chapter6 これでわかった! 集計と場合分けのツボ

Section 01 売上額を計算する…列同士の計算

列同士の値を計算する――四則演算子

単価と売上数を掛け算して売上額を表示する

消費税を含んだ額にする

Section 02 合計や平均、最高値を表示する…集約関数

そもそも「関数」って何?

商品ごとの売上を合計した値を表示する――SUM()関数

平均値を表示する――AVG()関数

最も高い売上額を表示する――MAX()関数

最も低い売上額を表示する――MIN()関数

列の件数を表示する――COUNT()関数

重複するデータを外して集計する――DISTINCT

Section 03 列の値を評価する…CASE式(1)

条件によって表示する値を変える――CASE式

CASE式の構造

売上が高い順に「OK」、「まあまあ」、「ダメ」を表示する

Section 04 「果物」を「フルーツ」として表示する…CASE式(2)

「果物」、「野菜」を「フルーツ」、「ベジタブル」という表現に変更する

検索CASE式と単純CASE式

Section 05 指定したデータの件数を表示する…CASE式(3)

商品カテゴリが「果物」のデータの件数を数える――SUM()関数の引数をCASE式に

Section 06 特定のデータだけを集計する…CASE式(4)

商品カテゴリが「果物」の売上額を集計する――SUM()関数の引数をCASE式にする

Chapter7 大研究! データの並べ替えとグループ分け

Section 01 価格が高い順にテーブルのデータを並べ替える…ORDER BY

テーブルの中身を並べ替えて表示する

テーブルのデータを昇順で並べ替える――ORDER BY…ASC

価格が高い順番で並べ替えて表示する――ORDER BY…DESC

Section 02 複数の列を基準にして並べ替える

複数の列を基準にして並べ替える

Section 03 カテゴリごとにデータをまとめる…GROUP BY(1)

グループ化

「カテゴリ」+「商品名」でグループ化する

Section 04 商品ごとの登録件数を調べる…GROUP BY(2)

集計関数はそもそもグループ化の処理を行うための関数

「カテゴリ」でグループ化して登録件数を調べる

「カテゴリ」+「商品名」でグループ化して商品ごとの登録件数を調べる

Section 05 商品ごとの集計値を表示する…GROUP BY(3)

「カテゴリ」でグループ化して受注額を合計する

「カテゴリ」+「商品名」でグループ化して商品ごとの受注額を合計する

Section 06 商品ごとの平均値を表示する…GROUP BY(4)

「カテゴリ」でグループ化して受注額の平均を表示する

「カテゴリ」+「商品名」でグループ化して商品ごとの受注額を平均する

Section 07 商品ごとの最大受注額を表示する…GROUP BY(5)

「カテゴリ」+「商品名」でグループ化して商品ごとの最大受注額を調べる

Section 08 合計が4000円以上の商品を表示する…条件を付けてグループ化

グループごとの処理に条件を付ける――GROUP BY + HAVING

HAVING句による処理の流れを見てみよう

Section 09 ある商品の登録件数だけを表示する…抽出してからグループ化

ある商品の登録件数だけを表示する――WHERE句+GROUP BY句(1)

抽出してからグループ化する――WHERE句+GROUP BY句(2)

Section 10 売上の平均が多い商品順に表示する…グループ化してから並べ替え

グループ化したあとで並べ替える――GROUP BY句+ORDER BY句

処理の流れを見てみよう

Section 11 HAVING句とWHERE句の違いは―

HAVING句にもWHERE句にも書ける条件

Section 12 GROUP BY句とWHERE句のよくある間違い

SELECT句に集約キー以外の列名を書いてしまう

グループ関数の処理結果とSELECT句で指定した列とは何の関係もない

集約キー以外をSELECT句に含めることはできない

HAVING句にGROUP BY句とは異なる列名を書いてしまう

WHERE句にグループ関数を書いてしまう

Section 13 GROOUP BYとCASEとの違い

カテゴリごとの売上合計を表示する

CASE式にしかできないこと

Chapter8 試せばわかる! 関数を使ったデータ操作テクニック

Section 01 データの登録日は―…CURRENT_DATE関数

日時を扱うデータ型

日付を扱うテーブルを作成する

日付データの登録

2013年3月20日以降のデータを表示する

Section 02 何時に登録したデータ―…CURRENT_TIME関数

時刻を扱うテーブルを作成する

時刻データの登録

10時00分00秒以降のデータを表示する

Section 03 現在時刻と日付をまとめて取得…CURRENT_TIMESTAMP関数

日付と時刻を扱うテーブルを作成する

日付と時刻データの登録

2013年3月21日以降のデータを表示する

Section 04 小数点以下の値を丸めて表示する…CEILIMG関数、FLOOR関数

小数を含む値を登録したテーブルを用意する

小数点以下を切り上げる――CEILING()関数

小数点以下を切り捨てる――FLOOR()関数

Section 05 「apple」の文字数は「5」と表示する…LENGTH()関数

列に登録されたデータの文字数を数える

MySQL専用のCHAR_LENGTH()関数を使って文字数をカウントする

Section 06 商品番号の一部を取り出してみよう…SUBSTRING関数

特定の文字列を取り出す

Section 07 「氏」と「名」を結合して「山田太郎」にする…CONCAT()関数

別々の列に登録された文字データを連結する

Section 08 不要なスペースを取り除く…LTRIM()、RTLIM()

文字列の左側の不要なスペースを取り除く

文字列の右側の不要なスペースを取り除く

Section 09 「tomato」を「TOMATO」にする…UPPER()関数

小文字を大文字に変換する

大文字を小文字に変換する

Section 10 「00001」を整数型の「1」にする…CAST()関数

文字列を数値に変換する

文字列を日付型へ変換する

Chapter9 複数のテーブルを操作してデータを取り出してみよう

Section 01 そもそもテーブルの結合って何―

リレーショナルデータベースのキモは数多くのテーブルを結び付けること

データを登録

Section 02 2つのテーブルのすべてのデータを結合させる…交差結合

FROMで2つのテーブルを結合する

交差結合を行う専用のキーワード「CROSS JOIN」

列名の指定方法

Section 03 商品情報に在庫情報を結合させる…内部結合

テーブル同士のデータを結び付ける―INNER JOIN

内部結合のポイント

Section 04 特定の商品の在庫状況を表示する…内部結合+WHERE句

内部結合を行ってから条件を付けて絞り込む

特定の支店の在庫を表示してみよう

Section 05 テーブルに登録されている全データを表示する…外部結合

指定したテーブルに存在するデータはすべて表示する―LEFT OUTER JOIN

もう一つの外部結合―RIGHT OUTER JOIN

Section 06 単純に2つのテーブルを合算する(集合演算(1))

2つのテーブルのデータを1つにまとめて表示する―集合演算(UNION ALL)

同じ構造のテーブル同士を集合演算する場合

表示する列を追加して別名で表示する

Section 07 2つのテーブルから重複するデータを除いて合算する(集合演算(2))

重複する行を排除する―UNION

重複データを排除するときの注意

Section 08 2つのテーブルに共通するデータだけを表示する(集合演算(3))

2つのテーブルの重複データだけを表示する―INTERSECT

Section 09 1つのテーブルにだけ登録されているデータを表示する(集合演算(4))

レコードの引き算を行う―EXCEPT

Chapter 10 問い合わせの問い合わせ

Section 01 問い合わせの結果に問い合わせて結果を絞り込む…サブクエリ

サブクエリによる副問い合わせ

サブクエリが埋め込まれたSQL文の構造を解剖する

サブクエリを使わないでSQL文を書いてみる

Section 02 平均値以上の商品だけを表示する…スカラ・サブクエリ

WHERE句で集約関数を使用する

1つの値だけを返すサブクエリ――スカラ・サブクエリ

Section 03 列の値と平均値の差を表示する…SELECTT句+スカラ・サブクエリ

スカラ・サブクエリを書ける場所

Section 04 平均よりも売上が低い店舗をチェックする…HAVING句+スカラ・サブクエリ

スカラ・サブクエリをHAVING句に書く

Section 05 2つのテーブルで共通するデータの中から指定したデータを取り出す…相関サブクエリ

2つのテーブルのデータを参照するサブクエリ

相関サブクエリの実体

Section 06 2つのテーブルに共通するデータを取り出す…IN + サブクエリ

2つのテーブルに共通する要素を抽出する

サブクエリの結果をまとめる――IN

どれにも一致しないデータを抽出する―NOT IN + サブクエリ

Section 07 テーブル間で共通のデータだけを取り出す…EXISTS

サブクエリの結果を行単位で取り出す

売上があった商品だけを表示する

「マスカット」が売れた支店名を表示してみよう

売上がない商品を表示する――NOT EXISTS

Chapter11 問い合わせを定型化するツールを使ってみよう

Section 01 面倒なSQL文を記録しておける便利なビュー

SQL文を保存していつでも呼び出せるようにする

ビューの定義

ビューを作ってみよう

ビューを呼び出して結果を表示してみよう

Section 02 ビューの定義を使い分ける

ビュー定義の4つのパターン

Section 03 ビューで税込価格を計算する

ビューに独自の列を設定する

テーブルにはない列だけをビューで表示する

Section 04 2つのテーブルを結合するビューを作る

2つのテーブルを結合するビュー

表結合のビューの結果に対して別の処理を行う

Chapter12 極める! データの保護

Section 01 トランザクションで競合する処理の衝突を防ぐ

トランザクションが必要な状況を考える

トランザクションで同時アクセスを禁止する

Section 02 トランザクションの使い方

トランザクションの対象となる文

トランザクションの開始と終了

トランザクションの確定と取り消し

Section 03 トランザクションを使ってデータを更新してみよう

出庫数を1個増やして在庫数を1個減らす処理をトランザクションで行う

Section 04 ロールバックでトランザクションを取り消してみよう

トランザクションを開始してロールバックで元に戻す

用語索引

コラム

階層型とリレーショナル型以外のデータベース

クライアントプログラムは何でもOK

Windowsのサービスって何?

データベースはクライアントプログラムで操作する

データベース、テーブル、列の命名規則

小数を扱うデータ型

Oracleにおけるデータ型の指定

OracleにおけるDML命令後の処理

テーブルの作成時にNOT NULL制約を設定する

データをほかのテーブルにコピーする

検索条件に使用する記号――比較演算子

TRUNCATEによる全行削除

NULLがあるとどうなる?

ROUND()関数で四捨五入する桁数を指定する

WHERE句を使って「サンマ」を除いて集計する

Oracleにおける日付と時刻データの扱い

SQL Serverにおける日付と時刻データの扱い

SQL ServerにおけるLEN()関数

SQL ServerではSUBSTRING()関数の書き方が異なる

OracleではSUBSTR()関数を使う

Oracle、PostgreSQLにおける文字列の連結

SQL Serverにおける文字列の連結

集計結果を抜き出してコピーする

ASを使ってテーブル名を短くする

内部結合をWHERE句で行う

データベースとの橋渡しを行うソフトウェア

相関サブクエリの代わりにテーブルの結合を使う

EXISTSの代わりにテーブルの結合を使う

ビューでGROUP BYを使う

ビューの削除

拡張SQL

排他処理と競合

トランザクションに関する素朴な疑問

PR

秀和システム