Tips集とりあえずこれだけ知っとけSQLこの文章は、ある程度プログラム等の知識があるが、データベースについてはあまり知らないというひとを対象に書かれています。略で、構造化問い合わせ言語という意味になります。SQLを覚えるメリットは、これさえ覚えておけば、どんなデータベースにも同様の方法でアクセスできることです。データベースのシステムによって、多少の方言はありますが、基本は同じです。ここでは、データベースの管理よりも、データベースの使用、あるいはデータベースを利用したアプリケーションの開発等の際に、重要になってくるであろうSQLを中心に、例を多用して解説します。必要と思われるもの、重要と思われるものだけを抜粋して解説していますので、下記で解説されるのは、SQLの『一部』でしかないことを了承ください。前提データベースが存在し、そこには、ash_tableという名前のテーブル(表)が存在するとします。55それぞれの意味は、連番、名前、読み(平仮名)、あと、データ項目が3項目あります。名前と読みは文字列型、他は数値(整数)型データです。データベースの作り方は、ここでは解説しません。テーブルの作成については後述しますが、とりあえず、このようなテーブルがあるとして、解説をしていきます。以下の解説は、psql(PostgreSQL付属ツール)などのCUIツールでのアクセスを前提に考えていますが、プログラム等からのアクセス時にも基本は同じです。SQLの使い方まず、SQLの使い方の基本について説明します。SQLのキーワードは、大文字小文字は気にしません。!?ただし、項目名や、実際のデータについては、区別します。文字列等はシングルクォートで囲みます。半角スペースで区切ります。スペースはどれだけ入れても基本的に無視されます。タブも改行も無視されます。セミコロンで終わります。selectの使い方insert、update、deleteの使い方その他selectの使い方テーブルのデータを検索します。これさえ知っとけばとりあえずデータベースを『利用』することはできます、これがないと、どんなデータベースも意味がありません。ソート方法];という形式で使います。テーブル名で指定されるテーブルから、検索条件にマッチするレコード(1行分のデータ)を選び、項目名で指定された項目を、ソート方法に従ってソートして返す。検索条件』を省略すると、全件検索になります。ソート方法』を省略すると、レコードの並びが決まりません。項目名テーブルの項目の名前です。テーブルを作成する際に決定された名前を指定します。指定すると、全項目が返ってきます。all項目名の前にdistinctをつけると、重複レコードを返さないようになります。allをつけると、全件返ってきます。通常は、allと同様の動作です。項目にどのようなデータが含まれるか調べたい場合などに使います。項目名として、計算式を書くことができます。rows)また、このようなときに、表示用の項目名をつけることができます。通常の項目名にも別名をつけることができます。rows)テーブル名テーブル名を指定するだけです。あとは、それのバリエーションだと思っても問題はありません。=データの値を比較して、条件に一致する行だけを検索します。rows)mpが25であるレコードが返ってきます。row)nameがhasimotoであるレコードが返ってきます。文字列にはシングルクォートを忘れないようにしましょう。これらは主に数値型や日付型のデータに用います。rows)hpが40より大きいレコードが返ってきます。'文字列'の形式を使うと、特定の文字列と一致するデータを持つレコードが返ってきます。完全に一致するものではなく、部分的に一致するものを検索したい場合には、LIKEとワイルドカードを使います。ワイルドカードには、%と_があり、%は0文字以上の任意の文字列、_は1文字に対応します。rows)nameがhで始まるデータを持ったレコードが返ってきます。rows)_は1文字に相当するため、この場合はhで始まる2文字の文字列を検索します。よって、そのようなレコードはありません。rows)_と%を組み合わせて使うこともできます。rows)nameにiを含むデータを持ったレコードが返ってきます。and、or、notの3種類があります。row)lvが20以下、hpが40以上、の両方の条件に適合したレコードが返ってきます。rows)lvが20以下、hpが40以上、のどちらかの条件に適合したレコードが返ってきます。rows)mpが25でないデータが返ってきます。inとbetweeninとbetweenは、ちょっと変わった条件の指定方法です。基本的に論理演算子を使って表現できますが、inやbetweenを使えば、より簡潔に書くことができます。rows)idが、1、3、4の場合のレコードが返ってきます。4;と同じ意味になりますが、INを使うことで、SQL文がすっきりと見やすくなります。rows)文字列型の項目に対しても、inを使うことができます。rows)lvが15以上25以下のレコードが返ってきます。ソート方法データが、どのような順番で返ってくるかは基本的には不明です。rows)lvの順にデータが返ってきます。基本的には昇順(小さい順)になります。rows)descという言葉をつけると、降順(大きい順)になります。rows)mpの昇順ですが、mpが同じもの同士ではhpの昇順になります。rows)mpの降順で並べ替え、mpが同じもの同士ではhpの昇順になります。サブクエリーサブクエリーとは、select文(本体のクエリー)で使う検索条件を、別のselect文(サブクエリー)の検索結果で指定する方法です。複数回の検索が必要な複雑な問い合わせが、1回の問い合わせで行えるため、高速化などが期待できます。rows)まず、サブクエリーが実行され、それを検索条件にして、最終的なデータを返しています。これは、以下に書く2つの検索と同様の意味を持ちます。rows)別テーブルでもサブクエリーサブクエリーを使う場合には、サブクエリーと本体のクエリーが別のテーブルを参照していてもかまいません。キーワードがあり、もっと複雑で便利な使い方ができます。いう値が設定できます。nullとは、そこにデータが入っていないということで、通常の演算子ではチェックできません。nullなどの、特殊なものを使います。rows)このテーブルには、nullは存在しないため、データは返ってきません。『'null'という文字列』などとは違います。間違えないように注意してください。(なお、データベースによっては、長さ0の文字列に対応していない場合もあります。データそのものではなく、データからの計算結果などを返します。検索条件];のような形式で用い、count():行数sum():合計値avg():平均値max():最大値min():最小値などがあります。()内には、項目名を指定しますが、countでは通常*(全項目)を指定します。検索条件の指定はselectのときと同様です。row)全レコード数である4を返します。row)lvが15のレコードは2つしかないので、2を返します。row)lvの値の合計値、76を返します。存在するテーブルに対して、データを、登録したり、更新したり、削除したりするときに使用します。データベースのデータを操作する場合にはこれらが必須になります。insertinsertは、テーブルにデータを登録する際に使います。2つのパターンがあります。valuesデータを1行登録するために使います。...);の形式で用います。文字列はシングルクォートで囲んでください。項目名とデータは、全て指定する必要はありませんが、形式と数は必ず合わせる必要があります。登録された新規レコードにおいて、データが登録されなかった項目にはnullが登録されます。...);のように、項目名を省略することもできます。1登録を確認してみます。rows)新たなレコードが追加されました。selectselectで返ってきた行をそのまま登録します。表をコピーする場合などに使います。3ash_tableのうちで、idが3以下のレコードだけを、ash_table2に登録します。selectで返ってくる形式と、項目名で指定する形式が同じでなければなりません。updateupdateは、既にあるレコードのデータを更新するために使います。検索条件;の形式で用います。検索条件にマッチするレコードの、項目名で指定される項目を、新しいデータに置きかえます。検索条件の指定はselectのときと同様です。項目名とデータは複数指定できます。指定しなかった項目については更新されません。文字列はシングルクォートで囲みます。whereを省略すると、全部のレコードを同じ値で更新することになります。whereの条件を間違えると、無関係のデータを更新してしまうことにもなります。最初に、同じwhere条件でselectを行うなどの安全策をおすすめします。データを更新しました。更新を確認してみます。rows)データが更新されています。updateと計算updateでは、登録する値の代わりに計算式を書くことができます。5lvの値が全て倍になります。deletedeleteは、テーブルからレコードを削除する場合に使います。検索条件;の形式で用います。検索条件の指定は、selectの場合と同様です。whereを省略すると、全部のレコードを削除することになります。whereの条件を間違えると、無関係のデータを削除してしまうことにもなります。最初に、同じwhere条件でselectを行うなどの安全策をおすすめします。1idが5であるレコードを削除しました。削除を確認してみます。rows)削除されました。その他その他、覚えておくべき部分としては、テーブルの作成、削除があります。テーブル設計はDB運用にあたって非常に重要な部分です。いいかげんにしないようにしましょう。tableテーブルを作る場合に使います。....);の形式で用います。あり、データベースによって異なっていることも多いです。例:今回のテーブルを、PostgreSQLで作った場合。integer);CREATEテーブルができました。tableテーブルを消します。テーブル名の形式で使います。info@ash.jp。