• 締切済み

新人の頃皆さんどうやってSQL勉強しました?

職場で沢山仕様書を読んで沢山のSQL文を作成するしか方法ないのでしょうか 私の職場はプログラムの修正が多いため新規に仕様書からSQL文を 考える機会が少なく、今あるSQL文に項目を追加するというパターンが おおいです。そのため、複雑な仕様のSQL文を経験する機会が少ないです。 しかも、仕様書を作らずメモ書きや口頭でのプログラム作成が多いため 仕様書がなかったり古かったりで既存のコードからのSQL文の勉強 が難しいです。 皆さんは新人時代どのようにSQL文をマスターしましたか? 独学方法等を教えてください

  • Oracle
  • 回答数4
  • ありがとう数2

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

基本的に本で独学でした。 当時主に参考にしたのは ・標準SQLガイド(C.J.DATE アスキー) ・SQL92/99標準リファレンスブック(マーチン・グルーバー ピアソン・エデュケーション ・プログラマのためのSQL(ジョー・セルコ) SQL92・99準拠 ・SQLパズル ・Oracle8i&UNIXパフォーマンスチューニング ・ORACLEハイパフォーマンスチューニングSQL編 ・ORACLE9i ハイパフォーマンスチューニング―STATSPACK編(廃版) ・データベースパフォーマンスアップの教科書 基本原理編 あたりでしょうか。「SQLパズル」は「SQLでこんなことができるのか」と驚かせてくれましたが、一方で「何でも無理にSQLで処理するのは避ける」きっかけになりました。 パフォーマンス・チューニングは学ぶと奥が深いですね。OSやストレージ、ネットワークの総合的な知識が求められます。 今は開発ライセンスでOracleを自分のPCにインストールして試せますし、GUIで実行計画が見られるSQL Server の Express版もあります。 実際にSQLを結構簡単に試せるので本を読みながらSQLとその実行計画を確認したりすることをお勧めします。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

私も同様の経験からSQLをマスターしました。 途中で気付いたことは「論理を組み立てる」 ということです。同業者のなかには力づくで モノにした人もいますが、こういう人達は経験 のある所はできますが、未知の分野になると 知っている範囲からしか解決できないので、 強引な手法を採りがちです。 データベースの設計から、目的の情報を抽出 するための理論と順序を紙に書くことを進め ます。稀に理論が破綻することがあります。 これはデータベースの設計と要求された条件に 齟齬がある場合です。 いずれにしても「論理の組み立て」は重要です。 SQLの意味は「問合せを組み立てる言語」です。 簡単なものを組み上げて複雑な解を得るのは プログラムの基本でもあります。

回答No.2

SQL文は集合をあらわす言語なので、SQL文をみて集合をイメージする訓練がいいのではないでしょうか。 その集合を他にどんなSQLで現せるか、色々なパターンを考えてみたり、それらがパフォーマンス的にどう違うのかをテストしてみたり、ここにインデックスがあったら効率がよさそうだとか、テーブル構造がこうだったらもっとシンプルになるのにとか、いろんなパターンを考えられると思います。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

SQLというのはすごーく簡単な構文しか無いじゃないですか? 簡単な英語さえ知ってれば覚える必要はありません。そういう風に出来てるのだから。覚えるより調べ方を知る事でしょうね。 SQLで大事なのは構文の効率を考える事。SQLの内部処理を理屈で理解しないと、恐ろしい構文を作る人が居ます。「SELECT * 」を頻繁に使うなど。SQLの命令文はプログラムの塊だという事をちゃんと知りましょう。 そもそもSQLとはデーターベースそのものを管理するデバイス一体の言語だという事。DBAの知識が無いと構文なんか書けても何も意味有りません。 ファンクションにするか、ストアドにするかトリガーにしてルールにするか。DBAとして理解してください。 それとトランザクションをどこで区切るか、ロールバックをしていいのかしないのか。全てはDBの性質、ハードのキャパに結びついているわけですから、本来は業務から入る必要があるわけで、そういう意味でIT屋よりも業務が解る人が簡単に覚えられるように出来ているという事です。 >皆さんは新人時代どのようにSQL文をマスターしましたか? まず昔はSQL自体がIBM製品だけでありそこで覚えちゃいました。でもIBMのハードはOSにDB組み込みなので効率を考えなくてもある程度出来てしまった。 本当に理屈で知ったのはオープンなシステムから。サイベースのSQLSERVERですが、マイクロソフトにライセンスを売る前のSQLSERVERです。UNIXですね。マイクロソフトにライセンスを売ってからはPCでも動くようになり、個人でも使えるようになったので実験しやすくなります。その頃はMSも解説書をだしてましたから。とにかく今よりPCもひ弱だし、すぐDBが壊れるのでおかげでハードに負担なSQL文と言うのを理解できました。 http://www.shoeisha.com/mag/dbm/ 今ならこんな雑誌で全然問題ないと思いますけど。

関連するQ&A

  • 複雑なSQL文を独学する方法

    プログラマ2年目なのですが仕様書を解読して SQL文を自分一人で作成する事が中々できません 先輩に作ってもらったりヒントをもらったりする事が 多々あります。そのため、先輩に「なんでわからないの」 とあきれ口調で怒られます。 独学しようと思っても本で得られるのは単純なSQL文です 仕様書の文章を何度も何度も読み返しても答えとなるSQL 文が浮かんできません。 質問 1.仕様書の読解方法 2.独学方法 3.参考ホームページ 4.仕様を自分で考えて作る時の対象システム 5.SQLのよくある仕様パターン 6.ユニークなSQL文のサンプル 7.仕様プラスSQL解答例が載っているようなホームページOR参考書 上記一つでもいいのでご回答ください。より多くの皆さまからのご回答 をお待ちしております

  • SQLスクリプトを自動生成する方法

    SQL-Serverに作成したテーブルのCreate文を ツールや既存昨日で作成する方法がありましたら教えてください。 よろしくお願い致します。

  • 1行のSQL文を改行するツール

    お世話になっています。 タイトル通りの質問です。 プログラムにてSQL文を作成して発行しています。 そのSQL文が1行で見づらい為、SQL文を分解しインデントを付けて見やすくしてくれるツールはないでしょうか? ※以前どこかの現場であったような気がするのですが思い出せません。 フリーソフトでした。 仕様的には、 1.SQL文をコピーする。 2.そのEXEをダブルクリックする。 3.エディタに貼り付ける。 この様な簡単な操作でした。

  • SQLを教えてください

    ORACLE更新する際のSQLで困ってますので、SQLを教えてください。 TABLE1の中に項目MEMO(15桁)が存在します。 このMEMOに入っているデータは以下のとおりです。 MEMO 090-XXXX-XXX1 090-XXXX-XXX2 090-XXXX-XXX3 A B C 090-XXXX-XXX4 090-XXXX-XXX5 090-XXXX-XXX6 このデータの中で、上3行のデータ(090-XXXX-XXX1~090-XXXX-XXX3)のデータを 下3行のデータ( 090-XXXX-XXX4~ 090-XXXX-XXX6)のように 1桁目をスペースする形で統一したいと思います。 更新後のデータは以下のとおりです。 MEMO 090-XXXX-XXX1 090-XXXX-XXX2 090-XXXX-XXX3 A B C 090-XXXX-XXX4 090-XXXX-XXX5 090-XXXX-XXX6 このような場合のSQL作成方法はどのようにしたらいいのでしょうか? WHERE文については、 WHERE SUBSTR(MEMO,1,1) <> 'A' AND SUBSTR(MEMO,1,1) <> 'B' AND SUBSTR(MEMO,1,1) <> 'C' AND SUBSTR(MEMO,1,1) <> ' ' これでいいのかなと思うのですが、 作成方法について教えて頂きたく思います。 よろしくお願いします。

  • SQLのパラメータ・・

    たびたびお世話になっております。 顧客マスタの新規コードを、最大値に1を足して生成しています。 既存の顧客コードの最大値を求める為、 Dim mySQL as Stirng,Rst as Recordset mySQL="SELECT Max(局コード) AS 局コードの最大, 会社コード FROM 顧客マスタ GROUP BY 会社コード HAVING (会社コード=[Forms]![フォーム]![テキスト1]);" Set Rst = CurrentDB.OpenRecordset(mySQL) というSQL文をかきました。 ところが、SQLをレコードセットにすると「パラメータが少なすぎます。1を指定してください(3061)」というエラーメッセージが出てしまいます。 クエリーを作成して実行しても正しい結果を返すのに、SQLだとダメなのはなぜなのでしょうか。 どうぞよろしくお願いいたします。

  • SQL*PLUSに関して

    標記の件に関しまして 私はデータベースに関する知識は全く無いのですが SEが私のクライアントに設定した SQL*PLUSを使用してた売上データベースからのデータの抽出 機能がありまして これとは違う条件でのデータ抽出が必要となり 何とかSQL文を部分的に加工して目的が達成できるかどうか 調べているところであります。 ■疑問点■ SQL*PLUSのコマンドファイルは既に作成されていて @~でメモ帳ファイルに記述されているSQL文を 指定すればSPOOLでデータが別のテキストファイルに 抽出されるようになっているようです。 この場合に 既存のSQL文が記述されているメモ帳ファイルの抽出条件を 加工してコマンドにて加工後のファイルを@~で実行すれば 必要としているデータを抽出することができるでしょうか? あと 現在使用しているSQLで下記の部分が共通して記述されて いるのですがこれはどういった意味でしょうか。 SET ECHO OFF SET HEADING OFF SET PAGESIZE 0 SET FEEDBACK OFF SET LINESIZE 30000 SET TRIMSPOOL ON SPOOL C:ファイルの場所 ■ここに抽出条件があるようです。■ SPOOL OFF EXIT 0; 大変申し訳ございませんが 現在はSEから購入したシステムから紙ベースで 出力して手作業で入力を行っているため 何とかデータベースから直接抽出できないか 模索しているところであります。 アドバイス頂けますでしょうか。 宜しくお願いします。

  • VBで使用するAccessのSQL(INSERT文)

    VBで使用するAccessのSQL(INSERT文)ですが、 下記のようなSQLはどのようにすれば良いのでしょうか? テーブル:A フィールド:B(Text型),C(Yes/No型) 作成したいSQL文: Textに空白、Yes/NoはTrueを入れ、 既存のフィールド内の一番下に 作成(追加)する。

  • SQLが実行されません…

    mysqlDB処理を幾つか行うPHPプログラムを作成しています。 処理内では複数のSQLを実行するのですが、 実行後、毎回1つのSQLが実行されていません… 実行されないSQLはいつも違うSQLです。 実行されなかったSQLのエラー文を出力してみた所 'Transaction already aborted' from NDBCLUSTER と表示されていました。 これはどういった意味を指すのでしょうか? 詳しい方がおられましたらご回答お願いします。

    • ベストアンサー
    • MySQL
  • SQL文の作成

    こんにちわ。 JAVAプログラム上でデータベースを使用して データを取得したいのですが、 SQL文が複雑でわかりません。 一度データを取得して、その値を基に次に参照するカラムが変わるというものなのですが、一度にできるものでしょうか? どなたかお力添えよろしくお願いします。

    • ベストアンサー
    • Java
  • SQLについて

    以下のSQLを作成したいのすが 実現方法が判りません お助けください。 環境:SQL SERVER2008 実現したいこと 明細テーブルの挨拶項目にマスターA・Bからメッセージを取得したい。 基本はAマスターのメッセージを取得 コードを1つのグループとして扱いマスタBに合致する場合 マスタAでは無くてマスタBのメッセージを取得したいです。 よろしくお願いいたします。 具体的に取得したい結果は ☆望む結果になります。 コードは必要ないのですが、 判別の為一緒に表示いたしました。 マスタA 挨拶 メッセージ 000601 おはよう 000602 こんにちは 000603 こんばんは 000604 お休みなさい 000605 就寝中 マスタB(最大3つまでの組合せです) 挨拶1 挨拶2 挨拶3 メッセージ 000601 000602 000603 おはようございます。 000602 000603 こんにちは・こんばんは 明細テーブル コード 挨拶 000153 000601 000153 000602 000153 000603 000154 000602 000154 000603 000155 000604 000156 000605 ☆望む結果 コード メッセージ 000153 おはようございます。 000154 こんにちは・こんばんは 000155 お休みなさい 000156 就寝中