2014年7月28日月曜日

開発環境

Head First SQL ―頭とからだで覚えるSQLの基本 (Lynn Beighley(著)、 佐藤 直生 (監訳)、 松永 多苗子 (翻訳)、オライリージャパン)の2章(SELECT 文: 天賦のデータ検索)、エクササイズ(p.112)を解いてみる。

エクササイズ(p.112)

コード(BBEdit, Emacs)

sample112.py

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import sqlite3

connection = sqlite3.connect('drinks.sqlite')
cursor = connection.cursor()

cursor.execute("""
CREATE TABLE black_book(
date_name VARCHAR(20),
rating VARCHAR(20))
""")

for data in [('アレックス', '斬新'),
             ('ジェームス', '退屈'),
             ('イアン', '驚くべき'),
             ('ポリス', 'つまらない'),
             ('メルビン', '下層階級'),
             ('エリック', '情けない'),
             ('アンソニー', '楽しい'),
             ('サミー', 'かなりいい'),
             ('イヴァン', '陰気'),
             ('ヴィック', '話にならない')]:
    cursor.execute("""
    INSERT into black_book VALUES('{0}', '{1}')
    """.format(*data))

connection.commit()

def p(msg):
    print(msg)
    for row in cursor.fetchall():
        print(row)

cursor.execute("""SELECT * FROM drink_info""")
print(tuple(map(lambda header: header[0], cursor.description)))
p('drink_info')

cursor.execute("""SELECT * FROM easy_drinks""")
print(tuple(map(lambda header: header[0], cursor.description)))
p('easy_drinks')

cursor.execute("""SELECT * FROM black_book""")
print(tuple(map(lambda header: header[0], cursor.description)))
p('black_book')

cursor.execute("""
SELECT drink_name FROM easy_drinks
WHERE amount1 >= 1.50
""")
p('amount1 >= 1.50 (easy_drinks)')

cursor.execute("""
SELECT drink_name FROM drink_info
WHERE ice <> 'Y'
""")
p("ice <> 'Y' (drink_info)")

cursor.execute("""
SELECT drink_name FROM drink_info
WHERE calories >= 20
""")
p('calories >= 20 (drink_info)')

cursor.execute("""
SELECT drink_name FROM easy_drinks
WHERE main in ('チェリージュース', 'トニックウォーター')
""")
p("main in ('チェリージュース', 'トニックウォーター') (easy_drinks)")

cursor.execute("""
SELECT drink_name FROM drink_info
WHERE calories <> 0
""")
p('calories <> 0 (drink_info)')

cursor.execute("""
SELECT drink_name FROM drink_info
WHERE carbs < 3 OR carbs > 5
""")
p('carbs < 3 OR carbs > 5 (drink_info)')

cursor.execute("""
SELECT date_name FROM black_book
WHERE NOT date_name BETWEEN 'ア' AND 'ウ'
""")
p("NOT BETWEEN 'ア' AND 'ウ' (black_book)")

connection.close()

入出力結果(Terminal, IPython)

$ ./sample112.py
('drink_name', 'cost', 'carbs', 'color', 'ice', 'calories')
drink_info
('ブラックソーン', 3, 8.4, '黄', 'Y', 33)
('ブルームーン', 2.5, 3.2, '青', 'Y', 12)
('オーマイゴッシュ', 3.5, 8.6, '橙', 'Y', 35)
('ライムフィズ', 2.5, 5.4, '緑', 'Y', 24)
('キスオンザリップス', 5.5, 42.5, '紫', 'Y', 171)
('ホットゴールド', 3.2, 32.1, '橙', 'N', 135)
('ローンツリー', 3.6, 4.2, '赤', 'Y', 17)
('グレイハウンド', 4, 14, '黄', 'Y', 50)
('インディアンサマー', 2.8, 7.2, '茶', 'N', 30)
('ブルフロッグ', 2.6, 21.5, '黄褐色', 'Y', 80)
('ソーダアンドイット', 3.8, 4.7, '赤', 'N', 19)
('drink_name', 'main', 'amount1', 'second', 'amount2', 'directions')
easy_drinks
('ブラックソーン', 'トニックウォーター', 1.5, 'パイナップルジュース', 1, '氷と一緒にかきまぜ、濾してカクテルグラスに入れ、レモンを一搾り加える')
('ブルームーン', 'ソーダ', 1.5, 'ブルーベリージュース', 0.75, '氷と一緒にかきまぜ、濾してカクテルグラスに入れ、レモンを一搾り加える')
('オーマイゴッシュ', '桃果汁', 1, 'パイナップルジュース', 1, '氷と一緒にかきまぜ、濾してショットグラスに入れる')
('ライムフィズ', 'スプライト', 1.5, 'ライムジュース', 0.75, '氷と一緒にかきまぜ、濾してカクテルグラスに入れる')
('キスオンザリップス', 'チェリージュース', 2, 'あんず果汁', 7, '氷の上に注いで、ストローを付ける')
('ホットゴールド', '桃果汁', 3, 'オレンジジュース', 6, '熟したオレンジジュースをマグカップに注いで、桃果汁を加える')
('ローンツリー', 'ソーダ', 1.5, 'チェリージュース', 0.75, '氷と一緒にかきまぜ、濾してカクテルグラスに入れる')
('グレイハウンド', 'ソーダ', 1.5, 'グレープフルーツジュース', 5, '氷の上に注いで、よく混ぜる')
('インディアンサマー', 'アップルジュース', 2, 'ホットティー', 6, 'ジュースをマグカップに加え、ホットティーで仕上げる')
('ブルフロッグ', 'アイスティー', 1.5, 'レモネード', 5, '氷の上に注いでライムを一切れ加える')
('ソーダアンドイット', 'ソーダ', 2, 'グレープジュース', 1, '氷を入れずに、カクテルグラスでシェイクする')
('date_name', 'rating')
black_book
('アレックス', '斬新')
('ジェームス', '退屈')
('イアン', '驚くべき')
('ポリス', 'つまらない')
('メルビン', '下層階級')
('エリック', '情けない')
('アンソニー', '楽しい')
('サミー', 'かなりいい')
('イヴァン', '陰気')
('ヴィック', '話にならない')
amount1 >= 1.50 (easy_drinks)
('ブラックソーン',)
('ブルームーン',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('ローンツリー',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
('ソーダアンドイット',)
ice <> 'Y' (drink_info)
('ホットゴールド',)
('インディアンサマー',)
('ソーダアンドイット',)
calories >= 20 (drink_info)
('ブラックソーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
main in ('チェリージュース', 'トニックウォーター') (easy_drinks)
('ブラックソーン',)
('キスオンザリップス',)
calories <> 0 (drink_info)
('ブラックソーン',)
('ブルームーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('ローンツリー',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
('ソーダアンドイット',)
carbs < 3 OR carbs > 5 (drink_info)
('ブラックソーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
NOT BETWEEN 'ア' AND 'ウ' (black_book)
('ジェームス',)
('ポリス',)
('メルビン',)
('エリック',)
('サミー',)
('ヴィック',)
$

0 コメント:

コメントを投稿