SELECTはデータベースからデータを読み込む時に使います。条件を指定して、読み込むデータを選ぶこともできます。
SELECT 列名 FROM テーブル名
複数の列を選ぶことも可能
SELECT 列名1, 列名2
FROM テーブル名
*を使うと、すべての列を読み込めます。
SELECT * FROM テーブル名
SQL文を試す前に、ちょっとした関数を作って、結果がDataFrameで返ってくるようにしましょう。
import sqlite3
import pandas as pd
con = sqlite3.connect("sakila.db")
# 関数を作って、SQL文の実行結果をDataFrameにして返します。
def sql_to_df(sql_query):
# read_sqlの引数に、SQL文とデータベースへのConnectionを渡します。
df = pd.read_sql(sql_query, con)
# 結果のDataFrameを返します。
return df
query = ''' select first_name,last_name
from customer; '''
sql_to_df(query).head()
query = ''' SELECT *
FROM customer; '''
sql_to_df(query).head()
# country_idは沢山あります。
query = ''' SELECT country_id
FROM city'''
sql_to_df(query).head()
# country_idをまとめます。
query = ''' SELECT DISTINCT(country_id)
FROM city'''
sql_to_df(query).head()
SELECT文の最後に、WHERE節を付けると、検索の条件を指定できます。
SELECT 列名
FROM テーブル名
WHERE 列名 ( =や<などの演算子) 条件の値;
# お店の番号で、お客さんを絞り込みます。
query = ''' SELECT *
FROM customer
WHERE store_id = 1'''
sql_to_df(query).head()
様々な演算子が利用できます。
演算子 | 説明 |
---|---|
= | 等しい |
<> | 等しくない。一部のSQL実行エンジでは、!=と書かれるこも。 |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
SQLでは数字はそのまま書けますが、テキストは引用符で囲む必要があります。
# お客さんの名前で検索
query = ''' SELECT *
FROM customer
WHERE first_name = 'MARY' '''
sql_to_df(query).head()
複数の条件を同時に満たしてほしい場合、ANDを使います。
# 2006年のR指定映画を選びます。
query = ''' SELECT *
FROM film
WHERE release_year = 2006
AND rating = 'R' '''
sql_to_df(query).head()
条件をORで繋ぐと、どちらか一方の条件が満たされたとき、その行(レコード)が返ります。
# R指定もしくは、PG指定の映画を選びます。
query = ''' SELECT *
FROM film
WHERE rating = 'PG'
OR rating = 'R' '''
sql_to_df(query).head()