1
2

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 5 years have passed since last update.

SQLその2 データベース検索

1
Last updated at Posted at 2019-11-17

今度は一番肝心であるデータベースの検索を書こうと思います。

基本検索構文

使用例
 SELECT name
  FROM users

FROM句

テーブル指定

FROM テーブル名

SELECT句

カラムを指定

SELECT カラム名

基本検索条件

使用例
SELECT *
FROM users
WHERE kenmei IN ("東京都", "神奈川県") 

WHERE句

検索条件を指定

WHERE 条件

例
WHERE a==1

AND演算子

AND演算子は複数の条件を指定して式を作り、その条件が全て正であるとき、式が正となります

要は両方成立したら返すわけです。

WHERE a AND b

OR演算子

OR演算子は複数の条件を指定して式を作り、その条件のうちどれか1つ以上が正となれば、式は正となります。

要はどちらかが成立すれば返すわけです。

WHERE a OR b

NOT演算子

NOT演算子は1つの条件を指定して式を作り、式の正誤はその条件と逆のものになります。

要は含まれないレコードを返すわけです。

WHERE NOT a

BETWEEN演算子

BETWEEN演算子は1つのカラムに対し上限と下限を指定して式を作り、カラムの値がその範囲に含まれるとき、その式は正になるという演算子です。

要はカラムに下限以上かつ上限以下の値が入ったレコードを返すコードです。

WHERE カラム名 BETWEEN 下限 AND 上限

IN演算子

IN演算子は1つのカラムに対しリストを指定して、カラムの値がそのリストに含まれるとき、その式は正になるという演算子です。

要は指定したカラムに指定した値が入ってるレコードを返すコードです。

WHERE カラム名 IN (値1, 値2, ……)

(値1, 値2, ……)の部分がリストとなります

検索データ形成

使用例

SELECT
    user_id,
    COUNT(*) "行数"
FROM reidai
WHERE date = "2000-01-01"
GROUP BY user_id

CONCAT関数

複数の文字列を連結させることが出来る関数です。

CONCAT(文字列1, 文字列2, ……)

AS句

SELECT句でデータを取得するとき、AS句を併用すると、そのカラムに別名を付けることが出来ます。

要は検索結果の絡む名を変更するわけです。

SELECT 取得するデータ AS 別名

DISTINCTキーワード

DISTINCTキーワードを使用すると、指定したカラムの値が重複する行を除外してデータを取得することが出来ます。

要は同じ値があった場合、一番最初のデータだけ残し後のは除外する。

SELECT DISTINCT カラム名

GROUP BY句

GROUP BY句を使用すると、指定したカラムが同じ値を持つデータを1つのグループとしてまとめることが出来ます。

DISTINCTと違うのはデータが残りレコードとしては
重複しなかった値は複数行として登録される。

GROUP BY カラム名

COUNT関数(group byに注意)

COUNT関数はカラムを指定して使用することで、そのカラムの値がNULLでないデータの行数を取得することが出来ます。

SELECT COUNT(カラム名)

ワイルドカードを使用し以下のように記述すると、行の値が全てNULLであるレコードも含め、その行数を取得します。

SELECT COUNT(*)

そしてGROUP BY句を併用している場合は、各グループが何行のレコードを持っているかというデータを取得することが出来ます。

複雑なデータの検索

JOIN句

JOINを使用すると、指定したそれぞれのテーブルの、カラムの値が一致するデータを結合することが出来ます。

FROM テーブル名1
JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2

ONの後にそのままテーブル名を再度書くのは冗長です。
そこで各テーブルに別名を付け、その名前で扱うのが良いです。

aceの場合 => a
badmanの場合 => b など

そのため、SQL文は以下のように書きなおすことが出来ます。

FROM seidai s
JOIN users u ON a.user_id = b.id

サブクエリ

要は二重検索のことSQL文の中にさらに文を書いて出力する方法です。
例としてWHERE id NOT INの中に書くことで、それを検索した結果
から更に検索する方法です。

SELECT *
FROM users
WHERE id NOT IN (
    SELECT DISTINCT user_id
    FROM reidai
    WHERE date = "2000-01-01"
)

ワイルドカード

ワイルドカードとは、文字の代わりとして使うことが出来る記号のことです。

SELECT句においては、アスタリスクが"全てのカラムを取得する"という意味のワイルドカードとして定義がされているため、このように指定することで全てのカラムの取得が出来ます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?