Date

select * from spree_orders where created_at > '19 nov 2013';

[SQLite only supports "...where created_at > '2013-11-19';"]

Functions

select count(*) from spree_addresses where created_at > '1 Dec 2013';

Quotes

String are delimited by single quotes

Double quotes strings are interpreted as object identifiers

Regular identifiers:
  SELECT *
  FROM TableX
  WHERE KeyCol = 124

Delimited identifiers (ie double quotes,"" or square brackets,[]):
  SELECT *
  FROM [TableX]         --Delimiter is optional.
  WHERE [KeyCol] = 124  --Delimiter is optional.

  SELECT *
  FROM [My Table]      --Identifier contains a space and uses a reserved keyword.
  WHERE [order] = 10   --Identifier is a reserved keyword.

Join table

select * from spree_line_items where order_id = (select id from spree_orders where number = '15748490');

Finding missing ID's using 'Left Join'

'Left Join' is form of 'Outer Join'

Null values for T2 columns in every T1 row that fails the ON and WHERE boolean

SELECT r.id as 'r.id', r.id + 1 as FirstAvailableID, r1.id as 'r1.ID'
FROM games r
LEFT JOIN games r1 ON r1.id = r.id + 1
WHERE r1.id IS NULL

Use list from a Join table

Find missing IDs (PK) of 'results' table which are not stored in (FK) the 'games' table:

The Rails equivalent:

resultIDs = Result.where("first = ? and #{args[:first]} is not null and #{args[:second]} is not null",args[:first]).pluck(:id)
gameIDs   = Game.where("player_x = ? and player_o = ? and result_id is not null",player1,player2).pluck(:result_id)
missingIDs = resultIDs - gameIDs

Wildcards

select * from spree_variants where sku like '845-0282%' and deleted_at is null order by sku ASC;

Altering rows

update spree_variants set sku='845-0282' where id=39;

delete FROM results where random is not null and state is null and statewithresult is null;

Misc

select * from spree_line_items where bsc_spec_id is not null;

select * from spree_variants where deleted_at is null order by sku ASC|DESC;

select * from schema_migrations order by version DESC limit 2;