計算機科学のブログ

ほしい物リスト

SQL - SQLite - SELECT - 天賦のデータ検索 - where句, or, and, between, テキスト列

Head First SQL ―頭とからだで覚えるSQLの基本Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 2章(SELECT - 天賦のデータ検索)、p.107(自分で考えてみよう)の解答を求めてみる。

コード

sample12.py

#! /usr/bin/env python3

import sqlite3

con = sqlite3.connect('drinks.db')
cur = con.cursor()

sql = '''
select * from drink_info
'''
cur.execute(sql)
for row in cur.fetchall():
    print(row)

wheres = [
    '''
calories < 30 or 60 < calories
''',
    '''
drink_name between 'オ' and 'グ'
''',
    # 常に該当するのはない
    '''
calories between 60 and 30
''',
]
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()

入出力結果(Terminal, Zsh)

% ./sample12.py
('ブラックソーン', 3.0, 3.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.0, 14.0, '黄', 'Y', 50)
('インディアンサマー', 2.8, 7.2, '茶', 'N', 30)
('ブルフロッグ', 2.6, 21.5, '黄褐色', 'Y', 80)
('ソーダアンドイット', 3.8, 4.7, '赤', 'N', 19)

select drink_name from drink_info where 
calories < 30 or 60 < calories


('ブルームーン',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('ローンツリー',)
('ブルフロッグ',)
('ソーダアンドイット',)

select drink_name from drink_info where 
drink_name between 'オ' and 'グ'


('オーマイゴッシュ',)
('キスオンザリップス',)

select drink_name from drink_info where 
calories between 60 and 30


%