MySQLを本当にマスターするには?


13

PHPを使用しているのと同じ時間、mysqlを使用しています。ただし、PHPには10倍の自信があります。または他のプログラミング言語。しかし、私は本当にSQLを本当に把握しているようには見えません。つまり、選択、更新、挿入、削除、結合などを行うことができますが、より複雑なものになると失われます。より複雑なselect文の書き方、インデックスの適切な使用方法、使用するエンジンなど。

何らかの理由でmysqlのドキュメントを理解するのは難しいが、phpのドキュメントは理解しやすいと感じています。

多分私の頭脳は、プログラミングがそれ以来、SQLを混乱させるような方法で配線されていると思い始めています。知りません。ほとんどの人は、Regexが非常に混乱していると考えていますが、私にとっては、SQLステートメントを作成する方法よりも科学的に理にかなっています。誤解しないでください、私はSQLが嫌いではありません。本当に気に入っています。もっとよく理解したいだけです。

MySQLを本当にマスターするための最良/最速の方法は何ですか?

私が「マスター」と言うとき、私は教祖のグルを意味するのではなく、私が助けを必要とせずに私自身で私が尋ねる質問のほとんどを理解するのに十分賢いことを意味します。


2
SQLまたはMySQLについて話しているのは、それらが非常に異なるものになる可能性があるためです。レプリケーションの設定と管理は、複雑なSQLクエリの作成とは非常に異なるタスクです。これも時間の関数だと思います。「同じ時間」使用していたとしても、SQLを使用するよりもはるかに多くの時間をPHPの作成に費やしてきました。
スティーブンエバーズ

@SnOrfus PHPでより多くのコードを記述することについて、良い点があります。MySQLは、これまで使用した唯一のリレーショナルデータベース言語です。「SQL」と言ったとき、私はそのタイプの言語全般を意味していました。
JDイザックス

役に立つことをしてください。現実の世界で遭遇する可能性のあるさまざまな問題を探ります。このようにして、教科書理論よりも複雑なシナリオを探求するように導きます。コンソールでテストし、PHPを使用せずに目的の結果を取得できるかどうかを確認します。たとえば、スタンフォード大学が立ち上げた無料のデータベース紹介クラスには、ソーシャルネットワークに関連するいくつかのクールな演習があります。
ジェームズP.

多くの人がPHPを嫌っています(さまざまな理由で、一部は非常に優れています)が、そのドキュメントは優れています。PHPドキュメントをMySQLドキュメントよりも理解しやすい理由の1つは、言語の性質ではなく、ドキュメントの性質です。
TRiG 14

回答:


10

これを使って

リレーショナルデータベースの仕組みを内部化することは、多くの人にとって困難ですが、非常に価値があります。SQLをさらに使用するにつれて、SQLが脳に働きかけます。自分を押し続けてください。

何かがおかしいと思われる場合は、調査します

Chromeでは、この検索エンジンを設定して、「m [検索クエリ]」と入力するだけでドキュメントを検索します(dev.mysql.comの検索は最悪です):{google:baseURL} search?{google:RLZ} {google:acceptedSuggestion} {google:originalQueryForSuggestion} sourceid = chrome&ie = {inputEncoding}&q = site:dev.mysql.com/doc/refman/5.1/en+%s

ドキュメントに回答がない場合は、freenodeの#mysqlにアクセスして、誰かが洞察を提供できるかどうかを確認します。

読んだ!

リレーショナルデータベースがどのように機能するかを理解したら、作成している魔法のクエリでMySQLが何をしているのかをもう少し知りたいと思うでしょう。High Performance MySQLを強くお勧めします。時間を割く価値があります。


1
良いニュースは、あなたがお勧めする本をすでに持っているということです。ありがとう!Chrome検索の設定方法については、+ 1をご覧ください。
JDイザックス

私は本を​​持っていますが、まだ読んでいません。
crosenblum

@tehShrikeクロムでどうやってそれをしましたか?
jaybny 14年

@jaybnyのURLバーを右クリックして、「検索エンジンの編集」に移動します
TehShrike 14年

9

何よりもまず、結合について完全に理解してください。内部結合と左結合だけではありません。クロス結合の機能と完全な外部結合を理解します。特定の種類の結合を選択する状況を把握してください。それらは互換性がなく、左結合を使用するクエリは、内部結合を使用するクエリとは異なる結果を返す可能性があることを理解してください。(それは自明だと思うかもしれませんが、私は人々が問題を決定する際に、いくぶんランダムに異なる結合を試みるという質問を読みすぎました。)

次に、集計とその仕組みを本当に理解します。Mysqlを使用すると、標準的な方法でグループ化を行わなくても済みます。ただし、group by句を適切に完全に定義する規律があります。これは、あなたが何をしているかを理解するのに役立ち、知識を他のデータベースに簡単に転送できるようにします。

ケースステートメントが何をするかを学びます。

複雑なクエリを実行するときは、まとめて作業することを学びます。各チャンクで、期待する結果が得られていることを確認します。したがって、たとえば、過去3か月以内に返品された注文、返品の理由、および顧客の連絡先に関するレポートクエリを作成する必要があるとします。最初のステップは、過去3か月間に返品された注文を取得することです。あなたがその固体を持っているとわかったら、返品の理由に関する情報を追加できます。その固体が得られたら、それを返した顧客を追加できます。その固体が得られたら、その人の連絡先情報を追加します。各段階で結果を確認し、意味があるかどうかを確認します。この場合、返された注文ごとに1つのレコードだけで終わる可能性があります。中間段階で結果の数が増減する場合、クエリに問題があることがわかります。ビルディングブロックでは、情報が正しいかどうかを確認するためだけに追加のフィールドを表示したい場合があります。これらを別の行に入れて、次のステップで作業中にコメントアウトします(正しいとわかったら最後に削除します)。結果がどのように見えるかを完全に理解しないと、複雑なクエリを正しく実行できません。いくつかの結果が返されたため、見た目は問題ないと思われますが、ほとんどの場合、間違った結果が得られることがほぼ保証されます。m右)そのため、別のリンクルを追加するとクエリがおかしくなった場合、簡単に確認できます。結果がどのように見えるかを完全に理解しないと、複雑なクエリを正しく実行できません。いくつかの結果が返されたため、見た目は問題ないと思われますが、ほとんどの場合、間違った結果が得られることがほぼ保証されます。m右)そのため、別のリンクルを追加するとクエリがおかしくなった場合、簡単に確認できます。結果がどのように見えるかを完全に理解しないと、複雑なクエリを正しく実行できません。いくつかの結果が返されたため、見た目は問題ないと思われますが、ほとんどの場合、間違った結果が得られることがほぼ保証されます。

以下に、SQLで考えなくてもできる基本的なことのリストを示します。

  1. 最初に、結合なし(および選択*なし)で、選択の条件があるまっすぐな選択
  2. 2つ以上のテーブルを結合し、すべてのテーブルにあるレコードを取得する方法を知っている必要があります。
  3. 2つ以上のテーブルを結合し、すべてのテーブルにあるレコードを取得する方法を知っておく必要がありますが、1対多の関係の多面性を持つテーブルからレコードを1つだけ返します。
  4. 1つのテーブルでレコードを取得できるはずですが、関連するテーブルでは取得できません
  5. レポートのデータを集約できるはずです
  6. 1つのレコードをテーブルに挿入できるはずです
  7. テーブル内の1つのレコードを更新できるはずです
  8. テーブル内の1つのレコードを削除できるはずです
  9. カーソルなしでレコードのグループをテーブルに挿入できるはずです
  10. カーソルなしでテーブル内のレコードのグループを更新できるはずです
  11. カーソルなしでテーブルのレコードのグループを削除できるはずです
  12. 1つのトランザクションで複数のアクションを実行し、エラートラップを処理できる必要があります。
  13. レコードの結合を作成し、UNIONを使用するタイミングを知ることができるはずですUNION ALL
  14. いくつかの基準に基づいて1つのフィールドのデータを変更できるはずです(CASEを使用)

基本的なSQLの知識に慣れたら、データベース構造を理解してください。構造を理解しており、どこに保存されているかを考える必要がないため、他の人よりもはるかに高速にサポートする非常に複雑なデータベースに対して複雑なクエリを作成できます。テーブル構造と外部キーの関係、ルックアップ値の保存場所と列の意味(名前だけでなく、列に保持されているデータ)を理解している場合、そのデータベースのクエリの専門家になることができます。新しい仕事で最初に行うことは、db構造を完全に理解することです。


3

SQLを学ぶための私の意見では(これは本当にあなたが求めているものであり、MySQL固有のものは後で来る可能性があります)、PHPスタイルのプログラミングの制御フローから自分を取り除く必要があります。宣言型言語のパラダイムで具体的に考えてください:

SQLは、その方法ではなく、あなたが望むものを定義します。後者を精神的に取り除けば、前者が間に合います。このレイヤーを思い浮かべて、MySQL(またはOracleなど)がどのように心配するかを考えてください。

アプリケーションロジックは、SQLとPHPの手続き型/ OOコードで発生する可能性があります。たとえば、データベースに対して何かを照会する場合、複数の事前照会を行う代わりに、ユーザーテーブルと許可テーブルを一貫して結合して、適切な権限を確保できます。insert into ... select ...データの検証を確実にするために、名前付きの値の代わりに同様の選択()を使用して挿入を行うことができます。

とにかく、Codd primativesに焦点を合わせ、選択、投影、結合、結合、違いを理解することを強くお勧めします。結局のところ、概念は単純明快であり、おそらくそれらを介してやりたいことの80%を達成することができます。残りは従うことができます。


第2段落の素晴らしいアドバイスに+1を付け、そのように考えたことはありません!
JD Isaacks

2

何かを「マスター」するために見つけた最も早い方法は、それに挑戦することでした。一連のデータを取得し、クエリする8〜10の異なる項目を書き留めます。あなたが最も近い整数に四捨五入された成績点の平均によってグループ化された全員の平均年齢を見つけたいかもしれない学生のグループ。次に、それらのクエリを作成します。1つのテーブルから始めて、さらに追加します。練習データの結合と組み込み関数。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.