本手順はphpMyAdminで操作を前提としている
準備
公式サイトのサンプルデータベースを使用する
公式サイトのDOCUMENTATION→Moreから
world database.zipをダウンロード
ダウンロードしたファイルを解凍し、world.sqlをphpmyadminにインポート
worldデータベースがインポートされる
データベースの概念
テーブル(table):データの集まり、表形式
行(row)→一つのデータ、一般呼称はレコード
列(column)→データの属性、名前とデータ型から成る
データベース:テーブルをまとめたもの(上図だと3つのテーブルから構成されている)
データの取得
データの取得はSELECT文を使ってデータベースに命令を送る(クエリを投げる)
SELECT column FROM table_name;
/* キーワードは大文字、小文字どちらでも良い */
/* column = `column` , table_name = `table_name` どちらでもOK */
/* column, table_name以外はバッククォート使用不可 */
SELECT文の実行結果はテーブルで出力される
/* sample */
SELECT ID, Name, Population FROM city
/* cityテーブルからID,Name,Populationを取得する */
/* アスタリスクで全て選択 */
SELECT * FROM city;
検索
制限
WHERE句:ある条件を満たすレコードのみを取り出す操作
SELECT column FROM table_name WHERE [条件式];
等価演算「=」:与えられた2つの値が等しいか(SQLは代入操作がないためイコール1つ)
SELECT * FROM city WHERE Name = 'Tokyo'
/* cityテーブルのNameがTokyoのみ抽出される */
/* 文字列はシングルorダブルクォートで囲む */
補足)MySQLのTRUEは1,FALSEは0→条件式の値が1のレコードのみ抽出される
SELECT * FROM city WHERE 1;
/* この場合、TRUEが対象のため全てのレコードが抽出される */
不等式
「>=」:以上、「>」:より大きい
「<=」:以下、「<」:より小さい
※文字列型の大小比較は辞書順でされる
SELECT * FROM city WHERE CountryCode > 'Y';
/* Yより後ろに出てくる文字列が抽出される */
照合順序 デフォルト例(utf8mb4_general_ci)
utf8:文字コード、mb4:4バイト文字(絵文字)対応、general:多言語対応、ci:大小文字区別無し
大小文字区別の場合はci(Case Insensitive)→cs(Case Sensitive)
非等価演算「!=」「<>」どちらも同じ意味
SELECT * FROM city WHERE CountryCode != 'JPN';
/* 日本以外のレコードを抽出 */
Andキーワード
SELECT * FROM city WHERE CountryCode != 'JPN' and Population > 500000;
/* 日本かつ人口500000以上のレコードを抽出 */
SELECT * FROM city WHERE Population between 400000 and 500000;
/*人口400000以上500000以下のレコードを抽出 */
ORキーワード
SELECT * FROM city WHERE CountryCode = 'JPN' or Population > 500000;
/* 日本もしくは世界で人口500000以上の国のレコードを抽出 */
SELECT * FROM city WHERE CountryCode in ('FRA', 'ITA');
/* フランスもしくはイタリアのレコードを抽出 */
SELECT * FROM city WHERE CountryCode not in ('FRA', 'ITA' 'JPN');
/* フランス、イタリア、日本以外のレコードを抽出 */
/* キーワード数は制限無し */
/* notキーワードはbetweenも使用可 */
あいまい検索
likeキーワード:あるキーワードを含む
SELECT * FROM city where Name like 'ab%';
/* 名前がabから始まるレコードを抽出 */
SELECT * FROM city where Name like '%un';
/* 名前がunで終わるレコードを抽出 */
SELECT * FROM city where Name like '%oky%';
/* 名前にokyを含むレコードを抽出 */
SELECT * FROM city where Name like '___';
/* 名前が3文字のレコードを抽出 */
%:ワイルドカード(0文字以上のあらゆる文字列)
_:アンダーバー(1文字のあらゆる文字列)
andキーワードとの併用も可能
SELECT * FROM city where Name like '___' and Population > 100000;
/* 名前が3文字かつ人口100000以上のレコードを抽出 */
並び替え
ORDER BY句
SELECT * FROM city where CountryCode = 'JPN' ORDER BY Population;
/* 日本の都市を人口順に並び替え(昇順) */
SELECT * FROM city where CountryCode = 'JPN' ORDER BY Name desc;
/* 日本の都市を名前順に並び替え(辞書の後ろから Z~) */
/* desc=descending(降順), asc=ascending(昇順) */
limitキーワード:検索結果を絞る
SELECT * FROM city where CountryCode = 'JPN' ORDER BY Population desc limit 5;
/* 日本の都市を人口順に降順で並び替えて、5件だけレコード取得(並び替えた後で取得) */
コメント