Outils pour utilisateurs

Outils du site


c_sqlite3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
c_sqlite3 [2009/12/24 16:23] thierryc_sqlite3 [2010/09/28 17:47] (Version actuelle) thierry
Ligne 107: Ligne 107:
  
 | :!: Pour quelques exemples qui suivent, on est dans un shell | | :!: Pour quelques exemples qui suivent, on est dans un shell |
 +
 +=== base ===
  
 Avec la date: Avec la date:
Ligne 131: Ligne 133:
 Et voila la conversion faite. Et voila la conversion faite.
  
 +=== comparaisons ===
  
 +En supposant des colonnes initialisés avec **''DATETIME('now','localtime')''** , c'est facile:
 +  $ sqlite3 test.db "DELETE FROM MyTable WHERE ( Last_Access_Date < DATETIME('now','localtime','-2 hours') ) OR ( Create_Date < DATETIME('now','localtime','-10 days') );"
 +
 +Lorque qu'une colonne specifie une durée, par exemple la colonne **''TTL''** exprime en heures, on peut faire aussi:
 +  $ sqlite3 test.db "DELETE FROM MyTable WHERE ( Last_Access_Date < DATETIME('now','localtime','-'||TTL||' hours') );
 +Le **''||''** permet de concatener une chaine...
  
 ==== trigger ==== ==== trigger ====
Ligne 206: Ligne 215:
 ==== Left Join (Jointure) ==== ==== Left Join (Jointure) ====
  
 +=== Dans Table_A et Table_B ===
 Soit une **''Table_A''** et une **''Table_B''** . Soit une **''Table_A''** et une **''Table_B''** .
 Soit un champ commun de fonction commune entre elle (par exemple, un numéro de carte bancaire). Soit un champ commun de fonction commune entre elle (par exemple, un numéro de carte bancaire).
Ligne 213: Ligne 223:
   SELECT Table_A.CB, Table_B.CB FROM Table_A LEFT JOIN Table_B ON Table_A.CB=Table_B.CB ;   SELECT Table_A.CB, Table_B.CB FROM Table_A LEFT JOIN Table_B ON Table_A.CB=Table_B.CB ;
  
 +ATTENTION: **toutes** les rangées de **''Table_A''** sont retournées ! \\
 +Toutefois, lorsqu'une rangée de la **''Table_A''** n'a pas de jointure correspondant, alors la rangée de **''Table_B''** est entièrement **NULL**.
  
 +Donc, pour avoir vraiment la "jointure" de **''Table_A''** et **''Table_B''**, sans **NULL** , il faut ajouter un petit **''WHERE''** comme ça:
 +  SELECT Table_A.CB, Table_B.CB FROM Table_A LEFT JOIN Table_B ON Table_A.CB=Table_B.CB WHERE Table_B.CB IS NOT NULL ;
  
 +Et voila.
 +
 +=== Dans Table_A et pas dans Table_B ===
 +Maintenant, on veut les rangées qui sont dans la **''Table_A''**, et PAS dans la **''Table_B''** ...
 +
 +Il suffit d'inverser le "WHERE"...
 +  SELECT Table_A.CB FROM Table_A LEFT JOIN Table_B ON Table_A.CB=Table_B.CB WHERE Table_B.CB IS NULL ;
 +
 +=== plusieurs databases ===
 +Lorsqu'on travaille avec plusieurs databases (grâce à la commande **''ATTACH DATABASE''** ), et que les tables ont les mêmes noms...
 +
 +Ainsi, soit 2 databases:
 +  * main
 +  * source
 +
 +Leurs tables sont identiques, et particulièrement une table commune nommé **''MyTable''** ...\\
 +
 +On peut créer le même genre de jointure que ci-dessus... mais faut faire attention au nommage...
 +
 +== Sans alias ==
 +  SELECT main.MyTable.CB, source.MyTable.CB FROM main.MyTable LEFT JOIN source.MyTable ON main.MyTable.CB=source.MyTable.CB WHERE source.MyTable.CB IS NOT NULL ;
 +
 +== Avec alias ==
 +On peut créer le même genre de jointure que ci-dessus, mais avec plein d'aliases !
 +
 +Exemple:
 +  SELECT dst.CB, src.CB FROM main.MyTable dst LEFT JOIN source.MyTable src ON dst.CB=src.CB WHERE src.CB IS NOT NULL ;
 +C'est un peu plus court grâce aux alias créés dans le **''FROM ...''**
  
 ===== Perl ===== ===== Perl =====
Ligne 247: Ligne 289:
  
  
-  +==== Safe copy ==== 
 + 
 +Lien: http://stuvel.eu/archive/55/safely-copy-a-sqlite-database 
c_sqlite3.1261671832.txt.gz · Dernière modification : 2009/12/24 16:23 de thierry