LoginSignup
0
2

More than 3 years have passed since last update.

【SQL】SQL文の基本知識

Last updated at Posted at 2021-01-02

SQLとは

クエリ(データベースに送る命令)を書くための言語

Ruby on Railsでモデルを介してDBからデータを取得した際などに、SQL文がターミナル上に出力される
スクリーンショット 2021-01-02 11.11.01.png

基本形

  • (どのテーブルのどのカラムのデータを呼び出すかを指定)
sample.sql
SELECT "カラム名"
FROM "テーブル名"; 
/* 実際のカラム指定はクォーテーション無し */
  • 具体例
sample.sql
/* 基本形 */
SELECT name
FROM users;

/* 複数指定 */
SELECT name, email
FROM users;

/* 全てのカラムを指定 */
SELECT *
FROM users; 

特定のデータの取得( WHERE カラム名 = 値の指定 )

性別やカテゴリーなどの一意でないカラムから特定のデータを抜き出す
例:男性のみを指定

id name email address sex
1 ... ... ... 男性 
2 ... ... ... 女性 
3 ... ... ... 男性 
4 ... ... ... 男性 
5 ... ... ... 女性 
SELECT *
FROM users
WHERE sex = "男性";
/* 文字列型のデータは""で囲む */

特定の範囲のデータ取得( WHERE + 比較演算子)

SELECT *
FROM products
WHERE price > 1000;
/* 値段が1000円より高いのデータを取得 */

SELECT *
FROM posts
WHERE created_at <= "2020-12-01";
/* 2020/12/01より前に投稿されたデータを取得 */

特定の情報の含まれるデータの取得( WHERE + LIKE )

id name price
1 ショートケーキ ...
2 チョコレートケーキ  ...
3 チーズケーキ ...
4 チョコレートアイス  ...
5 生チョコレート ...
SELECT *
FROM products
WHERE name LIKE "%ケーキ%";
/* 文字列"ケーキ"が含まれる(id:1,2,3)データが取得 */

SELECT *
FROM products 
WHERE name LIKE "チョコレート%";
/* 文頭に文字列"チョコレート"が含まれる(id:2,4)データが取得 */

SELECT *
FROM products 
WHERE name LIKE "%チョコレート";
/* 文末に文字列"チョコレート"が含まれる(id:5)データが取得 */

特定の条件に該当しないデータの取得( WHERE + NOT)

SELECT *
FROM products
WHERE NOT name LIKE "%ケーキ%";
/* (文字列"ケーキ"を含む)に該当しないデータの取得 */

SELECT *
FROM products
WHERE NOT price >= 1000;
/* (値段が1000円以上)に該当しないデータの取得 */

SELECT *
FROM users
WHERE NOT created_at <= "2020-12-1";
/* (登録日が2020/12/01より前)に該当しないデータの取得 */

カラム =(NULL or NOT NULL)のデータの取得

SELECT *
FROM users
WHERE introduction IS NULL;
/* introductionがnull(空)のデータを取得 */

SELECT *
FROM users 
WHERE image_id IS NOT NULL;
/* image_idがnull(空)でないデータを取得 */

複数条件の指定(WHERE + AND / OR )

SELECT *
FROM users
WHERE address LIKE "%東京都%"
AND age >= 20;
/* (addressカラムに文字列"東京都"を含む)かつ (ageカラムが20以上)のデータの取得 */
/* 東京都に住んでいる20歳以上の人のデータ */

SELECT *
FROM users
WHERE address LIKE "%千葉県%"
OR address LIKE "%茨城県%";
/* 住所が(千葉県 あるいは 茨城県)の人のデータの取得 */

取得したデータの並び替え(ORDER BY 昇順 or 降順)

SELECT *
FROM users 
ORDER BY age ASC;
/* 昇順:年齢が若い(ageの値が小さい)データから順に並べ替え */

SELECT *
FROM products
ORDER BY price DESC;
/* 降順:値段が高い(priceの値が大きい)データから順に並べ替え */

SELECT *
FORM products
WHERE price <= 1000
ORDER BY calorie ASC;
/* 複数指定 + 並べ替え:1000円以下でカロリーが低いものから順に並べ替え */

取得するデータ個数の制限(LIMIT)

SELECT *
FROM posts
WHERE user_id = 1
LIMIT 5;
/* user_idが1のユーザーの投稿を5件のみ取得 */

SELECT *
FROM orders
WHERE user_id = 2
ORDER BY charge DESC
LIMIT 10;
/* (user_idが2のユーザー) &(注文金額が高いものから順に)10件のみ取得 */

補足

SQL文はRudy on Railsアプリケーションでのデータ取得の際、ターミナル上にて目にすることが多い為、基本文法を理解するだけでもターミナルの標準出力を理解し易くなるかと思います。

記載内容に間違い等ございましたらご連絡頂けると幸いです。

0
2
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
0
2