1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLを始めよう!

Last updated at Posted at 2023-03-27

laravelとSQL

・Laravelでは、SQLクエリを生成するためのビルダークラスが用意されています。ビルダークラスを使用することで、SQLクエリを手動で記述することなく、PHPコードでデータベース操作を行うことができます。ビルダークラスは、SELECT、INSERT、UPDATE、DELETEなどのSQL文を生成することができます。
また、LaravelではEloquentというORM(Object-Relational Mapping)も提供されています。ORMを使用することで、SQLを直接記述することなく、PHPのオブジェクトとしてデータベース操作を行うことができます。Eloquentは、データベースのテーブルをPHPのクラスとして表現することで、テーブル操作を簡単に行うことができます。Eloquentを使用することで、SQLに比べて柔軟性が高く、コードの可読性も向上するといったメリットがあります。

・どちらで方法で書くべきか?
Eloquent ORM は、Laravel フレームワークのデフォルトの ORM であり、モデルを使用してデータベーステーブルを操作することができます。そのため、Eloquent モデルを使用することで、SQL クエリを直接書くことなく、より簡潔なコードでデータベーステーブルの操作ができます。例えば、以下のように Eloquent モデルを使用してデータベーステーブルのレコードを取得することができます。
一方、直接 SQL クエリを書く場合は、DB ファサードを使用してデータベースにアクセスすることができます.
どちらの方法を使うかは、プロジェクトの要件や開発者の好みによって異なります。(Eloquent モデルは、データベーステーブルをオブジェクトとして扱えるため、より直感的なコードが書けます。一方で、複雑な SQL クエリを書く場合には、直接 SQL クエリを書いた方がシンプルに書けることがあるため、適宜使い分けることが重要です。)
今回は、直接 SQL クエリを場合をまとめる。


テーブルの全件取得

DB::table('users')->get();

特定のカラムのみ取得

DB::table('users')->select('name', 'email')->get();

WHERE句:SELECT文の条件式を指定するための句で、指定した条件に該当する行のみを抽出できる。例、WHERE age >= 18 とすることで、18歳以上の行だけを取得できる

DB::table('users')->where('name', 'John')->get();
DB::table('users')
                ->where('name', 'John')
                ->orWhere('name', 'Jane')
                ->get();

COUNT関数:指定された列の行数を取得するための関数です。例えば、SELECT COUNT(*) FROM usersとすることで、usersテーブルの全行数を取得することができます。

DB::table('users')->count();

MAX関数:最大値の取得

DB::table('users')->max('votes');

ORDER BY句:SELECT文で取得する行をソートするための句であり、指定された列を昇順・降順に並べ替えられる。例えば、SELECT * FROM users ORDER BY age DESCとすることで、年齢の降順にソートしたusersテーブルを取得できる。

DB::table('users')->orderBy('age', 'desc')->get();

AVG関数:平均値の取得

DB::table('users')->avg('votes');

GROUP BY句:指定された列の値でグループ化して集計するための句で、集計関数と併用することが一般的です。例、SELECT gender, COUNT(*) FROM users GROUP BY genderとすることで、男女別のユーザー数を取得できる。

DB::table('users')
                ->groupBy('account_id')
                ->having('account_id', '>', 100)
                ->get();

HAVING句:GROUP BY句でグループ化した結果に対して条件式を指定するための句で、WHERE句と同様に条件に該当するグループのみを抽出できる。例えば、SELECT gender, COUNT() FROM users GROUP BY gender HAVING COUNT() > 10とすることで、ユーザー数が10人以上の性別だけを取得できる。

DB::table('users')
    ->select('gender', DB::raw('COUNT(*) as count'))
    ->groupBy('gender')
    ->having('count', '>', 10)
    ->get();

usersテーブルからデータを取得しています。select()メソッドでgenderカラムと、COUNT(*)で集計した結果を取得しています。groupBy()メソッドでgenderでグループ化し、having()メソッドでカウント結果が10以上の行だけを抽出しています。最後に、get()メソッドでクエリを実行して結果を取得します。

JOIN句:複数のテーブルを結合するための句であり、INNER JOIN, LEFT JOIN, RIGHT JOINなど様々な種類がある。例、SELECT * FROM users INNER JOIN orders ON users.id = orders.user_idとすることで、usersテーブルとordersテーブルをユーザーIDで結合した結果を取得することができる。

DB::table('users')
                ->join('orders', 'users.id', '=', 'orders.user_id')
                ->select('users.*', 'orders.price')
                ->get();

INNER JOIN句:内部結合

DB::table('users')
                ->join('contacts', 'users.id', '=', 'contacts.user_id')
                ->join('orders', 'users.id', '=', 'orders.user_id')
                ->select('users.*', 'contacts.phone', 'orders.price')
                ->get();

LIKE:文字列を部分一致で検索するための条件式。例、商品名が「りんご」であるレコードを検索するとき、「%りんご%」と指定することで、「りんご」が含まれる商品名を持つレコードを検索できる。

$keyword = 'りんご';
$products = Product::where('name', 'like', '%'.$keyword.'%')->get();

BETWEEN:指定した範囲内に該当する値を検索するための条件式。例、価格が10,000円以上20,000円未満の商品を検索するとき、「BETWEEN 10000 AND 20000」と指定することで、価格が10,000円以上20,000円未満の商品を検索できる。

$products = Product::whereBetween('price', [10000, 20000])->get();

Productは検索対象のテーブル名、priceは検索するカラム名です。whereBetweenメソッドは、指定したカラムが指定した範囲内にあるレコードを取得するメソッドです。最後に、getメソッドを使用することで、検索結果を取得します。

----作成途中-------
IN:複数の値に一致するレコードを検索するための条件式。例、商品カテゴリーが「フルーツ」または「野菜」であるレコードを検索するとき、「IN ('フルーツ', '野菜')」と指定することで、商品カテゴリーが「フルーツ」または「野菜」のレコードを検索できまる。

$items = DB::table('table_name')
            ->whereIn('column_name', ['フルーツ', '野菜'])
            ->get();

ビュー:データベース上のテーブルを参照して作成される仮想的なテーブルのこと。ビューは、SELECT文を用いて作成される。ビューを利用することで、複数のテーブルを結合して一つのテーブルとして扱ったり、必要なカラムのみを表示することができる。

サブクエリ:SELECT文の中に入れたSELECT文のこと。サブクエリを使うことで、複雑な検索条件を表現したり、集計した結果を条件にすることができる。

スカラサブクエリ:サブクエリの中で1つの値を返すように設計されたサブクエリのこと。スカラサブクエリは、比較演算子を使った条件式の右辺に使用することができまる。例えば、「SELECT COUNT(*) FROM table1」などがスカラサブクエリの例。

UNION句:複数SELECT文の結合

$first DB::table('users')
                ->whereNull('first_name');

$users = DB::table('users')
                ->whereNull('last_name')
                ->union($first)
                ->get();
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?