計算機科学のブログ

SQL - Python - SELECT文 - 天賦のデータ検索 - whene句, NOT, IN, AND, OR

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

schema12.sql

drop table if exists black_book;
create table black_book
(
    date_name text,
    rating text
);
insert into  black_book
(
    date_name, rating
) values
('アレックス', '斬新'),
('ジェームス','退屈'),
('イアン','驚くべき'),
('ポリス','つまらない'),
('メルビン','下層階級'),
('エリック','情けない'),
('アンソニー','楽しい'),
('サミー','かなりいい'),
('イヴァン','陰気'),
('ヴィック','話にならない');

schema12_0.sql

select drink_name from easy_drinks
where amount1 >= 1.5;

schema12_1.sql

select drink_name from drink_info
where ice <> 'Y';

schema12_2.sql

select drink_name from drink_info
where calories >= 20;

schema12_3.sql

select drink_name from easy_drinks
where main in (
    'チェリージュース',
    'トニックウォーター'
);

schema12_4.sql

select drink_name from drink_info
where calories <> 0;

schema12_5.sql

select drink_name from drink_info
where carbs < 3
or carbs > 5;

schema12_6.sql

select date_name from black_book
where not (
    date_name like 'ア%'
    or date_name like 'イ%'
);

コード

sample12.py

#! /usr/bin/env python3
import sqlite3

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

with open(f'schema12.sql') as f:
    cur.executescript(f.read())

for i in range(7):
    print(i)
    with open(f'schema12_{i}.sql') as f:
        cur.execute(f.read())
    if (d := cur.description) is not None:
        print([t[0] for t in d])
    for row in cur.fetchall():
        print(row)

cur.close()
con.close()

入出力結果(Terminal, Zsh)

% ./sample12.py      
0
['drink_name']
('ブラックソーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キスオンザリップス',)
('ホットゴールド',)
('ローンツリー',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
('ソーダアンドイット',)
1
['drink_name']
('ホットゴールド',)
('インディアンサマー',)
('ソーダアンドイット',)
2
['drink_name']
('ブラックソーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キンオンザリップス',)
('ホットゴールド',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
3
['drink_name']
('ブラックソーン',)
('キスオンザリップス',)
4
['drink_name']
('ブラックソーン',)
('ブルームーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キンオンザリップス',)
('ホットゴールド',)
('ローンツリー',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
('ソーダアンドイット',)
5
['drink_name']
('ブラックソーン',)
('オーマイゴッシュ',)
('ライムフィズ',)
('キンオンザリップス',)
('ホットゴールド',)
('グレイハウンド',)
('インディアンサマー',)
('ブルフロッグ',)
6
['date_name']
('ジェームス',)
('ポリス',)
('メルビン',)
('エリック',)
('サミー',)
('ヴィック',)
%