So I write some SQL patterns on this page for my memo.
The database schema is the following diagram.
I write using of Arel as Rspec.
it "where_sample1" do order = Arel::Table.new(:orders) q = order. where(order[:order_date].eq(Date.new(2013, 7, 24))). project(Arel.star) q.to_sql.should eq "SELECT *" + " FROM `orders` " + " WHERE `orders`.`order_date` = '2013-07-24'" end it "table_alias_sample1" do o = Arel::Table.new(:orders) o.table_alias = "o" q = o. where(o[:order_date].eq(Date.new(2013, 7, 24))). project(Arel.star) q.to_sql.should eq "SELECT *" + " FROM `orders` `o` " + " WHERE `o`.`order_date` = '2013-07-24'" end it "join_sample1" do o = Arel::Table.new(:orders) o.table_alias = "o" od = Arel::Table.new(:order_details) od.table_alias = "od" q = o. join(od).on(od[:order_no].eq(o[:order_no])). where(o[:order_date].eq(Date.new(2013, 7, 24))). where(od[:detail_no].lteq(3)). project(o[Arel.star], od[Arel.star]) q.to_sql.should eq "SELECT `o`.*," + " `od`.*" + " FROM `orders` `o`" + " INNER JOIN `order_details` `od`" + " ON `od`.`order_no` = `o`.`order_no`" + " WHERE `o`.`order_date` = '2013-07-24'" + " AND `od`.`detail_no` <= 3" end it "outer_join_sample1" do od = Arel::Table.new(:order_details) od.table_alias = "od" i = Arel::Table.new(:items) i.table_alias = "i" q = od. join(i, Arel::Nodes::OuterJoin). on(i[:item_no].eq(od[:item_no])). project(od[Arel.star], i[Arel.star]) q.to_sql.should eq "SELECT `od`.*," + " `i`.*" + " FROM `order_details` `od`" + " LEFT OUTER JOIN `items` `i`" + " ON `i`.`item_no` = `od`.`item_no`" end it "join_sample2" do o = Arel::Table.new(:orders) o.table_alias = "o" od = Arel::Table.new(:order_details) od.table_alias = "od" i = Arel::Table.new(:items) i.table_alias = "i" q = o. join(od).on(od[:order_no].eq(o[:order_no])). join(i).on(i[:item_no].eq(od[:item_no])). project(o[Arel.star], od[Arel.star], i[Arel.star]) q.to_sql.should eq "SELECT `o`.*," + " `od`.*," + " `i`.*" + " FROM `orders` `o`" + " INNER JOIN `order_details` `od`" + " ON `od`.`order_no` = `o`.`order_no`" + " INNER JOIN `items` `i`" + " ON `i`.`item_no` = `od`.`item_no`" end
No comments:
Post a Comment