SELECTはテーブルからレコードを抽出するための命令文で、SQL命令文の中で最も使用頻度が高く、数多くのキーワードが用意されています。今回は、その中でも特に重要なGROUP BY、ORDER BY、WHEREについて説明します。
SELECT-WHERE
XAMPPの起動
ApacheとMySQLの起動
MySQLを使うためには、Apacheも必要となりますので、両方起動します。
![起動したxamppのコントロールパネル](https://gungii.com/wp/wp-content/uploads/2020/04/admin-d01a.jpg)
MySQLのAdminの起動
Adminをクリックすると、phpMyAdminというツールが開きます。このphpMyAdminを通してMySQL(MariaDB)にアクセスすることとなります。
![起動したphpMyAdminの初期画面](https://gungii.com/wp/wp-content/uploads/2020/04/admin-d02a.jpg)
特定レコードの選択
データベース(jinji)の選択
![選択されたデータベースjinjiのテーブル一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s01a.jpg)
テーブル(staff_list)の選択
![選択されたテーブルstaff_listのデータ一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s02a.jpg)
SQL構文の入力
「表示」タブでSQLが表示されていますので、これを変更します。
注意:
「SQL」タブをクリックして、テキストエリアで入力しますが、「インラインを編集する」をクリックして直接編集もできます。
![SELECT構文の記載方法](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s03a.jpg)
①id=2のレコードのみを取り出します。
![staff_listよりid=2のレコードのみを取り出すSQL構文と実行結果](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s04a.jpg)
※検索の対象となっているカラムにはオレンジ色の枠が付きます。
②年齢≧36の方のみを取り出してみます。
![staff_listより年齢が36歳以上の方のみを取り出すSQL構文と実行結果](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s05a.jpg)
③「看護師」の方のみを抜き出してみます。
![staff_listよりskillがi看護師の方のみを取り出すSQL構文と実行結果](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s06a.jpg)
④前方一致検索
前から゛介護゛という文字列が一致したレコードを抜き出してみます。
![staff_listよりskillの前から介護という文字列が一致したレコードのみを取り出すSQL構文と実行結果](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s07a.jpg)
⑤後方一致検索
後ろから゛福祉士゛という文字列が一致したレコードを抜き出してみます。
![staff_listよりskillの後ろから福祉士という文字列が一致したレコードのみを取り出すSQL構文と実行結果](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s08a.jpg)
⑥複数条件の指定
年齢≦36で、゛ヘルパー゛という文字列と一致した方を抜き出してみます。
![staff_listより年齢が36歳以下で、ヘルパーという文字列が一致した方のみを取り出すSQL構文と実行結果](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s09a.jpg)
SELECT-GROUP BY
業務で良く利用する「集計」について説明します。例えば、一日の売上合計や商品別の売上実績等いろいろな集計が行われています。ここでは、介護施設として、どのスタッフが、何人利用者を集めたかの集客履歴をとっていくとします。そのため、「syukyaku」というテーブルを作成して、「syukyaku」テーブルを使って、「GROUP BY」を説明します。現在のスタッフは、以下の4名とします。
![選択されたstaff_listのデータ一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s11a.jpg)
XAMPPの起動
ApacheとMySQLの起動
MySQLを使うためには、Apacheも必要となりますので、両方起動します。
![起動したxamppのコントロールパネル](https://gungii.com/wp/wp-content/uploads/2020/04/admin-d01a.jpg)
MySQLのAdminの起動
Adminをクリックすると、phpMyAdminというツールが開きます。このphpMyAdminを通してMySQL(MariaDB)にアクセスすることとなります。
![起動したphpMyAdminの初期画面](https://gungii.com/wp/wp-content/uploads/2020/04/admin-d02a.jpg)
テーブルの作成
データベース「jinji」をクリックして、syukyakuという名前のテーブルを作成します。
![選択したjinjiのテーブル一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s12a.jpg)
テーブル名、カラム数の入力
カラム数=3の「syukaku」という名前のテーブルを作成します。
![テーブル名とカラム数の入力画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s13a.jpg)
カラム名、データ型の選択
![テーブルsyukyakuのカラム名、データ型の選択画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s14a.jpg)
「保存する」をクリックします。
![追加されたテーブルsyukyakuのテーブル構造](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s15a.jpg)
このsyukyakuというテーブルでは、どのスタッフが何人集客したかを記録していくものとなります。
データの挿入
それでは、データを入れていきますが、折角なのでSQLを使ってデータを入れていきます。次のように入力します。
![INSERT INTOのSQL構文の記載方法](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s16a.jpg)
SQL構文の入力
![SQL構文の入力と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s17a.jpg)
「表示」タブのクリック
![選択したsyukyakuのデータ一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s18a.jpg)
リレーションを貼る
![リレーションを貼ったSQL構文](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s19a.jpg)
![リレーションを貼ったSQL構文と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s20a.jpg)
データの集計
SUM(count)
それでは、syukyakuの中の数字、全体でどのくらい集客できたのか?を見ると
![SUMのSQL構文](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s21a.jpg)
![SUMのSQL構文と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s22a.jpg)
全体では、集客は、7名でした。
GROUP BY
全体の合計ではなく、スタッフ毎の合計を出したい時は、GROUP BY句を使います。
![GROUP BYのSQL構文](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s23a.jpg)
![BROUP BYのSQL構文と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s24a.jpg)
※GROUP BY句を使う場合は、GROUP BY句で指定したカラムがSELECTの中にも入っていないと正しく動作しませんので注意が必要です。
item_idではわかりにくい場合は、リレーションを貼ると
![リレーションを貼ったSQLと実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s25a.jpg)
LEFTJOIN、RIGHTJOIN
GROUP BY句で、スタッフ毎の集客数を集計することができました。が、この集計では’紀貫之さんの実績は、どこにも表示されていません。実績がなくても紀貫之さんの実績は0として表示したいという場合があります。
![LEFTJOIN、RIGHTJOINのSQL構文と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s26a.jpg)
内部結合
カンマ(,)で区切ってテーブルを並べる方法を「内部結合」と言い、2つのテーブルを比較して、結合条件に一致したレコードだけを返します。従ってどちらかのテーブルにデータがなければ返しません。
注意:JOIN、カンマ( , )、INNER JOINはどれも意味は同じです。
![内部結合のSQLの記載方法](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s27a.jpg)
外部結合
外部結合には、LEFT JOINとRIGHT JOINがあります。JOINの前に記述したテーブルを左、JOINの後に記述したテーブルを右として、LEFT JOINは左側のテーブルが結合条件に一致しなくてもレコードを返し、RIGHTJOINは右側のテーブルが結合条件に一致しなくてもレコードを返します。全部のデータを見たいテーブル(staff_list)を先に書き、LEFT JOIN ONと書き、その後にリレーションを記述します。
![外部結合のSQLの記載方法](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s271a.jpg)
SQL構文の入力
![SQLの記載方法](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s28a.jpg)
![SQL構文と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s29a.jpg)
これで、紀貫之さんが表示されました。
SELECT-ORDER BY
XAMPPの起動
ApacheとMySQLの起動
MySQLを使うためには、Apacheも必要となりますので、両方起動します。
![起動したxamppのコントロールパネル](https://gungii.com/wp/wp-content/uploads/2020/04/admin-d01a.jpg)
MySQLのAdminの起動
Adminをクリックすると、phpMyAdminというツールが開きます。このphpMyAdminを通してMySQL(MariaDB)にアクセスすることとなります。
![起動したphpMyAdminの初期画面](https://gungii.com/wp/wp-content/uploads/2020/04/admin-d02a.jpg)
レコードの並び替え
データベース(jinji)の選択
![選択したjinjiのテーブル一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s31a.jpg)
テーブル(staff_list)の選択
![選択したstaff_listのデータ一覧](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s32a.jpg)
SQL構文の入力
「インラインを編集する。」をクリックして、SQLを発行します。
idの若い順に並んでいるように見えますが、実際は登録の順ですので、これをidの昇順に並び替えます。
![idの昇順または降順に並び替えるSQL構文](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s33a.jpg)
①idの昇順に並び替え
![idの昇順に並び替えるSQL構文と、実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s34a.jpg)
見た目はかわりませんが、今回は確実にid順に並んでいます。ORDER BYは並び順を指定するという意味で、ASCはAscending(アセンディング)の略で、英語で上昇という意味がありますが、ここでは「昇順」という意味となります。Ascendingの反対がDescendingといい「降順」となります。(DESC)ORDER BYはデフォルトはASCですので、実際はASCを省略することができます。
例:SELECT * FROM staff_list ORDER BY id
②idの降順に並び替え
![idの降順に並び替えるSQL構文と、実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s35a.jpg)
③WHERE句と組み合わせる
年齢≧36の者を年齢の若い順に並べます。
注意:WHERE句が先で、ORDER BY句が後となりますので注意が必要です。
![WHERE句と組み合わせたSQL構文と実行結果の画面](https://gungii.com/wp/wp-content/uploads/2020/05/admin-s36a.jpg)
留意:
並び替えで、textの場合、ひらがな→カタカナ→漢字となるため、ふりがな順にならない場合があります。例えば、コンピーターは漢字は漢字コード順に並ぶだけで、ふりがなは読めません。そこで、フリガナというカラムを1つ追加して、フリガナを入力しておくと、そのフリカナで並び替えることができます。