SQL - SQLite - SELECT - 天賦のデータ検索 - where句, NOTキーワード, INキーワード
Head First SQL ―頭とからだで覚えるSQLの基本、 Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 2章(SELECT - 天賦のデータ検索)、p.112(エクササイズ)の解答を求めてみる。
black_book.sql
drop table if exists black_book;
create table black_book (
date_name text,
rating text
);
insert into black_book
values
('アレックス','斬新'),
('ジェームス','退屈'),
('イアン','驚くべき'),
('ボリス','つまらない'),
('メルビン','下層階級'),
('エリック','情けない'),
('アンソニー','楽しい'),
('サミー','かなりいい'),
('イヴァン','陰気'),
('ヴィック','話にならない');
コード
sample13.py
#! /usr/bin/env python3
import sqlite3
con = sqlite3.connect('drinks.db')
cur = con.cursor()
sql = '''select * from easy_drinks'''
print(sql)
cur.execute(sql)
for row in cur.fetchall():
print(row)
wheres = [
"""amount1 > 1.50""",
"""main in ('チェリージュース', 'トニックウォーター')""",
]
for where in wheres:
sql = f'''select drink_name from easy_drinks where {where}'''
print(sql)
cur.execute(sql)
for row in cur.fetchall():
print(row)
sql = '''select * from drink_info'''
print(sql)
cur.execute(sql)
wheres = [
"""ice <> 'Y'""",
"""calories >= 20""",
"""calories <> 0""",
"""carbs < 3 or 5 < carbs""",
]
for where in wheres:
sql = f'''select drink_name from drink_info where {where}'''
print(sql)
cur.execute(sql)
for row in cur.fetchall():
print(row)
cur.close()
con.close()
con = sqlite3.connect('gregs_list.db')
cur = con.cursor()
with open('black_book.sql') as f:
cur.executescript(f.read())
sql = '''select * from black_book'''
print(sql)
cur.execute(sql)
for row in cur.fetchall():
print(row)
sql = '''
select date_name from black_book
where not ('ア' <= date_name and date_name < 'ウ')
'''
print(sql)
cur.execute(sql)
for row in cur.fetchall():
print(row)
cur.close()
con.close()
入出力結果(Terminal, Zsh)
% ./sample13.py
select * from easy_drinks
('ブラックソーン', 'トニックウォーター', 1.5, 'パイナップルジュース', 1.0, '氷と一緒にかきまぜ、濾してカクテルにグラスに入れ、レモンを一絞り加える')
('ブルームーン', 'ソーダ', 1.0, 'ブルーベリージュース', 0.75, '氷と一緒にかきまぜ、濾してカクテルにグラスに入れ、レモンを一絞り加える')
('オーマイゴッシュ', '桃果汁', 1.5, 'パイナップルジュース', 1.0, '氷と一緒にかきまぜ、濾してショットグラスに入れる')
('ライムフィズ', 'スプライト', 2.0, 'ライムジュース', 0.75, '氷と一緒にかきまぜ、濾してカクテルグラスに入れる')
('キスオンザリップス', 'チェリージュース', 3.0, 'あんず果汁', 7.0, '氷の上に注いで、ストローを付ける')
('ホットゴールド', '桃果汁', 1.5, 'オレンジジュース', 6.0, '熟したオレンジジュースをマグカップに注いで、桃果汁を加える')
('ローンツリー', 'ソーダ', 1.5, 'チェリージュース', 0.75, '氷と一緒にかきまぜ、濾してカクテルグラスに入れる')
('グレイハウンド', 'ソーダ', 2.0, 'グレープフルーツジュース', 5.0, '氷の上に注いで、よく混ぜる')
('インディアンサマー', 'アップルジュース', 1.5, 'ホットティー', 6.0, 'ジュースをマグカップに加え、ホットティーで仕上げる')
('ブルフロッグ', 'アイスティー', 1.5, 'レモネード', 5.0, '氷の上に注いでライムを一切れ加える')
('ソーダアンドイット', 'ソーダ', 2.0, 'グレープジュース', 1.0, '氷を入れずに、カクテルグラスでシェイクする')
select drink_name from easy_drinks where amount1 > 1.50
('ライムフィズ',)
('キスオンザリップス',)
('グレイハウンド',)
('ソーダアンドイット',)
select drink_name from easy_drinks where main in ('チェリージュース', 'トニックウォーター')
('ブラックソーン',)
('キスオンザリップス',)
select * from drink_info
select drink_name from drink_info where ice <> 'Y'
('ホットゴールド',)
('インディアンサマー',)
('ソーダアンドイット',)
select drink_name from drink_info where calories >= 20
('ブラックソーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
select drink_name from drink_info where calories <> 0
('ブラックソーン',)
('ブルームーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('ローンツリー',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
('ソーダアンドイット',)
select drink_name from drink_info where carbs < 3 or 5 < carbs
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
select * from black_book
('アレックス', '斬新')
('ジェームス', '退屈')
('イアン', '驚くべき')
('ボリス', 'つまらない')
('メルビン', '下層階級')
('エリック', '情けない')
('アンソニー', '楽しい')
('サミー', 'かなりいい')
('イヴァン', '陰気')
('ヴィック', '話にならない')
select date_name from black_book
where not ('ア' <= date_name and date_name < 'ウ')
('ジェームス',)
('ボリス',)
('メルビン',)
('エリック',)
('サミー',)
('ヴィック',)
%