2018-10-28

増田プログラマー養成講座 その13 SQL文法

前回は、データベース参考書を見た。

今回は、DBで使うプログラム言語SQL」の文法を見てみよう。

 

リレーショナル・データベース(Relational Database、RDB)とは?

WikipediaRDB説明を見てみよう。

関係データベース(relational database)は関係モデルにもとづいて設計、開発されるデータベースである

関係データベース管理するデータベース管理システム (DBMS) を関係データベース管理システム (RDBMS) と呼ぶ。

Oracle Database、Microsoft SQL Server、MySQLPostgreSQLDB2、FileMakerH2 Database などがRDBMSである

 

関係モデルIBMエドガー・F・コッドによって考案された現在もっとも広く用いられているデータモデルである

データベース利用者は、クエリ(問い掛け)をデータベースに与え、データ検索したり、変更することができる。

 

データは表に似た構造管理されるが、関係と呼ぶ概念モデル化される。

関係は組(タプル、表における行に相当する)、属性アトリビュート、表における列に相当する)、定義域(ドメイン)、候補キー(主キー)、外部キーなどによって構成される。

SQLなどに代表されるデータベース言語(問い合わせ言語)を用いて、関係に対して制限・射影・結合・和・差・交わりなどの関係代数演算(集合演算を含む)ないし関係論理演算を行うことで結果を取り出す。

関係複数持つことも可能で、互いを関連させることも可能である

要するに、

 

SQLとは?

WikipediaSQL説明も見てみよう。

SQLエスキューエル)は、関係データベース管理システム (RDBMS) において、データ操作定義を行うためのデータベース言語(問い合わせ言語)、ドメイン固有言語である

エドガー・F・コッドによって考案された関係データベース関係モデルにおける演算体系である関係代数関係論理関係計算)にある程度基づいている。

 

SQLは、シークェルと読まれることもある。

これは、SQLの元となったデータベース言語が、IBMが開発したRDBMSの実験実装であるSystem Rの操作言語SEQUEL (Structured English Query Language)」であったことが由来である

SEQUEL (Structured English Query Language)」を略して「SQL」と呼んだらしい。

 

  1. 質問する、尋ねる
  2. 問い合わせ[クエリー]を行う

英語クエリーは、質問する、問い合わせる、という意味なんだね。

 

SQL3分

SQL説明するとき、3つのグループに分類される。

 

↑このページをよく読んでくれ。理解できたらSQL説明は終わりだ!!!

 

 

 

…というと、説明することがなくなるので、ちょっとまとめておこう。

このページの「表1●SQLDDLDML,DCLの三つに大別できる。このうちプログラマが最も多く使うのはDMLだ」という図を見てみよう。

 

という3種類に分けてる。順番に見てみよう。

 

DDL(Data Definition Language:データ定義言語

データベーステーブル、ビュー、インデックスユーザーなどを作成/変更/削除するときに使うSQL

これでデータベースを使う準備ができる。

  • 「CREATE」…作成する。
  • ALTER」…変更する。
  • DROP」…削除する。

 

DML(Data Manipulation Language:データ操作言語

データ操作するときに使う。いわゆる「CRUD」のことで、SQLのうち、このDMLを覚えれば、とりあえずRDBは使えるようになる。

CRUD(クラッド)とは、ほとんど全てのコンピュータソフトウェアが持つ永続性の4つの基本機能イニシャルを並べた用語

その4つとは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)である

ユーザインタフェースが備えるべき機能情報の参照/検索/更新)を指す用語としても使われる。

 

この中で一番活躍するのは、「SELECTコマンド命令文)だろう。

SELECTは、いろんな条件を付けてデータを絞り込む/加工することができて、便利なんだ。(Excelなどの表計算ソフトよりも高機能

 

JOIN(結合)

RDBは「リレーショナル」(関係)という冠言葉が付いてることからも分かるように、関係がある表と表をくっつけて、データを加工できる。

表と表をくっつける操作のことを「結合」という。

SQLでは「JOIN」というコマンドを使って表と表を結合できる。

↑このページにある丸と丸が重なった図を見てくれ。この図は「ベン図」といって包含関係を示す図だ。図を描いて塗りつぶせば、欲しい部分が分かりやすくなるだろう。

 

結合の種類

表と表のつなげ方には、何通りかパターンがあるよ。

  • 結合は、「内部結合」(INNNER JOIN)と「外部結合」(OUTER JOIN)の2種類に分類できる。
  • 外部結合はさらに、「左結合」(LEFT JOIN)と「右結合」(RIGHT JOIN)と「完全結合」(FULL JOIN)の3種類に分類できる。

 

内部結合は単純だ。外部結合はちょっとややこしい。

外部結合は「LEFT JOIN」の形がよく使われると思うので、まず最初にLEFT JOINの仕組みを理解すれば大丈夫だろう。

(LEFTの仕組みを基準にして、RIGHTやFULLとの相違点を意識すれば、表のつなぎ方を間違えにくい?)

 

DCL(DataControl Language:データ制御言語

トランザクション」は、データ更新に失敗したとき、元に戻せる機能だ。(安全装置

  • 「COMMIT」…更新処理の確定
  • 「ROLLBACK」…更新処理の破棄

 

言葉だけだと意味が分かりづらいと思う。

Google画像検索で「トランザクション」を検索して、分かりやすそうな図解を探してみよう。

↑このページの「図1 処理失敗による不整合の発生」を見てみよう。

 

銀行で口座間の送金を考えてみる。Aさんの口座からBさんの口座へ50万円送金したい。

  1. Aさんの口座から50万円減らす。
  2. Bさんの口座に50万円追加する。

この2つの処理が両方とも成功しないと、送金は失敗だ。(Aさんは送金できてないのに貯金が減ったら怒る。Bさんは送金されてないのに貯金が増えてラッキー!)

AとBの両方が成功したら更新処理を確定する。AとBのどちらか、または両方が失敗したら更新処理は破棄してなかったことにする。(やり直し!)

これがトランザクションだ。

 

クレーム対応難易度

ちょっと話がそれるけど、トラブルの重大さ=クレーム対応難易度について考えてみよう。

  1. 人身事故 …人命にかかわる事故は取り返しがつかない。文句も一番キツイ絶対ミスがあってはならない分野のシステム開発はなるべく避けよう。
  2. 金銭絡み …(命の次に)お金大事という人は多い。人は金の話になるとシビア文句も強烈だ。決済など金銭絡みのシステムでは、RDBトランザクションを使おう。
  3. 上記以外 …その他のクレームは、それほどハードではない。匿名掲示板とか、どうでもいいゴミ情報投稿されるシステムなら、トランザクションは使わなくてもOKだろうw

 

DB管理ツール

ここまで、SQLRDB操作する方法について話した。

RDBは、SQLコマンド操作するだけでなく、DB管理ツールを使って操作することもできる。

DB管理ツールについても知っておこう。

 

この講座では「phpMyAdmin」というDB管理ツールで「MySQL」を操作した。

他にも、Google検索で「DB 管理 ツール GUI」などで探してみよう。商用だけでなく無料でも便利なソフトがたくさんあるね。

 

など。

 

SQLパズルだ!

SQLを駆使すると、欲しいデータをホイホイ取り出せる。

SQLコマンドを組み立てる作業パズルのような要素もあるので、遊びだと思ってSQLに取り組んでみて欲しい。

SQL パズル」でGoogle検索すると、いろんなテクニックが紹介されているので、時間があったらチャレンジしてみよう!

 

SQLの話は、それだけで1冊の本になるぐらい広範だ。今回は、SQL概要説明するだけになってしまった。

SQLの詳細については、前回紹介したSQL参考書などを読んでみてね。

 

まとめ

 

次回は、データベースを使ってWebアプリを作ってみよう!

データベースって便利だな~~~!!!」と実感して欲しい。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマ養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマ養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマ養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマ養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマ養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマ養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマ養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマ養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマ養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマ養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマ養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマ養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマ養成講座 その13 SQL文法 ←★今ここ★

anond:20181031014212 増田プログラマ養成講座 その14 Webアプリの試作品作成

anond:20181024214737 増田プログラマ養成講座 コンテンツ一覧

記事への反応 -
  • 増田式プログラマー養成講座 コンテンツ一覧

    コンテンツが増えてきたので、一覧ページを用意します。   anond:20181016015826 増田式プログラマー養成講座 その1 パソコンの用意 anond:20181016164341 増田式プログラマー養成講座 そ...

    • 増田式プログラマー養成講座 その1 パソコンの用意

      自宅と会社のプログラミングの環境(機材、ソフトなど)を教えて?   (例) 自宅:パソコンを持ってない。スマホ(iPhone7)のみ。 会社:パソコンのスペック(OS、CPU、メモリ、HDDの...

    • 増田式プログラマー養成講座 その2 プログラム=データ+処理

      プログラムとは何か? プログラムは、コンピューター(電子計算機)に与える指示書のこと。 人間がプログラム(コード)を書いてコンピューターに与えると、コンピューターはプロ...

    • 増田式プログラマー養成講座 その3 構造化=順次、反復、分岐

      それではさっそく、一番簡単な手続型プログラミング言語の使い方を学んでみよう。   今回学ぶこと 手続型のキーワードは、「順次」「反復」「分岐」の3つ。(この3つの動作は人...

    • 増田式プログラマー養成講座 その4 子ども向け教材「Scratch」

      今回は、子ども向けプログラミング学習教材「Scratch」(スクラッチ)を使って、一番簡単な構造化プログラミングの手法を学んでみよう。   Scratchとは何か? Scratch (プログラミング言...

      • anond:20181016193144

        おお、4歳児にプログラム教えたいんで ちょうどスクラッチのこと知りたかった ありがとう

    • 増田式プログラマー養成講座 その5 オブジェクトとは何か?

      今回は、手続型プログラミングの後半となる「オブジェクト指向プログラミング」(OOP)について学ぼう。 OOPは内容が多いので数回に分けて説明してみます。(説明が下手だったらフォ...

    • 増田式プログラマー養成講座 その6 OOPの種類、PHPの準備

      前回は、オブジェクトの説明をした。 今回は、オブジェクトの使い方=オブジェクト指向プログラミング(OOP)を学ぼう。   OOPの種類 オブジェクト指向プログラミングには、 クラス...

      • 増田の致命的な欠陥!?

        増田でプログラミングの記事を書こうと思ったら、コードが貼り付けられなかった。 スクリプトの記述はエスケープされてしまい、はてな記法も使えなかった。 仕方ないので、コード無...

        • anond:20181017192611

          Qiitaでやれよ

          • anond:20181017192644

            Qiitaって評判悪いね?   Qiitaは潰れて欲しいのに・・・ https://anond.hatelabo.jp/20181017203823 Qiitaで何があったのか https://anond.hatelabo.jp/20150127003906

            • anond:20181018075427

              殺人犯出してる増田の評判にはかなわない

              • anond:20181018142423

                増田の殺人犯T氏はQiita評判低下の原因のK氏を熱心に擁護してたから、Qiitaは実質増田

        • anond:20181017192611

          ブログでやれ

        • anond:20181017192611

          スーパーpre記法(シンタックス・ハイライト)だめなん?

      • プログラムの実行環境の用意

        PHPの実行環境として、XAMPPを用意してもらったけど、これは後でデータベースの練習をすることも考えてチョイスしました。 =MySQLを使って「SQL」(問合型言語)の練習をするため。 だ...

    • 増田式プログラマー養成講座 その7 OOPの仕組み(前半)

      前回は「オブジェクトとは何か?」を説明した。 今回はオブジェクトの使い方=オブジェクト指向プログラミング(OOP)で用意されている仕組みを見てみよう。 とりあえずPHPで仕組みを...

      • 不等号の増田記法 < >

        文字実体参照一覧 http://rinrin.saiin.net/~aor/hms/cer 数値文字参照を使えば、増田で半角文字の不等号が書ける。 不等号 小なり < (<) < (<) < (&60;) 不等号 ...

      • anond:20181019181549

        しっかり書き続けてくれていて嬉しい

    • 増田式プログラマー養成講座 その8 OOPの仕組み(後半)

      前回に続いて、今回もオブジェクト指向プログラミング(OOP)の基本的な仕組みを見ていこう。   教材は、ドットインストールのPHP入門です。 PHP入門 (全30回) - プログラミングならド...

      • anond:20181020230044

        誰も読んでねえしつまんねえしセンス無いから止めた方がいいぞ

        • anond:20181020230633

          あー、別に全然構わないけど? これはある意味、かつての自分に向けて書いている手紙なんだ。 自分が初心者だったときに、聞きたかった説明を勝手に増田に書いている。 自己満足で...

          • anond:20181020231617

            受け取り手のことを考えずに 誰にも求められてないことをベラベラ話すのがまさにキモオタの特徴 こういう奴がいるからエンジニアの印象が悪くなる

            • anond:20181020232302

              テレパシーがないのに、見えない相手のプロファイリングができるわけないじゃんね?w 対面で話すなら、相手に合わせられるけどねw

              • anond:20181020233005

                物書きは見えない読者を想定して文章を作る 技術者のドキュメントも同じ これができない奴はどんな仕事やらせても駄目だろうな 言われたものを作るだけで責任の無い末端技術者で終...

                • anond:20181020233446

                  ペルソナは想定してるに決まってるじゃんw →初心者

                • anond:20181020233446

                  まあ、おまえには説明できないことは、自明ですが? いるよねー、口先だけ達者な奴。 他人に騙されないためには「言ってることじゃなく、実際にやってること」を見る必要がある。(...

        • anond:20181020232302

          ならおまえが説明してみろや? 添削してやってもいいぜ? おまえは口先だけの能無しだから、書けるわけねえけどなw(確信)     …と煽れば、もしかしたら顔を真っ赤にしたスー...

        • anond:20181020230633

          新人の部下に教育ができない無能な上司? 上司がアホだと部下は苦労するよね?

    • 増田式プログラマー養成講座 その9 MVCフレームワーク

      前回はオブジェクト指向プログラミング(OOP)で使う様々な仕組みについて学びました。 今回はOOPでWebアプリを作ってみよう!   今日学ぶこと MVCフレームワークとは? PHPのMVCフレ...

      • anond:20181022232327

        PHPのスクリプトを増田に投稿するとき、「<」や「>」をエスケープしないで記事を書いてたら、IPアドレスでアクセス制限がかけられてしまった。 =はてなの他のサービスのWebペー...

        • anond:20181022233535

          今見たら、増田にアクセスできるようになってた。 アクセス制限されても、数時間経ったら自動的に制限が解除されるのかも? Thank you! → はてなの中の人

      • anond:20181022232327

        悪いことは言わない Laravel使っとけ

    • 増田式プログラマー養成講座 その10 OOPの参考書

      前回はオブジェクト指向プログラミング(OOP)の使いどころを学ぶために、MVCフレームワークを使ってみました。(ほんの触りだけ) 今回はOOPの理解を助けるための参考書を探してみま...

      • anond:20181023184616

        データベース、SQLの使い方をどうやって説明するか?検討してみた。 RDBはMySQLを使用=XAMPPのMySQL+phpMyAdminですぐに練習できるから。   RDBの仕組み RDBの歴史 RDBの概要 SQL誕生の背景...

        • anond:20181024000744

          IT企業のプログラミング研修資料 はてなの研修資料が公開されている。 はてな研修用教科書 https://github.com/hatena/Hatena-Textbook LLはPerl、関数型はScalaで勉強してるんですね?(他には、Jav...

          • anond:20181024003352

            「IT 企業 研修 資料 まとめ」でググったら、一覧を作ってくれてる人がいた。 IT 企業 研修 資料 まとめ - Google 検索 https://www.google.co.jp/search?q=IT+%E4%BC%81%E6%A5%AD+%E7%A0%94%E4%BF%AE+%E8%B3%87%E6%96%99...

            • anond:20181024124651

              各社のIT研修資料をざっと見てみた。 IPA はてな ドワンゴ の資料が、体系的にまとめられているような気がした。   しかし、これは講師が授業で使うかんじのまとめ方をされている...

        • anond:20181024000744

          そもそもだけど、勉強は、 興味 教材 時間 という3つの条件さえ整えれば、誰でもできるようになる。 それはちょうど植物を育てるようなもので、種・土壌・水や空気、日光や温度...

        • anond:20181024000744

          昔の自分を振り返ると、とてもせっかちで「先に結論を言って!」というかんじだった。 (インスタントに慣れ過ぎていて、時間のかかるものはじれったくて待てない。)   昔の自分...

    • 増田式プログラマー養成講座 その11 データベースを使ってみよう

      前回まで手続型言語の基本(構造化プログラミング、オブジェクト指向プログラミング)を見てきた。 今回から問合型言語のSQLを学び、データベース(DB)を使ってみよう。   データベ...

    • anond:20181024214737

      ブクマありがとうございます。ちょっとバズってたみたいでビックリしました! 増田式プログラマー養成講座 コンテンツ一覧 http://b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20181024214737   アク...

    • anond:20181024214737

      臨時のJava入門講座 この講座を書くきっかけとなった増田(未経験からのプログラマーなんだが全然分からない 2018-10-15)を改めて読んでみると、 10月からプログラミングを始めた。 ...

    • 関数型プログラミングの教材は何を使ってますか?

      プログラマーの増田は、新人(初心者)に関数型プログラミングを教えるとき、教材(言語、書籍、ツールなど)には何を使ってますか? まずは「Lisp」か「Scheme」を使ってみる。Scheme...

      • anond:20181101234844

        C#、Javaなど、実際に業務に使う言語でラムダ式使わせとけば十分だろ

        • anond:20181101235458

          そうだな。 新人にはラムダ式の書式でも教えておけば十分だな? (関数型と論理型の説明は有料コンテンツでやろうw)

          • anond:20181102002040

            ワイ関数オタク、Calculus of Inductive Constructionsの勉強をしようとするも英語が苦手で挫折 日本語の資料ないんか・・・?有料でいいから・・・

    • anond:20181024214737

      始点が初心者なのはツリーの応答とかで分かったけれど、終点はどこなんだろう?

  • 増田式プログラマー養成講座 その14 Webアプリの試作品を作成

    前回は、SQLの文法を学びました。 今回は、データベースを使ったWebアプリの制作を通じて、SQLの使い方を確認してみましょう。   Webアプリとは? Webブラウザー(Google Chromeなど)で動...

  • 増田式プログラマー養成講座 その15 Webアプリの完成見本

    前回は、Webアプリのモックアップ(ハリボテ)を作るところまでやりました。 今回は、Webアプリの機能を実装してみましょう!   学習の狙い データベースを使ったWebアプリを作って、...

  • 増田式プログラマー養成講座 その16 Webアプリの完成見本(続き)

    「anond:20181101225335 増田式プログラマー養成講座 その15 Webアプリの完成見本」の続きです。   index.phpの編集 Webサーバーの時間設定がズレていると、メッセージを作成したときに、作...

  • 増田式プログラマー養成講座 その17 Webアプリの骨組み

    前回は、Webアプリの完成見本を先に見てみました。 今回は、Webアプリを作る途中の過程を見て、作る雰囲気を一緒に味わってみましょう。   フレームワークの使用ルール=「設定より...

  • 増田式プログラマー養成講座 その12 データベースの参考書

    前回は、MySQLとphpMyAdminを使って、リレーショナル・データベース(RDB)を少し触ってみた。 今回は、RDBの使い方や仕組みについて理解を深めるための資料を探してみよう。   本 本は、...

  • 増田式プログラマー養成講座 その18 SQLでデータの追加と取得

    前回は、Webアプリの骨組み(スケルトン)までを作って、製作の過程を見てみました。 今回は、データベースのCRUD操作を行なって、チャットのメッセージを追加/取得/変更/削除する...

    • anond:20181104233013

      #GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOST#GOODPOS...

  • 増田式プログラマー養成講座 その19 SQLでデータの更新

    前回は、Webアプリの骨組み(スケルトン)に、SQLでデータの追加と取得をやりました。 今回は、SQLでデータの更新をやりましょう。   メッセージの更新 SQLの「UPDATE」を使えば、デー...

    • anond:20181110120715

      あのさ、こういうプログラムって3分ぐらい頑張ればなんでもできるようにならないの?

      • anond:20181110121013

        ならないね。でも外野から見て何でそんなめんどくさいこと悩まないといけないのかわかりにくいのも事実。

        • anond:20181110121318

          プログラミングは、数学と同じで扱うアルゴリズム(解法)次第で難易度が変わる。 それ以外は「難しいんじゃなくて面倒なだけ」 イメージとしては、単純な足し算や掛け算を100回...

      • anond:20181110121013

        ドットインストールの説明動画は3分程度で区切られてるね。 余計なことを省いて、本質だけ=1回に1項目だけに絞れば、3分を1単位にして説明できると思う。 ありがとう。参考に...

  • 増田式プログラマー養成講座 その20 SQLでデータの削除

    前回は、SQLでデータの更新をやりましょう。 今回は、SQLでデータの削除をやりましょう。   メッセージの削除 データの更新はSQLの「UPDATE」を使いました。 データの削除はSQLの「DELET...

    • anond:20181110182445

      正直、SQLの説明は失敗だった。ごめんねw SQLの説明じゃなくて、MVCフレームワークの使い方の説明の方が長くなって、自分でも見にくいと思った。   やり直すなら、まずはフレームワ...

      • 分かりやすい教材で選ぶならJavaScriptもあり?

        増田のアドバイスで、初心者には「JavaScript」が推奨されてた。 https://jgthms.com/javascript-in-14-minutes/ JavaScriptはプロトタイプの説明を後回しにすれば分かりやすいかも?

        • anond:20181110192400

          プロトタイプが肝だろ、と思うが、下手に難しく書くよりは、初心者は素直にダラダラ書いた方がまだ読める というか、自分でも頭が未だに混乱することがある Schemeからやってきたくせ...

  • 増田式プログラマー養成講座 その21 データベース設計 (1)要件定義

    前回まで、データベースを使ったWebアプリを作成して、SQLの使い方を学びました。 今回から、データベースの設計について学んでみよう。   参考書 anond:20181026145516 増田式プログラ...

  • 増田式プログラマー養成講座 その22 データベース設計 概念→物理

    前回は、DB設計の(1)要件定義を学びました。 今回は、DB設計の(2)概念設計、(3)論理設計、(4)物理設計を見てみましょう。   DB設計の流れ 要件定義 概念設計 論理設計 物理設計   ...

    • 1ヶ月でJavaをマスターする学習カリキュラム

      どうやったらプログラミング未経験者を1ヶ月で一人前のJavaプログラマーにできるだろうか?   基礎 JavaでOOP デザインパターン テスト IDE(IntelliJ IDEA等) ツール(Maven、Gradle等) ...

      • 学習用のプログラミング言語の選定基準

        型について考えてみる 個人的には、 最初に、動的型付けの言語を使ってみる。 次に、静的型付けの言語を使ってみる。 最後に、型推論が強力な言語を使ってみる。 という順番がい...

  • 増田式プログラマー養成講座 その23 SQLを巡る物語

    前回は、データベース設計について学びました。 今回は、その他のデータベースの話題について見てみましょう。     リレーショナル・データベースの理論 問合型言語のSQLは、「関...

記事への反応(ブックマークコメント)

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん