2018年12月2日日曜日

開発環境

Head First SQL ―頭とからだで覚えるSQLの基本 (Lynn Beighley (著), 佐藤 直生 (監訳)、松永 多苗子 (翻訳)、オライリージャパン)の2章(SELECT文 - 天賦のデータ検索)、条件文になてみよう(p. 97).を取り組んでみる。

コード(Emacs)

Python 3

#!/usr/bin/env python3
import psycopg2 as sql

conn = sql.connect(database='gregs_list', user='kamimura')
cursor = conn.cursor()

_sql = '''drop table doughnut_ratings'''
cursor.execute(_sql)

_sql = '''
create table doughnut_ratings (
location varchar(20),
time time,
date  varchar(5),
type varchar(20),
rating smallint,
comments varchar(20)
)
'''

cursor.execute(_sql)

_sql = '''insert into doughnut_ratings values(%s, %s, %s, %s, %s, %s)'''
doughnut_ratings = [
    ('クリスピーキング', '08:50 AM', '9/27', 'プレーングレーズド', 10, 'ほとんど完璧'),
    ('ダンカンズドーナツ', '08:59 AM', '8/25', None, 6, '油っこい'),
    ('スターバズコーヒー', '07:35 PM', '5/24', 'シナモンケーキ', 5, '硬いけど、おいしい'),
    ('スターバズコーヒー', '07:03 PM', '4/26', 'ジャム', 7, 'ジャムが足りない')
]

for doughnut_rating in doughnut_ratings:
    cursor.execute(_sql, doughnut_rating)

conn.commit()

_sql = 'select * from doughnut_ratings'
cursor.execute(_sql)

print(', '.join([column[0] for column in cursor.description]))
for row in cursor.fetchall():
    print(row)

_sqls = [
    '''
select type
from doughnut_ratings
where location ='クリスピーキング'
and rating <> 6
''',
    '''
select type
from doughnut_ratings
where location ='クリスピーキング'
and rating = 3
''',
    '''
select type
from doughnut_ratings
where location ='スナッピーベーグル'
and rating >= 6
''',
    '''
select type
from doughnut_ratings
where location ='クリスピーキング'
or rating > 5
''',
    '''
select type
from doughnut_ratings
where location ='クリスピーキング'
or rating = 3
''',
    '''
select type
from doughnut_ratings
where location ='スナッピーベーグル'
or rating = 6
'''
]

# プレーングレーズド
# 該当なし
# 該当なし
# プレーングレーズド, None(NULL), ジャム
# プレーングレーズド
# None(NULL)
for _sql in _sqls:
    print(_sql)
    cursor.execute(_sql)
    for row in cursor.fetchall():
        print(row)
    print()

cursor.close()
conn.close()

入出力結果(Terminal, cmd(コマンドプロンプト), Jupyter(IPython))

$ ./sample8.py
location, time, date, type, rating, comments
('クリスピーキング', datetime.time(8, 50), '9/27', 'プレーングレーズド', 10, 'ほとんど完璧')
('ダンカンズドーナツ', datetime.time(8, 59), '8/25', None, 6, '油っこい')
('スターバズコーヒー', datetime.time(19, 35), '5/24', 'シナモンケーキ', 5, '硬いけど、おいしい')
('スターバズコーヒー', datetime.time(19, 3), '4/26', 'ジャム', 7, 'ジャムが足りない')

select type
from doughnut_ratings
where location ='クリスピーキング'
and rating <> 6

('プレーングレーズド',)


select type
from doughnut_ratings
where location ='クリスピーキング'
and rating = 3



select type
from doughnut_ratings
where location ='スナッピーベーグル'
and rating >= 6



select type
from doughnut_ratings
where location ='クリスピーキング'
or rating > 5

('プレーングレーズド',)
(None,)
('ジャム',)


select type
from doughnut_ratings
where location ='クリスピーキング'
or rating = 3

('プレーングレーズド',)


select type
from doughnut_ratings
where location ='スナッピーベーグル'
or rating = 6

(None,)

$

0 コメント:

コメントを投稿