Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

Similar documents
1,.,,,., RDBM, SQL. OSS,, SQL,,.

Microsoft PowerPoint pptx

Ruby 2.3 のてざわり新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会

…l…b…g…‘†[…N…v…“…O…›…~…fi…OfiÁŸ_

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

1 ex01.sql ex01.sql ; user_id from (select user_id ;) user_id * select select (3+4)*7, SIN(PI()/2) ; (1) select < > from < > ; :, * user_id user_name

自 己 紹 介 冨 田 昌 宏 ( 株 ) 富 士 通 システムズ イースト 長 野 勤 務 OSS 推 進 フォーラム アプリケーション 部 会 に 参 加 1998 年 から 個 人 的 にRubyを 使 用 2003 年 からRubyで 製 品 開 発

3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 )

PowerPoint Presentation

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

スライド 0

Oracle Database Connect 2017 JPOUG

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

Chapter Two

Microsoft PowerPoint - db03-5.ppt

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

Wiki Wiki Wiki...

プレポスト【問題】

,, create table drop table alter table

csj-report.pdf

Chapter Two

[1]...1 [2]...1 [3] Java Web...3 [4] Java Web...18 [

Microsoft Word - Android_SQLite講座_画面800×1280

SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNE

クエリの作成が楽になるUDF

データベースS

mySQLの利用

test

PowerPoint プレゼンテーション

tkk0408nari

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

結合演算 ( 復習 ) データベース論 (9) R 社員番号 氏名麻生太郎安部晋三与謝野馨森喜朗 部門経理課営業課総務課営業課 S 部門経理課営業課総務課 電話 問合せ言語と SQL(2) R S 社員番号


※サンプルアプリケーションを固めたファイル(orcasample

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

SQLite データベース IS04 組み込み 1

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

PowerPoint プレゼンテーション

n n n ( ) n Oracle 16 PostgreSQL 3 MySQL

10 (1) s 10.2 rails c Rails 7 > item = PlanItem.new => #<PlanItem id nil, name nil,...> > item.name = "" => "" > item.valid? => true valid? true false

Microsoft Word - SQL.rtf

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

10th Developer Camp - B5

Microsoft Word - sample_adv-programming.docx

データベース暗号化ツール「D’Amo」性能検証

S2DaoでもN:Nできます

Web 環境におけるレイヤー別負荷の 2 違い DB サーバ AP サーバ 後ろのレイヤーほど負荷が高く ボトルネックになりやすい


基本サンプル

スライド 1

r1.dvi

基本サンプル

Sinatra と MongoDB 今回は Sinatra で MongoDB の操作を体験してみます 進捗に合わせて ドライバから Ruby で使える便利な ORM の紹介をします

基本サンプル

2 Java 35 Java Java HTML/CSS/JavaScript Java Java JSP MySQL Java 9:00 17:30 12:00 13: 項目 日数 時間 習得目標スキル Java 2 15 Web Java Java J

16 NanoPlanner name PlanItem.changeset/2 > validate_required([:name]) name :name Ecto.Changeset validate_required/3 Ecto.Changeset "validate_"

6 (1) app.html.eex 28 lib/nano_planner_web/templates/layout/app.html.eex 27 <footer> Oiax Inc <%= this_year() %> Oiax Inc. 29 </footer>

Microsoft PowerPoint - ruby_instruction.ppt

Windowsユーザーの為のOracle Database セキュリティ入門

untitled

日本オラクル株式会社

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

XML Consortium & XML Consortium 1 XML Consortium XML Consortium 2

Caché SQL に関するよくある質問

PGECons技術ドキュメントテンプレート Ver.3

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

+ Octopress + GitHubPages でブログを作成 Name: さりんじゃー

PowerPoint Presentation

untitled

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2

Basic descriptive statistics

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

8 / 0 1 i++ i 1 i-- i C !!! C 2

要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

データを TreeView コントロールで表示 VisualStudio2017 の Web サイトプロジェクトで bootstrap, 及び script フォルダの js ファイルが使用できるマスターページを親とする TestTreeView.aspx ページを作成します 下記の html コー

~モバイルを知る~ 日常生活とモバイルコンピューティング

結合サンプル

Taro php.jtdc

7-1- 基 RDB に関する基礎知識 1 独立行政法人情報処理推進機構

スライド 1

How to Use the PowerPoint Template

TopLink å SampleClient.java... 5 Ò readallsample() querysample() cachesample() Ç..

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介


122.pdf

本当はこわいエンコーディングの話 とみたまさひろ 東京 Ruby 会議 本当はこわいエンコーディングの話 Powered by Rabbit 2.0.6

Microsoft Word - wpphpmysql.doc

PGECons技術ドキュメントテンプレート Ver.3

hands_on_4.PDF

_IMv2.key


Oracle XML DB によるスケーラビリティおよびパフォーマンス検証 - MML v.3.0

PostgreSQL 9.4 評価検証報告 SRA OSS, Inc. 日本支社高塚遙 :55 ~ 16:30 PostgreSQL 9.4 最新情報セミナー Copyright 2014 SRA OSS, Inc. Japan All rights reserved. 1

3 Powered by mod_perl, Apache & MySQL use Item; my $item = Item->new( id => 1, name => ' ', price => 1200,

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないもの

Microsoft PowerPoint - 講義補助資料2017.pptx

PowerPoint プレゼンテーション

090220VTSystemDesign.ppt

Transcription:

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba 2013 2013-06-02

自己紹介とみたまさひろ 長野県北部在住 プログラマー (Ruby & C) http://tmtms.hatenablog.com http://twitter.com/tmtms 好きなもの Ruby, MySQL, Linux Mint, Emacs, Git

OSS 貢献者賞

諸君 私は SQL が嫌いだ

select name from users where loginid = 'tmtms'

英語っぽい

どれが予約語やねん

select name from users where loginid = 'tmtms'

予約語が多い

カラム名に group が使えなくて死ぬ まぁクォートすればいいんだけども

余計な単語

insert into tblname select group by col

insert into tblname select group by col

構文解析上なくてもいい

英語っぽくするため (?) RSpec のようなキモさ

insert と update の構文の非対称

insert into tbl (col1,col2) values (val1,val2) update tbl set col1=val1,col2=val2

全然違う

MySQL はこれも可能 insert tbl set col1=val1,col2=val2 さすが変態

集約関数

select length(id) from tbl select count(id) from tbl

select length(id) from tbl 結果件数はレコード数 select count(id) from tbl 結果件数は 1

同じ構文なのに関数によって結果が異なる

そんなこんなで SQL 嫌い

SQL を書かずに RDB を使うには

Ruby で書けばいいじゃない

そこで Sequel

テーブルの操作 SELECT col2 FROM tbl WHERE col1=1

条件で行の絞り込み SELECT col2 FROM tbl WHERE col1=1

その中の列を選択 SELECT col2 FROM tbl WHERE col1=1

Sequel で

Sequel 初期化 require 'sequel' DB = Sequel.connect( 'mysql://user:passwd@hostname:3306/dbname' )

コマンドラインから % sequel mysql://user:passwd@hostname:3306/dbname Your database is stored in DB... irb(main):001:0>

テーブルの操作 DB[:tbl]

条件で行の絞り込み DB[:tbl].where(col1: 1)

その中の列を選択 DB[:tbl].where(col1: 1).select(:col2)

とても自然!

Select/Update/Delete/Insert DB[:tbl].where(col1: 1).select(:col2) DB[:tbl].where(col1: 1).update(col2: 3) DB[:tbl].where(col1: 1).delete DB[:tbl].insert(col1: 1, col2: 2)

Select は実行遅延 ds = DB[:tbl].where(col1: 1).select(:col2) # まだ実行されない ds.first # ここで実行される #=> {:col2=>'value'}

関数 DB[:tbl].select(Sequel.function(:length, :col)) #=> SELECT length(col) FROM tbl DB[:tbl].select{length(col)} #=> SELECT length(col) FROM tbl

集約関数 DB[:tbl].count #=> SELECT COUNT(*) FROM tbl

条件いろいろ

比較 where(id: 123) #=> WHERE id=123

配列 where(id: [123, 456]) #=> WHERE id IN (123, 456)

Range where(id: 123..456) #=> WHERE id >= 123 AND id <= 456

nil, true, false where(id: nil) #=> WHERE id is NULL

データセット where(id: DB[:tbl2].select(:id)) #=> WHERE id IN (SELECT id FROM tbl2)

正規表現 where(id: /abc/) #=> WHERE id REGEXP BINARY 'abc' where(id: /abc/i) #=> WHERE id REGEXP 'abc'

複数 where(id: 123, name:'hoge') #=> WHERE id=123 AND name='hoge'

不等号 where(sequel.expr(:id) > 123) #=> WHERE id > 123 where{id > 123} #=> WHERE id > 123

JOIN

JOIN DB[:posts].left_join(:users, :id=>:users_id) #=> SELECT * FROM posts LEFT JOIN users # ON users.id=posts.users_id

自己結合 DB[:hoge].left_join(:hoge.as(:fuga), :x=>:y). select(:hoge id) #=> SELECT hoge.id FROM hoge # LEFT JOIN hoge AS fuga # ON fuga.x=hoge.y

FAQ

Q. ActiveRecord じゃだめなん?

A1. Active Record は RDB にデータ置いて読み書きしてるだけで RDB として使ってるわけじゃないんでちょっと

A2. ActiveRecord は Ruby/MySQL で動かないし そういえば activerecord-ruby_mysql-adapter ってのを作ったような気もする

A3. でも Active Record 便利ですよね Sequel でも使えるよ!

Sequel::Model class User < Sequel::Model plugin :validation_helpers def validate super validates_unique :loginid validates_presence :name end end

まとめ SQL の構文はイケてない ( 個人の感想です ) Sequel で Ruby っぽくクエリを書ける Sequel は Active Record パターンも使える SQL を シークエル と発音する人は混乱するがいいさ