Documentation Source Text

Hex Artifact Content
Login

Artifact b003a7713bc2017038838a7074a97e431c541ffd:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 43 48 45 43 4b 20   adding a CHECK 
1700: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20  constraint, the 
1710: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1720: 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61  .is not tested a
1730: 67 61 69 6e 73 74 20 70 72 65 65 78 69 73 74 69  gainst preexisti
1740: 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74  ng rows of the t
1750: 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20  able..^This can 
1760: 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c  result in a tabl
1770: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1780: 64 61 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20  data that.is in 
1790: 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65  violation of the
17a0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
17b0: 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  t.  Future versi
17c0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69  ons of SQLite mi
17d0: 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61  ght.change to va
17e0: 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e  lidate CHECK con
17f0: 73 74 72 61 69 6e 74 73 20 61 73 20 74 68 65 79  straints as they
1800: 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a   are added.</p>.
1810: 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75 74 69  .<p> The executi
1820: 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41  on time of the A
1830: 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61  LTER TABLE comma
1840: 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e  nd is independen
1850: 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20  t of.the amount 
1860: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 74  of data in the t
1870: 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52  able.  The ALTER
1880: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72   TABLE command r
1890: 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f  uns as quickly.o
18a0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18b0: 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61  0 million rows a
18c0: 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74  s it does on a t
18d0: 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e  able with 1 row.
18e0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20  .</p>..<p>After 
18f0: 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62  ADD COLUMN has b
1900: 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74  een run on a dat
1910: 61 62 61 73 65 2c 20 74 68 61 74 20 64 61 74 61  abase, that data
1920: 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65  base will not.be
1930: 20 72 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c   readable by SQL
1940: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e  ite version 3.1.
1950: 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f  3 and earlier.</
1960: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
19c0: 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79   {ANALYZE} analy
19d0: 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62  ze ANALYZE..Bubb
19e0: 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a  leDiagram analyz
19f0: 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  e-stmt 1.</tcl>.
1a00: 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a  .<p> ^The ANALYZ
1a10: 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72  E command gather
1a20: 73 20 73 74 61 74 69 73 74 69 63 73 20 61 62 6f  s statistics abo
1a30: 75 74 20 69 6e 64 69 63 65 73 20 61 6e 64 20 73  ut indices and s
1a40: 74 6f 72 65 73 20 74 68 65 6d 0a 69 6e 20 61 20  tores them.in a 
1a50: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73 20 69  special tables i
1a60: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
1a70: 68 65 72 65 20 74 68 65 20 71 75 65 72 79 20 6f  here the query o
1a80: 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75 73 65  ptimizer can use
1a90: 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61  .them to help ma
1aa0: 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65 78 20  ke better index 
1ab0: 63 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20  choices..^If no 
1ac0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69  arguments are gi
1ad0: 76 65 6e 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73  ven, all indices
1ae0: 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
1af0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61   databases are.a
1b00: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20  nalyzed.  ^If a 
1b10: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
1b20: 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61 72   given as the ar
1b30: 67 75 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e 64 69  gument, all indi
1b40: 63 65 73 0a 69 6e 20 74 68 61 74 20 6f 6e 65 20  ces.in that one 
1b50: 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e 61  database are ana
1b60: 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20  lyzed.  ^If the 
1b70: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61  argument is a ta
1b80: 62 6c 65 20 6e 61 6d 65 2c 0a 74 68 65 6e 20 6f  ble name,.then o
1b90: 6e 6c 79 20 69 6e 64 69 63 65 73 20 61 73 73 6f  nly indices asso
1ba0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
1bb0: 20 6f 6e 65 20 74 61 62 6c 65 20 61 72 65 20 61   one table are a
1bc0: 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  nalyzed.</p>..<p
1bd0: 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69  > ^The default i
1be0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1bf0: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1c00: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1c10: 74 61 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73  table named <b>s
1c20: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e  qlite_stat1</b>.
1c30: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
1c40: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
1c50: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
1c60: 5f 53 54 41 54 32 5d 20 6f 70 74 69 6f 6e 2c 20  _STAT2] option, 
1c70: 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20  then additional 
1c80: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69  histogram data i
1c90: 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20  s.collected and 
1ca0: 73 74 6f 72 65 64 20 69 6e 20 3c 62 3e 73 71 6c  stored in <b>sql
1cb0: 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e 2e 0a 46  ite_stat2</b>..F
1cc0: 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
1cd0: 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64  ts may create.ad
1ce0: 64 69 74 69 6f 6e 61 6c 20 74 61 62 6c 65 73 20  ditional tables 
1cf0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
1d00: 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65 70  me pattern excep
1d10: 74 20 77 69 74 68 20 74 68 65 20 22 31 22 0a 6f  t with the "1".o
1d20: 72 20 22 32 22 20 63 68 61 6e 67 65 64 20 74 6f  r "2" changed to
1d30: 20 61 20 64 69 66 66 65 72 65 6e 74 20 64 69 67   a different dig
1d40: 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  it.</p>..<p> ^Th
1d50: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63  e [DROP TABLE] c
1d60: 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f 74 20  ommand does.not 
1d70: 77 6f 72 6b 20 6f 6e 20 74 68 65 20 3c 62 3e 73  work on the <b>s
1d80: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 20  qlite_stat1</b> 
1d90: 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61  or <b>sqlite_sta
1da0: 74 32 3c 2f 62 3e 20 74 61 62 6c 65 73 2c 0a 62  t2</b> tables,.b
1db0: 75 74 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65  ut all the conte
1dc0: 6e 74 20 6f 66 20 74 68 6f 73 65 20 74 61 62 6c  nt of those tabl
1dd0: 65 73 20 63 61 6e 20 62 65 20 71 75 65 72 69 65  es can be querie
1de0: 64 20 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d  d using [SELECT]
1df0: 0a 61 6e 64 20 63 61 6e 20 62 65 20 64 65 6c 65  .and can be dele
1e00: 74 65 64 2c 20 61 75 67 6d 65 6e 74 65 64 2c 20  ted, augmented, 
1e10: 6f 72 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e  or modified usin
1e20: 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 0a  g the [DELETE],.
1e30: 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55  [INSERT], and [U
1e40: 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  PDATE] commands.
1e50: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
1e60: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
1e70: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
1e80: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1e90: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
1ea0: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
1eb0: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
1ec0: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
1ed0: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
1ee0: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
1ef0: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
1f00: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
1f10: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
1f20: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
1f30: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
1f40: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
1f50: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
1f60: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
1f70: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53  and.</p>..<p> ^S
1f80: 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72  tatistics gather
1f90: 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72  ed by ANALYZE ar
1fa0: 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61 75 74  e <u>not</u> aut
1fb0: 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74  omatically updat
1fc0: 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e  ed as.the conten
1fd0: 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
1fe0: 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74  e changes.  If t
1ff0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
2000: 65 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67  e database.chang
2010: 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79  es significantly
2020: 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  , or if the data
2030: 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
2040: 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68  ges, then one sh
2050: 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65  ould.consider re
2060: 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c  running the ANAL
2070: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f  YZE command in o
2080: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 20 74  rder to update t
2090: 68 65 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f  he statistics.</
20a0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20f0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2100: 20 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   {ATTACH DATABAS
2110: 45 7d 20 61 74 74 61 63 68 20 2a 41 54 54 41 43  E} attach *ATTAC
2120: 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  H..BubbleDiagram
2130: 20 61 74 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c   attach-stmt 1.<
2140: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
2150: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
2160: 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61  statement adds a
2170: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  nother database 
2180: 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72  .file to the cur
2190: 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63  rent [database c
21a0: 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68  onnection]. .^Th
21b0: 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73  e database-names
21c0: 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65   'main' and .'te
21d0: 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74 68 65  mp' refer to the
21e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
21f0: 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  nd the database 
2200: 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72  used for .tempor
2210: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68  ary tables.  ^Th
2220: 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20  e main and temp 
2230: 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74  databases cannot
2240: 20 62 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a   be attached or.
2250: 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c  detached.</p>..<
2260: 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61  p> ^(Tables in a
2270: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2280: 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65 72  ase can be refer
2290: 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65  red to using the
22a0: 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61   syntax .<i>data
22b0: 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d  base-name.table-
22c0: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66  name</i>.)^  ^If
22d0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
22e0: 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65   table is unique
22f0: 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61  .across all atta
2300: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
2310: 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20  nd the main and 
2320: 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20  temp databases, 
2330: 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61  then the.<i>data
2340: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  base-name</i> pr
2350: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
2360: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
2370: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
2380: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
2390: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
23a0: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
23b0: 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  .<i>database-nam
23c0: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
23d0: 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61  not used on a ta
23e0: 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74  ble reference, t
23f0: 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68  hen the.table ch
2400: 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20  osen is the one 
2410: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2420: 74 68 61 74 20 77 61 73 20 6c 65 61 73 74 20 72  that was least r
2430: 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  ecently attached
2440: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
2450: 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69  sactions involvi
2460: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61  ng multiple atta
2470: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
2480: 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d  re atomic,.assum
2490: 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d 61 69  ing that the mai
24a0: 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  n database is no
24b0: 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61  t "[:memory:]" a
24c0: 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c  nd the .[journal
24d0: 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57  _mode] is not [W
24e0: 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d  AL].  ^(If the m
24f0: 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20  ain.database is 
2500: 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66  ":memory:" or if
2510: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   the journal_mod
2520: 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a  e is WAL, then .
2530: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e  transactions con
2540: 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d  tinue to be atom
2550: 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69  ic within each i
2560: 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61  ndividual.databa
2570: 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20  se file. But if 
2580: 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65  the host compute
2590: 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65  r crashes in the
25a0: 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f   middle.of a [CO
25b0: 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20  MMIT] where two 
25c0: 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65  or more database
25d0: 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74   files are updat
25e0: 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73  ed,.some of thos
25f0: 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65  e files might ge
2600: 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68  t the changes wh
2610: 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74  ere others.might
2620: 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70   not.)^.</p>..<p
2630: 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69  > ^There is a li
2640: 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b  mit, set using [
2650: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d  sqlite3_limit()]
2660: 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49   and .[SQLITE_LI
2670: 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74  MIT_ATTACHED], t
2680: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2690: 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 63  databases that c
26a0: 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f  an be.simultaneo
26b0: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f  usly attached to
26c0: 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61   a single databa
26d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
26e0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2740: 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43  n {BEGIN TRANSAC
2750: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
2760: 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54  n {*BEGIN COMMIT
2770: 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62   ROLLBACK}..Bubb
2780: 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d  leDiagram begin-
2790: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
27a0: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42  am commit-stmt.B
27b0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
27c0: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
27d0: 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67  >..<p>.^No chang
27e0: 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
27f0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
2800: 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74  xcept within a t
2810: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79  ransaction..^Any
2820: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68   command that ch
2830: 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61  anges the databa
2840: 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61  se (basically, a
2850: 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f  ny SQL command.o
2860: 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43  ther than [SELEC
2870: 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  T]) will automat
2880: 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74  ically start a t
2890: 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e  ransaction if.on
28a0: 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  e is not already
28b0: 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75   in effect.  ^Au
28c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
28d0: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
28e0: 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77  .are committed w
28f0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65  hen the last que
2900: 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70  ry finishes..</p
2910: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
2920: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
2930: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
2940: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
2950: 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72  mand.  ^(Such tr
2960: 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c  ansactions usual
2970: 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c  ly persist until
2980: 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54   the next.COMMIT
2990: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d   or ROLLBACK com
29a0: 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61  mand.  But a tra
29b0: 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c  nsaction will al
29c0: 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20  so .ROLLBACK if 
29d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
29e0: 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20  closed or if an 
29f0: 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64  error occurs.and
2a00: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
2a10: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
2a20: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  n algorithm is s
2a30: 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20  pecified.)^.See 
2a40: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
2a50: 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e  n on the [ON CON
2a60: 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f  FLICT].clause fo
2a70: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
2a80: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
2a90: 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66  he ROLLBACK.conf
2aa0: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2ab0: 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a  algorithm..</p>.
2ac0: 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41  .<p>.^END TRANSA
2ad0: 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61  CTION is an alia
2ae0: 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f  s for COMMIT..</
2af0: 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61  p>..<p> ^(Transa
2b00: 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75  ctions created u
2b10: 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d  sing BEGIN...COM
2b20: 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  MIT do not nest.
2b30: 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74  )^.^For nested t
2b40: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65  ransactions, use
2b50: 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d   the [SAVEPOINT]
2b60: 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63   and [RELEASE] c
2b70: 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f  ommands..The "TO
2b80: 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61   SAVEPOINT <i>na
2b90: 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f  me</i>" clause o
2ba0: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
2bb0: 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20  ommand shown.in 
2bc0: 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  the syntax diagr
2bd0: 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79  am above is only
2be0: 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b   applicable to [
2bf0: 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73  SAVEPOINT].trans
2c00: 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74  actions.  ^An at
2c10: 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20  tempt to invoke 
2c20: 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e  the BEGIN comman
2c30: 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73  d within.a trans
2c40: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  action will fail
2c50: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20   with an error, 
2c60: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
2c70: 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61  ether.the transa
2c80: 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65  ction was starte
2c90: 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d  d by [SAVEPOINT]
2ca0: 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45 47 49   or a prior BEGI
2cb0: 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63  N..^The COMMIT c
2cc0: 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52  ommand and the R
2cd0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
2ce0: 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63  without the TO c
2cf0: 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73  lause.work the s
2d00: 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e  ame on [SAVEPOIN
2d10: 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  T] transactions 
2d20: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
2d30: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61  transactions.sta
2d40: 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f  rted by BEGIN.</
2d50: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
2d60: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
2d70: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
2d80: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
2d90: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
2da0: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
2db0: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
2dc0: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
2dd0: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
2de0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
2df0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
2e00: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
2e10: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
2e20: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
2e30: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
2e40: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
2e50: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
2e60: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
2e70: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
2e80: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
2e90: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
2ea0: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
2eb0: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
2ec0: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
2ed0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
2ee0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
2ef0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
2f00: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
2f10: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
2f20: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
2f30: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
2f40: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
2f50: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
2f60: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
2f70: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
2f80: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
2f90: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
2fa0: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
2fb0: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
2fc0: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
2fd0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
2fe0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
2ff0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
3000: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
3010: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
3020: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
3030: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
3040: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
3050: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
3060: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
3070: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
3080: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
3090: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
30a0: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
30b0: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
30c0: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
30d0: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
30e0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
30f0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
3100: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
3110: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
3120: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
3130: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
3140: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
3150: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
3160: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
3170: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
3180: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
3190: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
31a0: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
31b0: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
31c0: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
31d0: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
31e0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
31f0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
3200: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
3210: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
3220: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3230: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
3240: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
3250: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
3260: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
3270: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
3280: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
3290: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
32a0: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
32b0: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
32c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
32d0: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
32e0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
32f0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
3300: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
3310: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
3320: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
3330: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3340: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
3350: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
3360: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
3370: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3380: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
3390: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
33a0: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
33b0: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
33c0: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
33d0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
33e0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
33f0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
3400: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
3410: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
3420: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
3430: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
3440: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
3450: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
3460: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
3470: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
3480: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
3490: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
34a0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
34b0: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
34c0: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
34d0: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
34e0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
34f0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
3500: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
3510: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
3520: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
3530: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
3540: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
3550: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
3560: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
3570: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3580: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3590: 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a  ITE_BUSY]..</p>.
35a0: 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74  .<p>.^An attempt
35b0: 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d   to execute COMM
35c0: 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65  IT might also re
35d0: 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49  sult in an [SQLI
35e0: 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20  TE_BUSY] return 
35f0: 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68  code.if an anoth
3600: 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er thread or pro
3610: 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72  cess has a [shar
3620: 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20  ed lock] on the 
3630: 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72  database.that pr
3640: 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61  evented the data
3650: 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  base from being 
3660: 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20  updated.  ^When 
3670: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
3680: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
3690: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
36a0: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
36b0: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
36c0: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
36d0: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
36e0: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
36f0: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
3700: 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  p>.^The ROLLBACK
3710: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
3720: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53  an error code [S
3730: 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74  QLITE_BUSY] if t
3740: 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e  here.are any pen
3750: 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e  ding queries.  ^
3760: 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61  Both read-only a
3770: 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20 71 75  nd read/write qu
3780: 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65  eries will.cause
3790: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66   a ROLLBACK to f
37a0: 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b  ail.  A ROLLBACK
37b0: 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20 74 68   must fail if th
37c0: 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a  ere are pending.
37d0: 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20  read operations 
37e0: 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77  (unlike COMMIT w
37f0: 68 69 63 68 20 63 61 6e 20 73 75 63 63 65 65 64  hich can succeed
3800: 29 20 62 65 63 61 75 73 65 20 62 61 64 20 74 68  ) because bad th
3810: 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e  ings.will happen
3820: 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   if the in-memor
3830: 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64  y image of the d
3840: 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e 67  atabase is chang
3850: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
3860: 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65 72  r.an active quer
3870: 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20  y..</p>..<p>.If 
3880: 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
3890: 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20  mode] is set to 
38a0: 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62 6c  OFF (thus disabl
38b0: 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ing the rollback
38c0: 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74   journal.file) t
38d0: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
38e0: 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b   of the ROLLBACK
38f0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65   command is unde
3900: 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  fined..</p>..<h3
3910: 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72  >Response To Err
3920: 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72 61  ors Within A Tra
3930: 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  nsaction</h3>..<
3940: 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20  p> ^(If certain 
3950: 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20  kinds of errors 
3960: 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20 74  occur within a t
3970: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a  ransaction, the.
3980: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
3990: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f  or may not be ro
39a0: 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61  lled back automa
39b0: 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72  tically.  The.er
39c0: 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65 20  rors that cause 
39d0: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63  the behavior inc
39e0: 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  lude:</p>..<ul>.
39f0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  <li> [SQLITE_FUL
3a00: 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20  L]: database or 
3a10: 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b  disk full.<li> [
3a20: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64  SQLITE_IOERR]: d
3a30: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c  isk I/O error.<l
3a40: 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  i> [SQLITE_BUSY]
3a50: 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75 73  : database in us
3a60: 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f  e by another pro
3a70: 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  cess.<li> [SQLIT
3a80: 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72  E_NOMEM]: out or
3a90: 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51   memory.<li> [SQ
3aa0: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a  LITE_INTERRUPT]:
3ab0: 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c   processing [sql
3ac0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69  ite3_interrupt|i
3ad0: 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20  nterrupted].    
3ae0: 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   by application 
3af0: 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a  request.</ul>)^.
3b00: 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66  .<p>.^For all of
3b10: 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53   these errors, S
3b20: 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74  QLite attempts t
3b30: 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20  o undo just the 
3b40: 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74  one statement.it
3b50: 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20   was working on 
3b60: 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65  and leave change
3b70: 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61  s from prior sta
3b80: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
3b90: 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he.same transact
3ba0: 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63  ion intact and c
3bb0: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68 65  ontinue with the
3bc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
3bd0: 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64  However, .depend
3be0: 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65  ing on the state
3bf0: 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75  ment being evalu
3c00: 61 74 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69  ated and the poi
3c10: 6e 74 20 61 74 20 77 68 69 63 68 20 74 68 65 0a  nt at which the.
3c20: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74  error occurs, it
3c30: 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73 73   might be necess
3c40: 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74  ary for SQLite t
3c50: 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63  o rollback and.c
3c60: 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65  ancel the entire
3c70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
3c80: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  An application c
3c90: 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f  an tell which.co
3ca0: 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53  urse of action S
3cb0: 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73  QLite took by us
3cc0: 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33  ing the.[sqlite3
3cd0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28  _get_autocommit(
3ce0: 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e  )] C-language in
3cf0: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70  terface.</p>..<p
3d00: 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64  >It is recommend
3d10: 65 64 20 74 68 61 74 20 61 70 70 6c 69 63 61 74  ed that applicat
3d20: 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20  ions respond to 
3d30: 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65  the errors.liste
3d40: 64 20 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69  d above by expli
3d50: 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20  citly issuing a 
3d60: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
3d70: 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e  .  ^If the .tran
3d80: 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65  saction has alre
3d90: 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20  ady been rolled 
3da0: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
3db0: 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20  ly.by the error 
3dc0: 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74  response, then t
3dd0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
3de0: 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  and will fail wi
3df0: 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74  th an.error, but
3e00: 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73   no harm is caus
3e10: 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a  ed by this.</p>.
3e20: 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72 73 69  .<p>Future versi
3e30: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61  ons of SQLite ma
3e40: 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73  y extend the lis
3e50: 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63  t of errors whic
3e60: 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20 61 75  h.might cause au
3e70: 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74  tomatic transact
3e80: 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46  ion rollback.  F
3e90: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
3ea0: 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63  f.SQLite might c
3eb0: 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20  hange the error 
3ec0: 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61  response.  In pa
3ed0: 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79  rticular, we may
3ee0: 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c  .choose to simpl
3ef0: 69 66 79 20 74 68 65 20 69 6e 74 65 72 66 61 63  ify the interfac
3f00: 65 20 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  e in future vers
3f10: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62  ions of SQLite b
3f20: 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20 65 72  y.causing the er
3f30: 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f  rors above to fo
3f40: 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69  rce an unconditi
3f50: 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f  onal rollback.</
3f60: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fb0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
3fc0: 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61  n {SAVEPOINT} sa
3fd0: 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49  vepoint {SAVEPOI
3fe0: 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75 62  NT RELEASE}..Bub
3ff0: 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70  bleDiagram savep
4000: 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65  oint-stmt.Bubble
4010: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
4020: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
4030: 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  am rollback-stmt
4040: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41  .</tcl>..<p> ^SA
4050: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d  VEPOINTs are a m
4060: 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e  ethod of creatin
4070: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  g transactions, 
4080: 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49  similar to.[BEGI
4090: 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c  N] and [COMMIT],
40a0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
40b0: 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52   SAVEPOINT and R
40c0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a  ELEASE commands.
40d0: 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61  are named and ma
40e0: 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e  y be nested.</p>
40f0: 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50  ..<p> ^The SAVEP
4100: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61  OINT command sta
4110: 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
4120: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d  ction with a nam
4130: 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74  e..^The transact
4140: 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e  ion names need n
4150: 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28  ot be unique..^(
4160: 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20  A SAVEPOINT can 
4170: 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65  be started eithe
4180: 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73  r within or outs
4190: 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d  ide of.a [BEGIN]
41a0: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20  ...[COMMIT].)^  
41b0: 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49  ^(When a SAVEPOI
41c0: 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d  NT is the outer-
41d0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61  most savepoint.a
41e0: 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74  nd it is not wit
41f0: 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e  hin a [BEGIN]...
4200: 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68  [COMMIT] then th
4210: 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68  e behavior is th
4220: 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20  e.same as BEGIN 
4230: 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43  DEFERRED TRANSAC
4240: 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  TION.)^</p>..<p>
4250: 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  ^The ROLLBACK TO
4260: 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73   command reverts
4270: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
4280: 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20  e database back 
4290: 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a  to what.it was j
42a0: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f  ust after the co
42b0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45  rresponding SAVE
42c0: 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68  POINT.  ^Note th
42d0: 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70  at unlike that.p
42e0: 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  lain [ROLLBACK] 
42f0: 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74  command (without
4300: 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29   the TO keyword)
4310: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
4320: 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f   command.does no
4330: 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61  t cancel the tra
4340: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74  nsaction.  ^Inst
4350: 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e  ead of cancellin
4360: 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  g the transactio
4370: 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  n,.the ROLLBACK 
4380: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61  TO command resta
4390: 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  rts the transact
43a0: 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65  ion again at the
43b0: 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c   beginning..^All
43c0: 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56   intervening SAV
43d0: 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63  EPOINTs are canc
43e0: 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f  eled, however.</
43f0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45  p>..<p>^The RELE
4400: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c  ASE command is l
4410: 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66  ike a [COMMIT] f
4420: 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a  or a SAVEPOINT..
4430: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
4440: 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20  mand causes all 
4450: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20  savepoints back 
4460: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
4470: 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e   the .most recen
4480: 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  t savepoint with
4490: 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65   a matching name
44a0: 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66   to be removed f
44b0: 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63  rom the .transac
44c0: 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68  tion stack.  ^Th
44d0: 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20  e RELEASE of an 
44e0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
44f0: 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65  n.does not cause
4500: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20   any changes to 
4510: 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  be written to th
4520: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b  e database file;
4530: 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76   it merely.remov
4540: 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72  es savepoints fr
4550: 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  om the transacti
4560: 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68  on stack such th
4570: 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67  at it is.no long
4580: 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52  er possible to R
4590: 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65  OLLBACK TO those
45a0: 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66   savepoints..^If
45b0: 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
45c0: 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20  nd releases the 
45d0: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
45e0: 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65  int, so.that the
45f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
4600: 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79  ck becomes empty
4610: 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69  , then RELEASE i
4620: 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43  s the same.as [C
4630: 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f  OMMIT]..^The [CO
4640: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61  MMIT] command ma
4650: 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c  y be used to rel
4660: 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69  ease all savepoi
4670: 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74  nts and.commit t
4680: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
4690: 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73  ven if the trans
46a0: 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69  action was origi
46b0: 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79  nally started.by
46c0: 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d   a SAVEPOINT com
46d0: 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20  mand instead of 
46e0: 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  a [BEGIN] comman
46f0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
4700: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
4710: 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63  e in a RELEASE c
4720: 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ommand does not 
4730: 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f  match any.savepo
4740: 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  int currently in
4750: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4760: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20   stack, then no 
4770: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72  savepoints are.r
4780: 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74  eleased, the dat
4790: 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67  abase is unchang
47a0: 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45  ed, and the RELE
47b0: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  ASE command retu
47c0: 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  rns.an error.</p
47d0: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
47e0: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
47f0: 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d  ction might comm
4800: 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45  it (using the RE
4810: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62  LEASE command).b
4820: 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61  ut then later ha
4830: 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f  ve its work undo
4840: 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b  ne by a ROLLBACK
4850: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
4860: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77  nsaction..^A pow
4870: 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72  er failure or pr
4880: 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f  ogram crash or O
4890: 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75  S crash will cau
48a0: 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73  se the outer-mos
48b0: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  t.transaction to
48c0: 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69   rollback, undoi
48d0: 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ng all changes t
48e0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
48f0: 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75  d within.that ou
4900: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ter transaction,
4910: 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68   even changes th
4920: 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64  at have supposed
4930: 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74  ly been "committ
4940: 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41  ed".by the RELEA
4950: 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f  SE command.  ^Co
4960: 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74  ntent is not act
4970: 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20  ually committed 
4980: 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74  on the disk .unt
4990: 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  il the outermost
49a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
49b0: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mits.</p>..<p>Th
49c0: 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20  ere are several 
49d0: 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67  ways of thinking
49e0: 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41   about the RELEA
49f0: 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a  SE command:</p>.
4a00: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f  .<ul>.<li><p>.So
4a10: 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52  me people view R
4a20: 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71  ELEASE as the eq
4a30: 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d  uivalent of COMM
4a40: 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  IT for a SAVEPOI
4a50: 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61  NT..This is an a
4a60: 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20  cceptable point 
4a70: 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20  of view as long 
4a80: 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73  as one remembers
4a90: 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65   that the.change
4aa0: 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61  s committed by a
4ab0: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
4ac0: 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20  ion might later 
4ad0: 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72  be undone by a.r
4ae0: 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75  ollback in an ou
4af0: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ter transaction.
4b00: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
4b10: 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20  p>.Another view 
4b20: 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68  of RELEASE is th
4b30: 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e  at it merges a n
4b40: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
4b50: 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74   into its.parent
4b60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f   transaction, so
4b70: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20   that the named 
4b80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
4b90: 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d  its parent becom
4ba0: 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  e.the same trans
4bb0: 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52  action.  After R
4bc0: 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65  ELEASE, the name
4bd0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
4be0: 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c  d its parent.wil
4bf0: 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c  l commit or roll
4c00: 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77  back together, w
4c10: 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61  hatever their fa
4c20: 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c  te may be..</p><
4c30: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e  /li>..<li><p>.On
4c40: 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b  e can also think
4c50: 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61   of savepoints a
4c60: 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65  s."marks" in the
4c70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d   transaction tim
4c80: 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20  eline.  In this 
4c90: 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f  view, the SAVEPO
4ca0: 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61  INT command.crea
4cb0: 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20  tes a new mark, 
4cc0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
4cd0: 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20  command rewinds 
4ce0: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63  the timeline bac
4cf0: 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73  k.to a point jus
4d00: 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65  t after the name
4d10: 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20  d mark, and the 
4d20: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a  RELEASE command.
4d30: 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f  erases marks fro
4d40: 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77  m the timeline w
4d50: 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20  ithout actually 
4d60: 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67  making any.chang
4d70: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
4d80: 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  se..</p></li>.</
4d90: 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73  ul>....<h3>Trans
4da0: 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52  action Nesting R
4db0: 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ules</h3>..<p>^T
4dc0: 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74  he last transact
4dd0: 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c  ion started will
4de0: 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72   be the first.tr
4df0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
4e00: 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61  ted or rolled ba
4e10: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ck.</p>..<p>^The
4e20: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
4e30: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74   only works if t
4e40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
4e50: 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f  tack is empty, o
4e60: 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  r.in other words
4e70: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
4e80: 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63   pending transac
4e90: 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20  tions.  ^If the 
4ea0: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63  transaction.stac
4eb0: 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77  k is not empty w
4ec0: 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20  hen the [BEGIN] 
4ed0: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b  command is invok
4ee0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d  ed, then the com
4ef0: 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20  mand.fails with 
4f00: 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
4f10: 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20  p>^The [COMMIT] 
4f20: 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20  command commits 
4f30: 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  all outstanding 
4f40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64  transactions and
4f50: 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e   leaves.the tran
4f60: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
4f70: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
4f80: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4f90: 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68  d starts with th
4fa0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64  e most recent ad
4fb0: 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72  dition to the.tr
4fc0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
4fd0: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76  and releases sav
4fe0: 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64  epoints backward
4ff0: 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c  s .in time until
5000: 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73   it releases a s
5010: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
5020: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
5030: 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20  nt-name..^Prior 
5040: 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e  savepoints, even
5050: 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68   savepoints with
5060: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
5070: 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75  int-names, are.u
5080: 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68  nchanged..^If th
5090: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
50a0: 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61  d causes the.tra
50b0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74  nsaction stack t
50c0: 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28  o become empty (
50d0: 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  if the RELEASE c
50e0: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
50f0: 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72  the.outermost tr
5100: 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74  ansaction from t
5110: 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74  he stack) then t
5120: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  he transaction c
5130: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
5140: 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  ^The [ROLLBACK] 
5150: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20  command without 
5160: 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c  a TO clause roll
5170: 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e  s backs all tran
5180: 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61  sactions.and lea
5190: 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  ves the transact
51a0: 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e  ion stack empty.
51b0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
51c0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
51d0: 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20  ith a TO clause 
51e0: 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73  rolls back trans
51f0: 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61  actions going.ba
5200: 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20  ckwards in time 
5210: 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74  back to the most
5220: 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e   recent SAVEPOIN
5230: 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  T with a matchin
5240: 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56  g name..^The SAV
5250: 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20  EPOINT with the 
5260: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65  matching name re
5270: 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61  mains on the tra
5280: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a  nsaction stack,.
5290: 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65  but all database
52a0: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63   changes that oc
52b0: 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61  curred after tha
52c0: 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20  t SAVEPOINT was 
52d0: 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c  created.are roll
52e0: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
52f0: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
5300: 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   in a ROLLBACK T
5310: 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  O command does n
5320: 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56  ot.match any SAV
5330: 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74  EPOINT on the st
5340: 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f  ack, then the RO
5350: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66  LLBACK command f
5360: 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72  ails with an.err
5370: 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68  or and leaves th
5380: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  e state of the d
5390: 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65  atabase unchange
53a0: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
53b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
5400: 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f  ction comment co
5410: 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a  mment {comment *
5420: 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c  comments}..Bubbl
5430: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74  eDiagram comment
5440: 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a  -syntax.</tcl>..
5450: 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65  <p>^Comments are
5460: 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64   not SQL command
5470: 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72  s, but can occur
5480: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74   within the text
5490: 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20   of.SQL queries 
54a0: 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74  passed to [sqlit
54b0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d  e3_prepare_v2()]
54c0: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74   and related int
54d0: 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e  erfaces..^Commen
54e0: 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61  ts are treated a
54f0: 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20  s whitespace by 
5500: 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d  the parser..^Com
5510: 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20  ments can begin 
5520: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
5530: 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e  ace .can be foun
5540: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  d, including ins
5550: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5560: 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70  that span multip
5570: 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a  le lines..</p>..
5580: 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73  <p>^SQL comments
5590: 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20   begin with two 
55a0: 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20  consecutive "-" 
55b0: 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49  characters (ASCI
55c0: 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65  I 0x2d).and exte
55d0: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
55e0: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
55f0: 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65  newline characte
5600: 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f  r (ASCII 0x0a).o
5610: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
5620: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
5630: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
5640: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c  </p>..<p>^C-styl
5650: 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e  e comments begin
5660: 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65  .with "/*" and e
5670: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
5680: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
5690: 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65  xt "*/" characte
56a0: 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20  r pair.or until 
56b0: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
56c0: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
56d0: 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79  s first.  ^C-sty
56e0: 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20  le comments.can 
56f0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5700: 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43  nes. </p>..<p>^C
5710: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  omments can appe
5720: 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  ar anywhere whit
5730: 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72  espace can occur
5740: 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  ,.including insi
5750: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  de expressions a
5760: 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  nd in the middle
5770: 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74   of other SQL st
5780: 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65  atements..^Comme
5790: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
57a0: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5800: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44  tion {CREATE IND
5810: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20  EX} createindex 
5820: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d  {{CREATE INDEX}}
5830: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
5840: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
5850: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
5860: 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e  m indexed-column
5870: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
5880: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
5890: 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  mmand consists o
58a0: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  f the keywords "
58b0: 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f  CREATE INDEX" fo
58c0: 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61  llowed.by the na
58d0: 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e  me of the new in
58e0: 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  dex, the keyword
58f0: 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20   "ON", the name 
5900: 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a  of a previously.
5910: 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68  created table th
5920: 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65  at is to be inde
5930: 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e  xed, and a paren
5940: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
5950: 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e   names of.column
5960: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  s in the table t
5970: 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72  hat are used for
5980: 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c   the index key.<
5990: 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63 6f  /p>..<p>^Each co
59a0: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
59b0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65   followed by one
59c0: 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72   of the "ASC" or
59d0: 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73   "DESC" keywords
59e0: 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72  .to indicate sor
59f0: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73  t order.  ^The s
5a00: 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72  ort order may or
5a10: 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f   may not be igno
5a20: 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e  red depending.on
5a30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5a40: 6c 65 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68 65  le format.  ^The
5a50: 20 22 6c 65 67 61 63 79 22 20 66 69 6c 65 20 66   "legacy" file f
5a60: 6f 72 6d 61 74 20 69 67 6e 6f 72 65 73 20 69 6e  ormat ignores in
5a70: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
5a80: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
5a90: 20 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d   index file form
5aa0: 61 74 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  at takes index s
5ab0: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
5ac0: 63 63 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20  ccount.  ^(Only 
5ad0: 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69 74 65  copies of SQLite
5ae0: 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76 65 72   newer than [ver
5af0: 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65  sion 3.3.0] .(re
5b00: 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36 2d 30  leased on 2006-0
5b10: 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65 20 74  1-10) are able t
5b20: 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68 65  o understand the
5b30: 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64 69 6e   newer descendin
5b40: 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72  g.index file for
5b50: 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72 20 63  mat and so for c
5b60: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
5b70: 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  h older versions
5b80: 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68 65 20   of.SQLite, the 
5b90: 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d  legacy file form
5ba0: 61 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  at is generated 
5bb0: 62 79 20 64 65 66 61 75 6c 74 2e 29 5e 20 20 5e  by default.)^  ^
5bc0: 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f  Use the.[legacy_
5bd0: 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61  file_format] pra
5be0: 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  gma to modify th
5bf0: 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  is behavior and 
5c00: 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73  generate.databas
5c10: 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  es that use the 
5c20: 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61  newer file forma
5c30: 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  t.  Future versi
5c40: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61  ons of SQLite.ma
5c50: 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72  y begin to gener
5c60: 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66 69  ate the newer fi
5c70: 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66  le format by def
5c80: 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ault.</p>..<p>^T
5c90: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
5ca0: 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
5cb0: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75  lowing each colu
5cc0: 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20  mn name defines 
5cd0: 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a.collating sequ
5ce0: 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74 65  ence used for te
5cf0: 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  xt entries in th
5d00: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20  at column..^The 
5d10: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
5d20: 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74 68  g.sequence is th
5d30: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
5d40: 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72  ence defined for
5d50: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20   that column in 
5d60: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
5d70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  E] statement.  ^
5d80: 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69  Or if no collati
5d90: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f  ng sequence is o
5da0: 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65 64  therwise defined
5db0: 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42  ,.the built-in B
5dc0: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
5dd0: 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
5de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
5df0: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
5e00: 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e   limits on the n
5e10: 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73  umber of indices
5e20: 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74   that can be.att
5e30: 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c  ached to a singl
5e40: 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20  e table.  ^(The 
5e50: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
5e60: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73  s in an index is
5e70: 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65   .limited to the
5e80: 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73   value set by.[s
5e90: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53  qlite3_limit]([S
5ea0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
5eb0: 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a  MN],...).)^</p>.
5ec0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51  .<p>^If the UNIQ
5ed0: 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  UE keyword appea
5ee0: 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41 54  rs between CREAT
5ef0: 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e  E and INDEX then
5f00: 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78   duplicate.index
5f10: 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74   entries are not
5f20: 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20   allowed.  ^Any 
5f30: 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72  attempt to inser
5f40: 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e  t a duplicate en
5f50: 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20  try.will result 
5f60: 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46  in an error.  ^F
5f70: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
5f80: 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65  of unique indice
5f90: 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75  s, all NULL valu
5fa0: 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es.are considere
5fb0: 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66  d to different f
5fc0: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55  rom all other NU
5fd0: 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72  LL values and ar
5fe0: 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54  e thus unique..T
5ff0: 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68  his is one of th
6000: 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69  e two possible i
6010: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f  nterpretations o
6020: 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61  f the SQL-92 sta
6030: 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75  ndard.(the langu
6040: 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64  age in the stand
6050: 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73  ard is ambiguous
6060: 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74  ) and is the int
6070: 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c  erpretation.foll
6080: 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65 53  owed by PostgreS
6090: 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62  QL, MySQL, Fireb
60a0: 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e  ird, and Oracle.
60b0: 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d    Informix and.M
60c0: 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72  icrosoft SQL Ser
60d0: 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f  ver follow the o
60e0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61 74  ther interpretat
60f0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64  ion of the stand
6100: 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ard.</p>..<p>^If
6110: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46   the optional IF
6120: 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75   NOT EXISTS clau
6130: 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e  se is present an
6140: 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a  d another index.
6150: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
6160: 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  me already exist
6170: 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d  s, then this com
6180: 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e  mand becomes a n
6190: 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  o-op.</p>..<p>^I
61a0: 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76  ndexes are remov
61b0: 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f  ed with the [DRO
61c0: 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64  P INDEX] command
61d0: 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
61e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6220: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
6230: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42  tion {CREATE TAB
6240: 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65  LE} {createtable
6250: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
6260: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
6270: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
6280: 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
6290: 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42  ram column-def.B
62a0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79 70  ubbleDiagram typ
62b0: 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61  e-name.BubbleDia
62c0: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73  gram column-cons
62d0: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
62e0: 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74  gram table-const
62f0: 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67  raint.BubbleDiag
6300: 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ram foreign-key-
6310: 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
6320: 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41  p>The "CREATE TA
6330: 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BLE" command is 
6340: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  used to create a
6350: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e   new table in an
6360: 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73   SQLite .databas
6370: 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  e. A CREATE TABL
6380: 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66  E command specif
6390: 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ies the followin
63a0: 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  g attributes of 
63b0: 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a  the.new table:..
63c0: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68  <ul>.  <li><p>Th
63d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
63e0: 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  w table...  <li>
63f0: 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65  <p> The database
6400: 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65   in which the ne
6410: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
6420: 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62  ed. Tables may b
6430: 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64  e .      created
6440: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
6450: 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20  abase, the temp 
6460: 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20  database, or in 
6470: 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20  any attached.   
6480: 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20     database...  
6490: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65  <li><p> The name
64a0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
64b0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
64c0: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63   <li><p> The dec
64d0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61  lared type of ea
64e0: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
64f0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
6500: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c  p> A default val
6510: 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  ue or expression
6520: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
6530: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
6540: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
6550: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
6560: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69  quence to use wi
6570: 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  th each column..
6580: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f  .  <li><p> Optio
6590: 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59  nally, a PRIMARY
65a0: 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
65b0: 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20  le. Both single 
65c0: 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20  column and.     
65d0: 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c    composite (mul
65e0: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72  tiple column) pr
65f0: 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73  imary keys are s
6600: 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69  upported...  <li
6610: 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51  ><p> A set of SQ
6620: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  L constraints fo
6630: 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51  r each table. SQ
6640: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e  Lite supports UN
6650: 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20  IQUE, NOT.      
6660: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64   NULL, CHECK and
6670: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
6680: 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75 6c 3e 0a  straints..</ul>.
6690: 0a 3c 70 3e 45 76 65 72 79 20 43 52 45 41 54 45  .<p>Every CREATE
66a0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
66b0: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 61 20   must specify a 
66c0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6e 65 77  name for the new
66d0: 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54 61 62 6c   table..  ^(Tabl
66e0: 65 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67  e names that beg
66f0: 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  in with "sqlite_
6700: 22 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66  " are reserved f
6710: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e  or internal use.
6720: 20 49 74 0a 20 20 69 73 20 61 6e 20 65 72 72 6f   It.  is an erro
6730: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
6740: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 77  create a table w
6750: 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20  ith a name that 
6760: 73 74 61 72 74 73 20 77 69 74 68 0a 20 20 22 73  starts with.  "s
6770: 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c 70 3e 20  qlite_".)^..<p> 
6780: 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61  ^If a &lt;databa
6790: 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73  se-name&gt; is s
67a0: 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73  pecified, it mus
67b0: 74 20 62 65 20 65 69 74 68 65 72 20 22 6d 61 69  t be either "mai
67c0: 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f  n", .  "temp", o
67d0: 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
67e0: 20 5b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   [ATTACH DATABAS
67f0: 45 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62  E|attached datab
6800: 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63  ase]. ^In this c
6810: 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61  ase.  the new ta
6820: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
6830: 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  n the named data
6840: 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54  base. ^If the "T
6850: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
6860: 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63  RY".  keyword oc
6870: 63 75 72 73 20 62 65 74 77 65 65 6e 20 74 68 65  curs between the
6880: 20 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54   "CREATE" and "T
6890: 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e  ABLE" then the n
68a0: 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72  ew table is.  cr
68b0: 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d  eated in the tem
68c0: 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20  p database. ^It 
68d0: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73  is an error to s
68e0: 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20  pecify both a . 
68f0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6900: 6d 65 26 67 74 3b 20 61 6e 64 20 74 68 65 20 54  me&gt; and the T
6910: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
6920: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
6930: 20 74 68 65 0a 20 20 26 6c 74 3b 64 61 74 61 62   the.  &lt;datab
6940: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ase-name&gt; is 
6950: 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e 6f 20 64  "temp". ^If no d
6960: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
6970: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
6980: 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  e.  TEMP keyword
6990: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20   is not present 
69a0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
69b0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
69c0: 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65   main.  database
69d0: 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20  ...<p>.  ^It is 
69e0: 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72  usually an error
69f0: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63   to attempt to c
6a00: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
6a10: 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  e in a database 
6a20: 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63  that.  already c
6a30: 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c  ontains a table,
6a40: 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f   index or view o
6a50: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  f the same name.
6a60: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
6a70: 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53  e.  "IF NOT EXIS
6a80: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
6a90: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
6aa0: 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  of the CREATE TA
6ab0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  BLE statement an
6ac0: 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76  d.  a table or v
6ad0: 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20  iew of the same 
6ae0: 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69  name already exi
6af0: 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45 20  sts, the CREATE 
6b00: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20  TABLE command.  
6b10: 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66  simply has no ef
6b20: 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72  fect (and no err
6b30: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72 65  or message is re
6b40: 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72  turned). ^An err
6b50: 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65  or is still.  re
6b60: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74 61  turned if the ta
6b70: 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  ble cannot be cr
6b80: 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f 66  eated because of
6b90: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64   an existing ind
6ba0: 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74  ex, even .  if t
6bb0: 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54  he "IF NOT EXIST
6bc0: 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  S" clause is spe
6bd0: 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20  cified...<p>^It 
6be0: 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
6bf0: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6c00: 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20 73  e that has the s
6c10: 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a  ame name as an .
6c20: 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41    existing [CREA
6c30: 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67 67  TE TRIGGER|trigg
6c40: 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  er]...<p>^Tables
6c50: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
6c60: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
6c70: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
6c80: 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45 41 54 45  </p>..<h3>CREATE
6c90: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45   TABLE ... AS SE
6ca0: 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73 3c  LECT Statements<
6cb0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43 52  /h3>..<p>^(A "CR
6cc0: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
6cd0: 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d  S SELECT" statem
6ce0: 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64 20  ent creates and 
6cf0: 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74 61  populates a data
6d00: 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65 64  base.table based
6d10: 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
6d20: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
6d30: 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 74  ement.)^ ^(The t
6d40: 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d  able has the sam
6d50: 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e.number of colu
6d60: 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73 20  mns as the rows 
6d70: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
6d80: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
6d90: 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65 61  . The name of.ea
6da0: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ch column is the
6db0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61 6d   same as the nam
6dc0: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
6dd0: 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 6e  onding column in
6de0: 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74 20   the result.set 
6df0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  of the SELECT st
6e00: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
6e10: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
6e20: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
6e30: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
6e40: 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20 61  he [expression a
6e50: 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
6e60: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78  corresponding ex
6e70: 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
6e80: 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74 68  result set.of th
6e90: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
6ea0: 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  nt, as follows:.
6eb0: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c 74  </p>..<center><t
6ec0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 20  able border=1>. 
6ed0: 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73 73   <tr><th>Express
6ee0: 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20 3c  ion Affinity   <
6ef0: 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72  th>Column Declar
6f00: 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c 74  ed Type.  <tr><t
6f10: 64 3e 54 45 58 54 20 20 20 20 20 20 20 20 20 20  d>TEXT          
6f20: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45 58          <td>"TEX
6f30: 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55 4d  T".  <tr><td>NUM
6f40: 45 52 49 43 20 20 20 20 20 20 20 20 20 20 20 20  ERIC            
6f50: 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20 3c     <td>"NUM".  <
6f60: 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20 20  tr><td>INTEGER  
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
6f80: 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74 64  >"INT".  <tr><td
6f90: 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20 20 20  >REAL           
6fa0: 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41 4c         <td>"REAL
6fb0: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f 4e 45  ".  <tr><td>NONE
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fd0: 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79 20    <td>"" (empty 
6fe0: 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65 3e  string).</table>
6ff0: 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
7000: 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61 74 65  ^(A table create
7010: 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  d using CREATE T
7020: 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20 50  ABLE AS has no P
7030: 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
7040: 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66  o.constraints of
7050: 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20 64   any kind. The d
7060: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
7070: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  each column is N
7080: 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74  ULL. The default
7090: 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  .collation seque
70a0: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  nce for each col
70b0: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 74  umn of the new t
70c0: 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 29  able is BINARY.)
70d0: 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63 72  ^..<p>^Tables cr
70e0: 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
70f0: 54 45 20 54 41 42 4c 45 20 41 53 20 61 72 65 20  TE TABLE AS are 
7100: 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61  initially popula
7110: 74 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f 77  ted with the.row
7120: 73 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e  s of data return
7130: 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
7140: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f 77   statement. ^Row
7150: 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20 63  s are assigned c
7160: 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63 65  ontiguously.asce
7170: 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76 61  nding [rowid] va
7180: 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20 77  lues, starting w
7190: 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b 6f  ith 1, in the [o
71a0: 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20 74  rder by|order] t
71b0: 68 61 74 20 74 68 65 79 0a 61 72 65 20 72 65 74  hat they.are ret
71c0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
71d0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
71e0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
71f0: 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b   {tablecoldef} {
7200: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
7210: 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  n} {column defin
7220: 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  itions}</tcl>.<h
7230: 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69 74  3>Column Definit
7240: 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e  ions</h3>..<p>Un
7250: 6c 65 73 73 20 69 74 20 69 73 20 61 20 43 52 45  less it is a CRE
7260: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
7270: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
7280: 74 2c 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  t, a CREATE TABL
7290: 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20 6f  E includes.one o
72a0: 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d 64  r more [column-d
72b0: 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  ef|column defini
72c0: 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61 6c  tions], optional
72d0: 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
72e0: 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65 2d   list of.[table-
72f0: 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c 65  constraint|table
7300: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 20   constraints].  
7310: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
7320: 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73 20  nition consists 
7330: 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74  of the.name of t
7340: 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69 6f  he column, optio
7350: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
7360: 79 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  y the declared t
7370: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
7380: 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d  n,.then one or m
7390: 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f  ore optional [co
73a0: 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 7c  lumn-constraint|
73b0: 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e  column constrain
73c0: 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69 6e  ts]. Included in
73d0: 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20  .the definition 
73e0: 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74  of "column const
73f0: 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65 20  raints" for the 
7400: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20  purposes of the 
7410: 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d 65  previous.stateme
7420: 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c 41  nt are the COLLA
7430: 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20 63  TE and DEFAULT c
7440: 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68 6f  lauses, even tho
7450: 75 67 68 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ugh these are no
7460: 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72 61  t really.constra
7470: 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e 73  ints in the sens
7480: 65 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  e that they do n
7490: 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20  ot restrict the 
74a0: 64 61 74 61 20 74 68 61 74 20 74 68 65 20 74 61  data that the ta
74b0: 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e 2e  ble may.contain.
74c0: 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73 74   The other const
74d0: 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55 4c  raints - NOT NUL
74e0: 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55 45  L, CHECK, UNIQUE
74f0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  , PRIMARY KEY an
7500: 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  d.FOREIGN KEY co
7510: 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70 6f  nstraints - impo
7520: 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  se restrictions 
7530: 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64 61  on the tables da
7540: 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65 0a  ta, and are are.
7550: 64 65 73 63 72 69 62 65 64 20 75 6e 64 65 72 20  described under 
7560: 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51 4c  [constraints|SQL
7570: 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74   Data Constraint
7580: 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55  s] below...<p>^U
7590: 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64  nlike most SQL d
75a0: 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65  atabases, SQLite
75b0: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69   does not restri
75c0: 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  ct the type of d
75d0: 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65 20  ata that.may be 
75e0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20  inserted into a 
75f0: 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 20  column based on 
7600: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c  the columns decl
7610: 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74 65  ared type. Inste
7620: 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  ad,.SQLite uses 
7630: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
7640: 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20  . ^The declared 
7650: 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  type of a column
7660: 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74 65   is used to.dete
7670: 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69 6e  rmine the [affin
7680: 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c 75  ity] of the colu
7690: 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e 54 68 65  mn only...<p>The
76a0: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20   DEFAULT clause 
76b0: 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66 61  specifies a defa
76c0: 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ult value to use
76d0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
76e0: 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20 65  if no.value is e
76f0: 78 70 6c 69 63 69 74 6c 79 20 70 72 6f 76 69 64  xplicitly provid
7700: 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20 77  ed by the user w
7710: 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49 4e  hen doing an [IN
7720: 53 45 52 54 5d 2e 20 5e 49 66 20 74 68 65 72 65  SERT]. ^If there
7730: 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 20  .is no explicit 
7740: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 61  DEFAULT clause a
7750: 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c  ttached to a col
7760: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
7770: 74 68 65 6e 20 74 68 65 20 0a 64 65 66 61 75 6c  then the .defaul
7780: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  t value of the c
7790: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e  olumn is NULL. ^
77a0: 28 41 6e 20 65 78 70 6c 69 63 69 74 20 44 45 46  (An explicit DEF
77b0: 41 55 4c 54 20 63 6c 61 75 73 65 20 6d 61 79 20  AULT clause may 
77c0: 73 70 65 63 69 66 79 0a 74 68 61 74 20 74 68 65  specify.that the
77d0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
77e0: 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  s NULL, a string
77f0: 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c 6f   constant, a blo
7800: 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73 69  b constant, a.si
7810: 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72 20  gned-number, or 
7820: 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  any constant exp
7830: 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65 64  ression enclosed
7840: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e   in parentheses.
7850: 20 41 6e 20 65 78 70 6c 69 63 69 74 0a 64 65 66   An explicit.def
7860: 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61  ault value may a
7870: 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  lso be one of th
7880: 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69  e special case-i
7890: 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f  ndependent keywo
78a0: 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45  rds.CURRENT_TIME
78b0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
78c0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
78d0: 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  AMP.)^ ^For the 
78e0: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a  purposes of the.
78f0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20  DEFAULT clause, 
7900: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
7910: 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73   considered cons
7920: 74 61 6e 74 20 70 72 6f 76 69 64 65 64 20 74 68  tant provided th
7930: 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f 74 20 63  at it does.not c
7940: 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75 62 2d 71  ontain any sub-q
7950: 75 65 72 69 65 73 20 6f 72 20 73 74 72 69 6e 67  ueries or string
7960: 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e 63 6c 6f   constants enclo
7970: 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 20 71 75  sed in double qu
7980: 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68  otes...<p>^(Each
7990: 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69   time a row is i
79a0: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
79b0: 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53   table by an INS
79c0: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ERT statement th
79d0: 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f  at .does not pro
79e0: 76 69 64 65 20 65 78 70 6c 69 63 69 74 20 76 61  vide explicit va
79f0: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62  lues for all tab
7a00: 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76  le columns the v
7a10: 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a  alues stored in.
7a20: 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20  the new row are 
7a30: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
7a40: 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
7a50: 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  es)^, as follows
7a60: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
7a70: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7a80: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
7a90: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  lumn is a consta
7aa0: 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62  nt NULL, text, b
7ab0: 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65  lob or.    signe
7ac0: 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20  d-number value, 
7ad0: 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20  then that value 
7ae0: 69 73 20 75 73 65 64 20 64 69 72 65 63 74 6c 79  is used directly
7af0: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
7b00: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
7b10: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
7b20: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
7b30: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
7b40: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
7b50: 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70 72 65  en.    the expre
7b60: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
7b70: 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
7b80: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e   row inserted an
7b90: 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20  d the results.  
7ba0: 20 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65    used in the ne
7bb0: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
7bc0: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7bd0: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
7be0: 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  mn is CURRENT_TI
7bf0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
7c00: 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f   or.    CURRENT_
7c10: 44 41 54 45 54 49 4d 45 2c 20 74 68 65 6e 20 74  DATETIME, then t
7c20: 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e  he value used in
7c30: 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20   the new row is 
7c40: 61 20 74 65 78 74 0a 20 20 20 20 72 65 70 72 65  a text.    repre
7c50: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
7c60: 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74   current UTC dat
7c70: 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e  e and/or time. ^
7c80: 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  For CURRENT_TIME
7c90: 2c 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61 74  , the.    format
7ca0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   of the value is
7cb0: 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f   "HH:MM:SS". ^Fo
7cc0: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
7cd0: 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54  "YYYY-MM-DD". ^T
7ce0: 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66 6f  he.    format fo
7cf0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
7d00: 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d  AMP is "YYYY-MM-
7d10: 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f  DD HH:MM:SS"..</
7d20: 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  ul>..<p>^The COL
7d30: 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63  LATE clause spec
7d40: 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  ifies the name o
7d50: 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73  f a [collating s
7d60: 65 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65 20  equence] to use 
7d70: 61 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20 63  as.the default c
7d80: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
7d90: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
7da0: 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45  . ^If no COLLATE
7db0: 20 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63 69   clause is.speci
7dc0: 66 69 65 64 2c 20 74 68 65 20 64 65 66 61 75 6c  fied, the defaul
7dd0: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
7de0: 65 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59 5d  ence is [BINARY]
7df0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65  ...<p>^The numbe
7e00: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
7e10: 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74  a table is limit
7e20: 65 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49 54  ed by the [SQLIT
7e30: 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f  E_MAX_COLUMN].co
7e40: 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d  mpile-time param
7e50: 65 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20  eter. ^A single 
7e60: 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20 63  row of a table c
7e70: 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65  annot store more
7e80: 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41   than.[SQLITE_MA
7e90: 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73 20  X_LENGTH] bytes 
7ea0: 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f  of data. ^Both o
7eb0: 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63  f these limits c
7ec0: 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74  an be lowered at
7ed0: 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74  .runtime using t
7ee0: 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  he [sqlite3_limi
7ef0: 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  t()] C/C++ inter
7f00: 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  face.</p>..<tcl>
7f10: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e  hd_fragment {con
7f20: 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74  straints} {const
7f30: 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  raints}</tcl>.<h
7f40: 33 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74  3>SQL Data Const
7f50: 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  raints</h3>..<p>
7f60: 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53  ^Each table in S
7f70: 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61  QLite may have a
7f80: 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52  t most one <b>PR
7f90: 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e  IMARY KEY</b>. ^
7fa0: 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64  If the.  keyword
7fb0: 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72  s PRIMARY KEY ar
7fc0: 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c  e added to a col
7fd0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
7fe0: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
7ff0: 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74   key.  for the t
8000: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
8010: 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c   that single col
8020: 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50  umn. ^Or, if a P
8030: 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73  RIMARY KEY claus
8040: 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65  e .  is specifie
8050: 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f  d as a [table-co
8060: 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20  nstraint], then 
8070: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
8080: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63  of the table.  c
8090: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c  onsists of the l
80a0: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ist of columns s
80b0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
80c0: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
80d0: 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 49  KEY clause..  ^I
80e0: 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
80f0: 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59  than one PRIMARY
8100: 20 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20 61   KEY clause in a
8110: 20 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20 54   single CREATE T
8120: 41 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e 74  ABLE.  statement
8130: 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
8140: 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65  ...<p>If a table
8150: 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f   has a single co
8160: 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79  lumn primary key
8170: 2c 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72  , and the declar
8180: 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a  ed type of that.
8190: 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54    column is "INT
81a0: 45 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65 20  EGER", then the 
81b0: 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20  column is known 
81c0: 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  as an [INTEGER P
81d0: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53  RIMARY KEY]..  S
81e0: 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64  ee below for a d
81f0: 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68  escription of th
8200: 65 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72  e special proper
8210: 74 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f  ties and behavio
8220: 75 72 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64  urs.  associated
8230: 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45   with an [INTEGE
8240: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
8250: 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e  .<p>^Each row in
8260: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
8270: 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74  primary key must
8280: 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71 75   feature a uniqu
8290: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20  e combination.  
82a0: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73  of values in its
82b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
82c0: 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70  umns. ^For the p
82d0: 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
82e0: 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69  mining.  the uni
82f0: 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61  queness of prima
8300: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e  ry key values, N
8310: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
8320: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
8330: 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74  ct from.  all ot
8340: 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c  her values, incl
8350: 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c  uding other NULL
8360: 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52  s. ^If an [INSER
8370: 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20  T] or [UPDATE]. 
8380: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
8390: 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  pts to modify th
83a0: 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20  e table content 
83b0: 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d  so that two or m
83c0: 6f 72 65 20 72 6f 77 73 0a 20 20 66 65 61 74 75  ore rows.  featu
83d0: 72 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69  re identical pri
83e0: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c  mary key values,
83f0: 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61   it is a constra
8400: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20  int violation.. 
8410: 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   According to th
8420: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20  e SQL standard, 
8430: 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75  PRIMARY KEY shou
8440: 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20  ld always imply 
8450: 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f  NOT NULL..  Unfo
8460: 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74  rtunately, due t
8470: 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e  o a long-standin
8480: 67 20 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67  g coding oversig
8490: 68 74 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ht, this is not 
84a0: 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51  the.  case in SQ
84b0: 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68  Lite. ^Unless th
84c0: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b  e column is an [
84d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
84e0: 4b 45 59 5d 20 53 51 4c 69 74 65 0a 20 20 61 6c  KEY] SQLite.  al
84f0: 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73  lows NULL values
8500: 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45   in a PRIMARY KE
8510: 59 20 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f  Y column.  We co
8520: 75 6c 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74  uld change SQLit
8530: 65 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74  e to.  conform t
8540: 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 28  o the standard (
8550: 61 6e 64 20 77 65 20 6d 69 67 68 74 20 64 6f 20  and we might do 
8560: 73 6f 20 69 6e 20 74 68 65 20 66 75 74 75 72 65  so in the future
8570: 29 2c 20 62 75 74 20 62 79 20 74 68 65 20 74 69  ), but by the ti
8580: 6d 65 0a 20 20 74 68 65 20 6f 76 65 72 73 69 67  me.  the oversig
8590: 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72 65  ht was discovere
85a0: 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e  d, SQLite was in
85b0: 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20 74   such wide use t
85c0: 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 20 20  hat we feared.  
85d0: 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20  breaking legacy 
85e0: 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65 64  code if we fixed
85f0: 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53   the problem.  S
8600: 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76  o for now we hav
8610: 65 20 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63 6f  e chosen to.  co
8620: 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20  ntinue allowing 
8630: 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59  NULLs in PRIMARY
8640: 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20 44   KEY columns.  D
8650: 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64  evelopers should
8660: 20 62 65 0a 20 20 61 77 61 72 65 2c 20 68 6f 77   be.  aware, how
8670: 65 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61  ever, that we ma
8680: 79 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20  y change SQLite 
8690: 74 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68  to conform to th
86a0: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69  e SQL standard i
86b0: 6e 0a 20 20 66 75 74 75 72 65 20 61 6e 64 20 73  n.  future and s
86c0: 68 6f 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77  hould design new
86d0: 20 70 72 6f 67 72 61 6d 73 20 61 63 63 6f 72 64   programs accord
86e0: 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 5e 41 20 3c 62  ingly...<p>^A <b
86f0: 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73  >UNIQUE</b> cons
8700: 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61  traint is simila
8710: 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b  r to a PRIMARY K
8720: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65  EY constraint, e
8730: 78 63 65 70 74 0a 20 20 74 68 61 74 20 61 20 73  xcept.  that a s
8740: 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20  ingle table may 
8750: 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20  have any number 
8760: 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  of UNIQUE constr
8770: 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68  aints. ^For each
8780: 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  .  UNIQUE constr
8790: 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c  aint on the tabl
87a0: 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74  e, each row must
87b0: 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71 75   feature a uniqu
87c0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20  e combination.  
87d0: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
87e0: 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
87f0: 69 65 64 20 62 79 20 74 68 65 20 55 4e 49 51 55  ied by the UNIQU
8800: 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e 41  E constraint. ^A
8810: 73 20 77 69 74 68 0a 20 20 50 52 49 4d 41 52 59  s with.  PRIMARY
8820: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
8830: 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  , for the purpos
8840: 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  es of UNIQUE con
8850: 73 74 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61  straints NULL va
8860: 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69  lues.  are consi
8870: 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66  dered distinct f
8880: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  rom all other va
8890: 6c 75 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20  lues (including 
88a0: 6f 74 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20 20  other NULLs)..  
88b0: 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20  ^If an [INSERT] 
88c0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  or [UPDATE] stat
88d0: 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
88e0: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62  o modify the tab
88f0: 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20 20  le content so.  
8900: 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65  that two or more
8910: 20 72 6f 77 73 20 66 65 61 74 75 72 65 20 69 64   rows feature id
8920: 65 6e 74 69 63 61 6c 20 76 61 6c 75 65 73 20 69  entical values i
8930: 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d  n a set of colum
8940: 6e 73 20 74 68 61 74 0a 20 20 61 72 65 20 73 75  ns that.  are su
8950: 62 6a 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55  bject to a UNIQU
8960: 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74  E constraint, it
8970: 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   is a constraint
8980: 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e   violation...<p>
8990: 5e 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  ^[INTEGER PRIMAR
89a0: 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20 61  Y KEY] columns a
89b0: 73 69 64 65 2c 20 62 6f 74 68 20 55 4e 49 51 55  side, both UNIQU
89c0: 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
89d0: 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  Y.  constraints 
89e0: 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  are implemented 
89f0: 62 79 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69  by creating an i
8a00: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
8a10: 62 61 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d  base (in the sam
8a20: 65 0a 20 20 77 61 79 20 61 73 20 61 20 5b 43 52  e.  way as a [CR
8a30: 45 41 54 45 20 49 4e 44 45 58 7c 22 43 52 45 41  EATE INDEX|"CREA
8a40: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22  TE UNIQUE INDEX"
8a50: 5d 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  ] statement woul
8a60: 64 29 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20 20  d). ^Such an .  
8a70: 69 6e 64 65 78 20 69 73 20 75 73 65 64 20 6c 69  index is used li
8a80: 6b 65 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64  ke any other ind
8a90: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
8aa0: 73 65 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65 72  se to [optimizer
8ab0: 7c 6f 70 74 69 6d 69 7a 65 0a 20 20 71 75 65 72  |optimize.  quer
8ac0: 69 65 73 5d 2e 20 20 41 73 20 61 20 72 65 73 75  ies].  As a resu
8ad0: 6c 74 2c 20 74 68 65 72 65 20 6f 66 74 65 6e 20  lt, there often 
8ae0: 6e 6f 20 61 64 76 61 6e 74 61 67 65 20 28 62 75  no advantage (bu
8af0: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 6f 76  t significant ov
8b00: 65 72 68 65 61 64 29 0a 20 20 69 6e 20 63 72 65  erhead).  in cre
8b10: 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 6f  ating an index o
8b20: 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d  n a set of colum
8b30: 6e 73 20 74 68 61 74 20 61 72 65 20 61 6c 72 65  ns that are alre
8b40: 61 64 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79  ady collectively
8b50: 0a 20 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20  .  subject to a 
8b60: 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52  UNIQUE or PRIMAR
8b70: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
8b80: 2e 0a 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45  ...<p>^(A <b>CHE
8b90: 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  CK</b> constrain
8ba0: 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  t may be attache
8bb0: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
8bc0: 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70  finition or.  sp
8bd0: 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62  ecified as a tab
8be0: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49  le constraint. I
8bf0: 6e 20 70 72 61 63 74 69 63 65 20 69 74 20 6d 61  n practice it ma
8c00: 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63  kes no differenc
8c10: 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69  e.)^ ^(Each.  ti
8c20: 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20  me a new row is 
8c30: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
8c40: 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78  e table or an ex
8c50: 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70  isting row is up
8c60: 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70  dated,.  the exp
8c70: 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74  ression associat
8c80: 65 64 20 77 69 74 68 20 65 61 63 68 20 43 48 45  ed with each CHE
8c90: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  CK constraint is
8ca0: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20   evaluated and. 
8cb0: 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52   cast to a NUMER
8cc0: 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  IC value in the 
8cd0: 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43  same way as a [C
8ce0: 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  AST expression].
8cf0: 20 49 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c   If the .  resul
8d00: 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67  t is zero (integ
8d10: 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
8d20: 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74  al value 0.0), t
8d30: 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hen a constraint
8d40: 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73  .  violation has
8d50: 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66   occurred.)^ ^If
8d60: 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65   the CHECK expre
8d70: 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
8d80: 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e  to NULL, or.  an
8d90: 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f  y other non-zero
8da0: 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f   value, it is no
8db0: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
8dc0: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 43 48  iolation...<p>CH
8dd0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
8de0: 68 61 76 65 20 62 65 65 6e 20 73 75 70 70 6f 72  have been suppor
8df0: 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72 73 69  ted since [versi
8e00: 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69 6f 72  on 3.3.0]. Prior
8e10: 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20 33 2e   to.  version 3.
8e20: 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74  3.0, CHECK const
8e30: 72 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73  raints were pars
8e40: 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72  ed but not enfor
8e50: 63 65 64 2e 0a 0a 3c 70 3e 5e 41 20 3c 62 3e 4e  ced...<p>^A <b>N
8e60: 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73  OT NULL</b> cons
8e70: 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  traint may only 
8e80: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
8e90: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
8ea0: 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66  on,.  not specif
8eb0: 69 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63  ied as a table c
8ec0: 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20  onstraint.  Not 
8ed0: 73 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28  surprisingly, ^(
8ee0: 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e  a NOT NULL.  con
8ef0: 73 74 72 61 69 6e 74 20 64 69 63 74 61 74 65 73  straint dictates
8f00: 20 74 68 61 74 20 74 68 65 20 61 73 73 6f 63 69   that the associ
8f10: 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20  ated column may 
8f20: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55  not contain a NU
8f30: 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65  LL value..  Atte
8f40: 6d 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68  mpting to set th
8f50: 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74  e column value t
8f60: 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65  o NULL when inse
8f70: 72 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20  rting a new row 
8f80: 6f 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e  or.  updating an
8f90: 20 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61   existing one ca
8fa0: 75 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  uses a constrain
8fb0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a  t violation.)^..
8fc0: 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61  <p>Exactly how a
8fd0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
8fe0: 61 74 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77  ation is dealt w
8ff0: 69 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ith is determine
9000: 64 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66  d by the.  [conf
9010: 6c 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73  lict clause|cons
9020: 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
9030: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
9040: 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50  ithm]. Each .  P
9050: 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51  RIMARY KEY, UNIQ
9060: 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64  UE, NOT NULL and
9070: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
9080: 74 20 68 61 73 20 61 20 64 65 66 61 75 6c 74 20  t has a default 
9090: 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c  conflict.  resol
90a0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
90b0: 20 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55   ^PRIMARY KEY, U
90c0: 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
90d0: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d  LL constraints m
90e0: 61 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74  ay be.  explicit
90f0: 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20 64 65  ly assigned a de
9100: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
9110: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
9120: 74 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67  thm by including
9130: 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63  .  a [conflict-c
9140: 6c 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20  lause] in their 
9150: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72  definitions. ^Or
9160: 2c 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  , if a constrain
9170: 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64  t definition.  d
9180: 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  oes not include 
9190: 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  a [conflict-clau
91a0: 73 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43  se] or it is a C
91b0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c  HECK constraint,
91c0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63   the default.  c
91d0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
91e0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
91f0: 41 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e  ABORT. ^Differen
9200: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
9210: 74 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20  thin the.  same 
9220: 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64  table may have d
9230: 69 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74  ifferent default
9240: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
9250: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e  tion algorithms.
9260: 20 53 65 65 0a 20 20 74 68 65 20 73 65 63 74 69   See.  the secti
9270: 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f  on titled [ON CO
9280: 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
9290: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
92a0: 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  on...<tcl>hd_fra
92b0: 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54  gment rowid {INT
92c0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
92d0: 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74  } ROWID rowid</t
92e0: 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61  cl>.<h3>ROWIDs a
92f0: 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  nd the INTEGER P
9300: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a  RIMARY KEY</h3>.
9310: 0a 3c 70 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f  .<p>^Every row o
9320: 66 20 65 76 65 72 79 20 53 51 4c 69 74 65 20 74  f every SQLite t
9330: 61 62 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69  able has a 64-bi
9340: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
9350: 20 6b 65 79 20 0a 74 68 61 74 20 75 6e 69 71 75   key .that uniqu
9360: 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
9370: 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74  he row within it
9380: 73 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  s table. This in
9390: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
93a0: 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77  .called the "row
93b0: 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20  id". ^The rowid 
93c0: 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63  value can be acc
93d0: 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20  essed using one 
93e0: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63  of the special.c
93f0: 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20  ase-independent 
9400: 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22  names "rowid", "
9410: 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64  oid", or "_rowid
9420: 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  _" in place of a
9430: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49   column name..^I
9440: 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  f a table contai
9450: 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65  ns a user define
9460: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22  d column named "
9470: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
9480: 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e   "_rowid_",.then
9490: 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79   that name alway
94a0: 73 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70  s refers the exp
94b0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
94c0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e   column and cann
94d0: 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65  ot be used.to re
94e0: 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67  trieve the integ
94f0: 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a  er rowid value..
9500: 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72  .<p>The data for
9510: 20 65 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53   each table in S
9520: 51 4c 69 74 65 20 69 73 20 73 74 6f 72 65 64 20  QLite is stored 
9530: 61 73 20 61 20 42 2d 54 72 65 65 20 73 74 72 75  as a B-Tree stru
9540: 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
9550: 0a 61 6e 20 65 6e 74 72 79 20 66 6f 72 20 65 61  .an entry for ea
9560: 63 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73  ch table row, us
9570: 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76 61  ing the rowid va
9580: 6c 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20  lue as the key. 
9590: 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a  This means that.
95a0: 72 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f  retrieving or so
95b0: 72 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79  rting records by
95c0: 20 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20   rowid is fast. 
95d0: 53 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20  Searching for a 
95e0: 72 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70  record with a.sp
95f0: 65 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72  ecific rowid, or
9600: 20 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73   for all records
9610: 20 77 69 74 68 20 72 6f 77 69 64 73 20 77 69 74   with rowids wit
9620: 68 69 6e 20 61 20 73 70 65 63 69 66 69 65 64 20  hin a specified 
9630: 72 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20  range is.around 
9640: 74 77 69 63 65 20 61 73 20 66 61 73 74 20 61 73  twice as fast as
9650: 20 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63   a similar searc
9660: 68 20 6d 61 64 65 20 62 79 20 73 70 65 63 69 66  h made by specif
9670: 79 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50  ying any other P
9680: 52 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e  RIMARY.KEY or in
9690: 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70  dexed value...<p
96a0: 3e 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65  > ^With one exce
96b0: 70 74 69 6f 6e 2c 20 69 66 20 61 20 74 61 62 6c  ption, if a tabl
96c0: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
96d0: 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74  key that consist
96e0: 73 20 6f 66 20 61 20 73 69 6e 67 6c 65 0a 63 6f  s of a single.co
96f0: 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 64 65  lumn, and the de
9700: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
9710: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49  hat column is "I
9720: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
9730: 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20  ixture of.upper 
9740: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20  and lower case, 
9750: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
9760: 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
9770: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20   for the rowid. 
9780: 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73  Such a.column is
9790: 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65   usually referre
97a0: 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65  d to as an "inte
97b0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22  ger primary key"
97c0: 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20  . A PRIMARY KEY 
97d0: 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f  column.only beco
97e0: 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  mes an integer p
97f0: 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68  rimary key if th
9800: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
9810: 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a  name is exactly.
9820: 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68  "INTEGER".  ^Oth
9830: 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20  er integer type 
9840: 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22  names like "INT"
9850: 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20   or "BIGINT" or 
9860: 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a  "SHORT INTEGER".
9870: 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54  or "UNSIGNED INT
9880: 45 47 45 52 22 20 63 61 75 73 65 73 20 74 68 65  EGER" causes the
9890: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
98a0: 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73  umn to behave as
98b0: 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62   an ordinary.tab
98c0: 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69  le column with i
98d0: 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79  nteger [affinity
98e0: 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69  ] and a unique i
98f0: 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20  ndex, not as an 
9900: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
9910: 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  wid...<p> The ex
9920: 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  ception mentione
9930: 64 20 61 62 6f 76 65 20 69 73 20 74 68 61 74 20  d above is that 
9940: 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72 61 74  ^if the declarat
9950: 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ion of a column 
9960: 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79  with.declared ty
9970: 70 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63  pe "INTEGER" inc
9980: 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52  ludes an "PRIMAR
9990: 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75  Y KEY DESC" clau
99a0: 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a  se, it does not.
99b0: 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20  become an alias 
99c0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e  for the rowid an
99d0: 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66  d is not classif
99e0: 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ied as an intege
99f0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54  r primary key..T
9a00: 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74  his quirk is not
9a10: 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69   by design. It i
9a20: 73 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  s due to a bug i
9a30: 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73  n early versions
9a40: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20   of SQLite..But 
9a50: 66 69 78 69 6e 67 20 74 68 65 20 62 75 67 20 63  fixing the bug c
9a60: 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 76  ould result in v
9a70: 65 72 79 20 73 65 72 69 6f 75 73 20 62 61 63 6b  ery serious back
9a80: 77 61 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62  wards incompatib
9a90: 69 6c 69 74 69 65 73 2e 0a 54 68 65 20 53 51 4c  ilities..The SQL
9aa0: 69 74 65 20 64 65 76 65 6c 6f 70 65 72 73 20 66  ite developers f
9ab0: 65 65 6c 20 74 68 61 74 20 67 6f 6f 66 79 20 62  eel that goofy b
9ac0: 65 68 61 76 69 6f 72 20 69 6e 20 61 6e 20 63 6f  ehavior in an co
9ad0: 72 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72  rner case is far
9ae0: 20 62 65 74 74 65 72 0a 74 68 61 6e 20 61 20 63   better.than a c
9af0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65  ompatibility bre
9b00: 61 6b 2c 20 73 6f 20 74 68 65 20 6f 72 69 67 69  ak, so the origi
9b10: 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 69 73 20  nal behavior is 
9b20: 72 65 74 61 69 6e 65 64 2e 20 54 68 69 73 20 6d  retained. This m
9b30: 65 61 6e 73 0a 74 68 61 74 20 5e 28 74 68 65 20  eans.that ^(the 
9b40: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
9b50: 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  table declaratio
9b60: 6e 73 20 61 6c 6c 20 63 61 75 73 65 20 74 68 65  ns all cause the
9b70: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62   column "x" to b
9b80: 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74  e an.alias for t
9b90: 68 65 20 72 6f 77 69 64 20 28 61 6e 20 69 6e 74  he rowid (an int
9ba0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
9bb0: 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  ):..<ul>.<li><tt
9bc0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
9bd0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
9be0: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
9bf0: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
9c00: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
9c10: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
9c20: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
9c30: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
9c40: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
9c50: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
9c60: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
9c70: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
9c80: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68  >)^..<p>But ^(th
9c90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c  e following decl
9ca0: 61 72 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  aration does not
9cb0: 20 72 65 73 75 6c 74 20 69 6e 20 22 78 22 20 62   result in "x" b
9cc0: 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
9cd0: 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c  r.the rowid:.<ul
9ce0: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
9cf0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
9d00: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44  ER PRIMARY KEY D
9d10: 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ESC, y, z);</tt>
9d20: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f  .</ul>)^..<p>^Ro
9d30: 77 69 64 20 76 61 6c 75 65 73 20 6d 61 79 20 62  wid values may b
9d40: 65 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67  e modified using
9d50: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
9d60: 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 61 6d 65  ment in the same
9d70: 0a 77 61 79 20 61 73 20 61 6e 79 20 6f 74 68 65  .way as any othe
9d80: 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63  r column value c
9d90: 61 6e 2c 20 65 69 74 68 65 72 20 75 73 69 6e 67  an, either using
9da0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c   one of the buil
9db0: 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a 28 22 72  t-in aliases.("r
9dc0: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
9dd0: 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79  "_rowid_") or by
9de0: 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   using an alias 
9df0: 63 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e  created by an in
9e00: 74 65 67 65 72 0a 70 72 69 6d 61 72 79 20 6b 65  teger.primary ke
9e10: 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61  y. ^Similarly, a
9e20: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
9e30: 6e 74 20 6d 61 79 20 70 72 6f 76 69 64 65 20 61  nt may provide a
9e40: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
9e50: 20 74 68 65 0a 72 6f 77 69 64 20 66 6f 72 20 65   the.rowid for e
9e60: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
9e70: 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  . ^(Unlike norma
9e80: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
9e90: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  , an integer pri
9ea0: 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69  mary.key or rowi
9eb0: 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f  d column must co
9ec0: 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20 76 61  ntain integer va
9ed0: 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 20 70 72  lues. Integer pr
9ee0: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
9ef0: 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e  id.columns are n
9f00: 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20  ot able to hold 
9f10: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
9f20: 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20  alues, strings, 
9f30: 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
9f40: 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  )^..<p>^If an UP
9f50: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
9f60: 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
9f70: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
9f80: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
9f90: 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20  olumn.to a NULL 
9fa0: 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f  or blob value, o
9fb0: 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20 6f 72  r to a string or
9fc0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
9fd0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
9fe0: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
9ff0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
a000: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
a010: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
a020: 73 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d  s and the statem
a030: 65 6e 74 0a 69 73 20 61 62 6f 72 74 65 64 2e 20  ent.is aborted. 
a040: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
a050: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
a060: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 62 6c 6f   to insert a blo
a070: 62 20 76 61 6c 75 65 2c 20 6f 72 20 61 20 73 74  b value, or a st
a080: 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c  ring.or real val
a090: 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
a0a0: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
a0b0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
a0c0: 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74  eger into an.int
a0d0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
a0e0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a0f0: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
a100: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
a110: 63 75 72 73 20 61 6e 64 20 74 68 65 0a 73 74 61  curs and the.sta
a120: 74 65 6d 65 6e 74 20 69 73 20 61 62 6f 72 74 65  tement is aborte
a130: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e  d...<p>^If an IN
a140: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
a150: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
a160: 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  t a NULL value i
a170: 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f 72 0a 69  nto a rowid or.i
a180: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
a190: 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73  ey column, the s
a1a0: 79 73 74 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e  ystem chooses an
a1b0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
a1c0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
a1d0: 69 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  id automatically
a1e0: 2e 20 41 20 64 65 74 61 69 6c 65 64 20 64 65 73  . A detailed des
a1f0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20  cription of how 
a200: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 69 73 20  this is done is 
a210: 70 72 6f 76 69 64 65 64 0a 3c 61 20 68 72 65 66  provided.<a href
a220: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
a230: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
a240: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
a250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a290: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
a2a0: 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45  n {CREATE TRIGGE
a2b0: 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72  R} createtrigger
a2c0: 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45   {{CREATE TRIGGE
a2d0: 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  R}}..BubbleDiagr
a2e0: 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65  am create-trigge
a2f0: 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  r-stmt 1.</tcl>.
a300: 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20  .<p>^The CREATE 
a310: 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
a320: 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  t is used to add
a330: 20 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65   triggers to the
a340: 20 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   .database schem
a350: 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72 65  a. ^Triggers are
a360: 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74   database operat
a370: 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61  ions .that are a
a380: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72  utomatically per
a390: 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70  formed when a sp
a3a0: 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65  ecified database
a3b0: 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20   event.occurs.  
a3c0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67  </p>..<p>^A trig
a3d0: 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63 69  ger may be speci
a3e0: 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68 65  fied to fire whe
a3f0: 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45 5d  never a [DELETE]
a400: 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b  , [INSERT],.or [
a410: 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61 72  UPDATE] of a.par
a420: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
a430: 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f   table occurs, o
a440: 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b 55  r whenever an [U
a450: 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e  PDATE] occurs on
a460: 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  .on one or more 
a470: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
a480: 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70  s of a table.</p
a490: 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20 74  >..<p>^At this t
a4a0: 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f  ime SQLite suppo
a4b0: 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43  rts only FOR EAC
a4c0: 48 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20  H ROW triggers, 
a4d0: 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41  not FOR EACH.STA
a4e0: 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e  TEMENT triggers.
a4f0: 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69 74   ^Hence explicit
a500: 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20 46 4f  ly specifying FO
a510: 52 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f 70  R EACH ROW is op
a520: 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43  tional..^FOR EAC
a530: 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74 68  H ROW implies th
a540: 61 74 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  at the SQL state
a550: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
a560: 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 6d  in the trigger.m
a570: 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 28  ay be executed (
a580: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
a590: 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66 6f   WHEN clause) fo
a5a0: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
a5b0: 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72 74  row being.insert
a5c0: 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20 64  ed, updated or d
a5d0: 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 73 74  eleted by the st
a5e0: 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20  atement causing 
a5f0: 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66  the trigger to f
a600: 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42  ire.</p>..<p>^(B
a610: 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61  oth the WHEN cla
a620: 75 73 65 20 61 6e 64 20 74 68 65 20 74 72 69 67  use and the trig
a630: 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79 20  ger actions may 
a640: 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73 20  access elements 
a650: 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69 6e  of .the row bein
a660: 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c 65  g inserted, dele
a670: 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 20 75  ted or updated u
a680: 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20  sing references 
a690: 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45  of the form ."NE
a6a0: 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  W.<i>column-name
a6b0: 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c  </i>" and "OLD.<
a6c0: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
a6d0: 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c  >", where.<i>col
a6e0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20  umn-name</i> is 
a6f0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f  the name of a co
a700: 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74 61  lumn from the ta
a710: 62 6c 65 20 74 68 61 74 20 74 68 65 20 74 72 69  ble that the tri
a720: 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61 74  gger.is associat
a730: 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44  ed with.)^ ^(OLD
a740: 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65 6e   and NEW referen
a750: 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ces may only be 
a760: 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72 73  used in triggers
a770: 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20 77   on.events for w
a780: 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65  hich they are re
a790: 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f  levant, as follo
a7a0: 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  ws:</p>..<table 
a7b0: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
a7c0: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
a7d0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
a7e0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
a7f0: 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54  th=120><i>INSERT
a800: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
a810: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72  lign="top">NEW r
a820: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
a830: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
a840: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
a850: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
a860: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
a870: 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  UPDATE</i></td>.
a880: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
a890: 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66  >NEW and OLD ref
a8a0: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
a8b0: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  d</td>.</tr>.<tr
a8c0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
a8d0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
a8e0: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45   width=120><i>DE
a8f0: 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  LETE</i></td>.<t
a900: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f  d valign="top">O
a910: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
a920: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
a930: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e  r>.</table>.</p>
a940: 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45  )^..<p>^If a WHE
a950: 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  N clause is supp
a960: 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74  lied, the SQL st
a970: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
a980: 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65 63  ed.are only exec
a990: 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20 66 6f  uted for rows fo
a9a0: 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45 4e  r which the WHEN
a9b0: 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75 65 2e  .clause is true.
a9c0: 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61   ^If no WHEN cla
a9d0: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
a9e0: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
a9f0: 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74 65 64  nts.are executed
aa00: 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f   for all rows.</
aa10: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f  p>..<p>^The BEFO
aa20: 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79 77  RE or AFTER keyw
aa30: 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  ord determines w
aa40: 68 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20  hen the trigger 
aa50: 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20  actions.will be 
aa60: 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76  executed relativ
aa70: 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69  e to the inserti
aa80: 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  on, modification
aa90: 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74   or removal of t
aaa0: 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f  he.associated ro
aab0: 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b  w.</p>..<p>^An [
aac0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61  ON CONFLICT] cla
aad0: 75 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69  use may be speci
aae0: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
aaf0: 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b  an [UPDATE] or [
ab00: 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77  INSERT].action w
ab10: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
ab20: 66 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 5e  f the trigger..^
ab30: 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f  However if an [O
ab40: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
ab50: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
ab60: 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20  as part of .the 
ab70: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
ab80: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
ab90: 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66   fire, then conf
aba0: 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f  lict handling.po
abb0: 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74 65  licy of the oute
abc0: 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  r statement is u
abd0: 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e  sed instead.</p>
abe0: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61  ..<p>^Triggers a
abf0: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
ac00: 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20 7c   [DROP TRIGGER |
ac10: 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74   dropped].when t
ac20: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
ac30: 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74  ey are .associat
ac40: 65 64 20 77 69 74 68 20 28 74 68 65 20 3c 69 3e  ed with (the <i>
ac50: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74  table-name</i> t
ac60: 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50 20  able) is .[DROP 
ac70: 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d  TABLE | dropped]
ac80: 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20 74  .  ^However if t
ac90: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
aca0: 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74 68  ns reference.oth
acb0: 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20 74  er tables, the t
acc0: 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64 72  rigger is not dr
acd0: 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69 65  opped or modifie
ace0: 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65 72  d if those other
acf0: 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52 4f  .tables are [DRO
ad00: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
ad10: 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41 42  d] or [ALTER TAB
ad20: 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c  LE | modified].<
ad30: 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  /p>..<p>^Trigger
ad40: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73  s are removed us
ad50: 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52  ing the [DROP TR
ad60: 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
ad70: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61  .</p>..<h3>Synta
ad80: 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20 4f  x Restrictions O
ad90: 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54 45  n UPDATE, DELETE
ada0: 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74 61  , and INSERT Sta
adb0: 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a 20  tements Within. 
adc0: 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e     Triggers</h3>
add0: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41 54  ..<p>^The [UPDAT
ade0: 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e  E], [DELETE], an
adf0: 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74 65  d [INSERT].state
ae00: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
ae10: 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75 70  ggers do not sup
ae20: 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73 79  port.the full sy
ae30: 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54 45  ntax for [UPDATE
ae40: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64  ], [DELETE], and
ae50: 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d   [INSERT] statem
ae60: 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ents.  The follo
ae70: 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f 6e  wing.restriction
ae80: 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75  s apply:</p>..<u
ae90: 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54  l>.<li><p>.  ^(T
aea0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
aeb0: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
aec0: 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41 54  ied in an [UPDAT
aed0: 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f 72  E], [DELETE], or
aee0: 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61 74   [INSERT].  stat
aef0: 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61 6e  ement must be an
af00: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61 62   unqualified tab
af10: 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74 68  le name.  In oth
af20: 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d 75  er words, one mu
af30: 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22 3c  st.  use just "<
af40: 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22  i>tablename</i>"
af50: 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61 73   not "<i>databas
af60: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e  e</i><b>.</b><i>
af70: 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20  tablename</i>". 
af80: 20 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e 67   when specifying
af90: 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 20 5e   the table.)^  ^
afa0: 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  The table to be 
afb0: 6d 6f 64 69 66 69 65 64 20 6d 75 73 74 20 65 78  modified must ex
afc0: 69 73 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d  ist in the.  sam
afd0: 65 20 64 61 74 61 62 61 73 65 20 61 73 20 74 68  e database as th
afe0: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
aff0: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
b000: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
b010: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
b020: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49  li><p>.  ^The "I
b030: 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61  NSERT INTO <i>ta
b040: 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20  ble</i> DEFAULT 
b050: 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20  VALUES" form of 
b060: 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61  the [INSERT] sta
b070: 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20  tement.  is not 
b080: 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70  supported..  </p
b090: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
b0a0: 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42    ^The INDEXED B
b0b0: 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
b0c0: 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
b0d0: 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20  t supported for 
b0e0: 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b  [UPDATE] and.  [
b0f0: 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
b100: 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ts..  </p></li>.
b110: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65  .<li><p>.  ^(The
b120: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
b130: 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b  MIT clauses on [
b140: 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c  UPDATE] and [DEL
b150: 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ETE] statements 
b160: 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72  are not.  suppor
b170: 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59 20 61  ted.  ORDER BY a
b180: 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74  nd LIMIT are not
b190: 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72   normally suppor
b1a0: 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d  ted for [UPDATE]
b1b0: 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69   or.  [DELETE] i
b1c0: 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 62 75  n any context bu
b1d0: 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c 65 64  t can be enabled
b1e0: 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73   for top-level s
b1f0: 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e  tatements.  usin
b200: 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  g the [SQLITE_EN
b210: 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
b220: 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c  TE_LIMIT] compil
b230: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  e-time option.  
b240: 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74 20  However,.  that 
b250: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
b260: 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73  ion only applies
b270: 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55   to top-level [U
b280: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
b290: 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 73  TE].  statements
b2a0: 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20 61  , not [UPDATE] a
b2b0: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
b2c0: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
b2d0: 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e  iggers.)^.  </p>
b2e0: 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63  </li>.</ul>..<tc
b2f0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
b300: 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72  stead_of_trigger
b310: 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49   {INSTEAD OF} {I
b320: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
b330: 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53  r}</tcl>.<h3>INS
b340: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 3c  TEAD OF trigger<
b350: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  /h3>..<p>^Trigge
b360: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
b370: 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73  d on [views], as
b380: 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72   well as ordinar
b390: 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65  y tables, by.spe
b3a0: 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20  cifying INSTEAD 
b3b0: 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  OF in the CREATE
b3c0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
b3d0: 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20  nt. .^If one or 
b3e0: 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20  more ON INSERT, 
b3f0: 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20  ON DELETE.or ON 
b400: 55 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20  UPDATE triggers 
b410: 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61  are defined on a
b420: 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69   view, then it i
b430: 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74  s not an.error t
b440: 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53  o execute an INS
b450: 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55  ERT, DELETE or U
b460: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
b470: 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65  on the view, .re
b480: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e  spectively.  ^In
b490: 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67  stead,.executing
b4a0: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
b4b0: 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20  TE or UPDATE on 
b4c0: 74 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20  the view causes 
b4d0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74  the associated.t
b4e0: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
b4f0: 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65   ^The real table
b500: 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65  s underlying the
b510: 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f   view are not mo
b520: 64 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70  dified.(except p
b530: 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74  ossibly explicit
b540: 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72  ly, by a trigger
b550: 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a   program).</p>..
b560: 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
b570: 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
b580: 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74  es()] and [sqlit
b590: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
b5a0: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64  ()] interfaces.d
b5b0: 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54  o not count INST
b5c0: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
b5d0: 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a  irings, but the.
b5e0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
b5f0: 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e  ragma] does coun
b600: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
b610: 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e  gger firing.</p>
b620: 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
b630: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69  h3>..<p>^(Assumi
b640: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
b650: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
b660: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
b670: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
b680: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
b690: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
b6a0: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
b6b0: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
b6c0: 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73  wing trigger.ens
b6d0: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
b6e0: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
b6f0: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
b700: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
b710: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
b720: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a  r address:</p>..
b730: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43  <tcl>Example {.C
b740: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70  REATE TRIGGER up
b750: 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64  date_customer_ad
b760: 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20  dress UPDATE OF 
b770: 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f  address ON custo
b780: 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20  mers .  BEGIN.  
b790: 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20    UPDATE orders 
b7a0: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65  SET address = ne
b7b0: 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20  w.address WHERE 
b7c0: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
b7d0: 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b  old.name;.  END;
b7e0: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74  .}</tcl>..<p>Wit
b7f0: 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69  h this trigger i
b800: 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74  nstalled, execut
b810: 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ing the statemen
b820: 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  t:</p>..<tcl>Exa
b830: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75  mple {.UPDATE cu
b840: 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72  stomers SET addr
b850: 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74  ess = '1 Main St
b860: 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  .' WHERE name = 
b870: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
b880: 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73  /tcl>..<p>causes
b890: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
b8a0: 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  o be automatical
b8b0: 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e  ly executed:</p>
b8c0: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
b8d0: 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53  .UPDATE orders S
b8e0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
b8f0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
b900: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
b910: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
b920: 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  /tcl>)^..<tcl>hd
b930: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f  _fragment undef_
b940: 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65  before {undefine
b950: 64 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  d BEFORE trigger
b960: 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e   behavior}</tcl>
b970: 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e  .<h3>Cautions On
b980: 20 54 68 65 20 55 73 65 20 4f 66 20 42 45 46 4f   The Use Of BEFO
b990: 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e  RE triggers</h3>
b9a0: 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f 52 45  ..<p>If a BEFORE
b9b0: 20 55 50 44 41 54 45 20 6f 72 20 42 45 46 4f 52   UPDATE or BEFOR
b9c0: 45 20 44 45 4c 45 54 45 20 74 72 69 67 67 65 72  E DELETE trigger
b9d0: 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c   modifies or del
b9e0: 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61 74 20  etes a row.that 
b9f0: 77 61 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e  was to have been
ba00: 20 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65   updated or dele
ba10: 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ted, then the re
ba20: 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 73  sult of the subs
ba30: 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20 6f 72  equent.update or
ba40: 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f   delete operatio
ba50: 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  n is undefined. 
ba60: 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66   Furthermore, if
ba70: 20 61 20 42 45 46 4f 52 45 20 74 72 69 67 67 65   a BEFORE trigge
ba80: 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65  r.modifies or de
ba90: 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74 68 65  letes a row, the
baa0: 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69 6e 65  n it is undefine
bab0: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
bac0: 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73 0a   AFTER triggers.
bad0: 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20  that would have 
bae0: 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20 6f 6e  otherwise run on
baf0: 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c   those rows will
bb00: 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f   in fact run..</
bb10: 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65  p>..<p>The value
bb20: 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20 69 73   of NEW.rowid is
bb30: 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 61 20   undefined in a 
bb40: 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20 74 72  BEFORE INSERT tr
bb50: 69 67 67 65 72 20 69 6e 20 77 68 69 63 68 0a 74  igger in which.t
bb60: 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20  he rowid is not 
bb70: 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74  explicitly set t
bb80: 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70  o an integer.</p
bb90: 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f 66  >..<p>Because of
bba0: 20 74 68 65 20 62 65 68 61 76 69 6f 72 73 20 64   the behaviors d
bbb0: 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 2c 20  escribed above, 
bbc0: 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  programmers are 
bbd0: 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a 70 72  encouraged to.pr
bbe0: 65 66 65 72 20 41 46 54 45 52 20 74 72 69 67 67  efer AFTER trigg
bbf0: 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52 45 20  ers over BEFORE 
bc00: 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c  triggers.</p>..<
bc10: 68 33 3e 54 68 65 20 52 41 49 53 45 28 29 20 66  h3>The RAISE() f
bc20: 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70  unction</h3>..<p
bc30: 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51 4c  >^(A special SQL
bc40: 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28   function RAISE(
bc50: 29 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69  ) may be used wi
bc60: 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70  thin a trigger-p
bc70: 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74  rogram,)^.with t
bc80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
bc90: 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42  tax</p> ..<tcl>B
bca0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69  ubbleDiagram rai
bcb0: 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c  se-function</tcl
bcc0: 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e 65 20  >..<p>^When one 
bcd0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 74 68 72  of the first thr
bce0: 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61 6c 6c  ee forms is call
bcf0: 65 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65  ed during trigge
bd00: 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74  r-program.execut
bd10: 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69  ion, the specifi
bd20: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
bd30: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70   processing is p
bd40: 65 72 66 6f 72 6d 65 64 0a 28 65 69 74 68 65 72  erformed.(either
bd50: 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20   ABORT, FAIL or 
bd60: 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20 74 68  ROLLBACK) and th
bd70: 65 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20  e current query 
bd80: 74 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e 20 65  terminates..An e
bd90: 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51  rror code of [SQ
bda0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d  LITE_CONSTRAINT]
bdb0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
bdc0: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c  the application,
bdd0: 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20  .along with the 
bde0: 73 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20  specified error 
bdf0: 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70  message.</p>..<p
be00: 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e  >^When RAISE(IGN
be10: 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20  ORE) is called, 
be20: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
be30: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 69   the current tri
be40: 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68  gger program,.th
be50: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  e statement that
be60: 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67   caused the trig
be70: 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65  ger program to e
be80: 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73  xecute and any s
be90: 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65  ubsequent.trigge
bea0: 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20  r programs that 
beb0: 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78  would of been ex
bec0: 65 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64  ecuted are aband
bed0: 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61  oned. ^No databa
bee0: 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72  se.changes are r
bef0: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
bf00: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
bf10: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74  hat caused the t
bf20: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74  rigger program.t
bf30: 6f 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73  o execute is its
bf40: 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72  elf part of a tr
bf50: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74  igger program, t
bf60: 68 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72  hen that trigger
bf70: 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73   program.resumes
bf80: 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68   execution at th
bf90: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
bfa0: 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f  he next step..</
bfb0: 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
bfc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bfd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bfe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c000: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
c010: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d  on {CREATE VIEW}
c020: 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b   {createview} {{
c030: 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65  CREATE VIEW} vie
c040: 77 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62 62 6c  w *views}..Bubbl
c050: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
c060: 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  view-stmt 1.</tc
c070: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
c080: 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20  TE VIEW command 
c090: 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74  assigns a name t
c0a0: 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64  o a pre-packaged
c0b0: 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65   .[SELECT] state
c0c0: 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65  ment. .^Once the
c0d0: 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64   view is created
c0e0: 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64  , it can be used
c0f0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
c100: 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b  use.of another [
c110: 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65  SELECT] in place
c120: 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
c130: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  ..</p>..<p>^If t
c140: 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45  he "TEMP" or "TE
c150: 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64  MPORARY" keyword
c160: 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
c170: 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20  en "CREATE".and 
c180: 22 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20  "VIEW" then the 
c190: 76 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65  view that is cre
c1a0: 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73  ated is only vis
c1b0: 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63  ible to the.proc
c1c0: 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20  ess that opened 
c1d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
c1e0: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
c1f0: 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74  y deleted when.t
c200: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
c210: 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  losed.</p>..<p> 
c220: 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61  ^If a &lt;databa
c230: 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73  se-name&gt; is s
c240: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
c250: 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74  he view is creat
c260: 65 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64  ed in .the named
c270: 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69   database. ^It i
c280: 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70  s an error to sp
c290: 65 63 69 66 79 20 62 6f 74 68 20 61 20 26 6c 74  ecify both a &lt
c2a0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
c2b0: 74 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20  t;.and the TEMP 
c2c0: 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45  keyword on a VIE
c2d0: 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c  W, unless the &l
c2e0: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
c2f0: 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 0a 5e  gt; is "temp"..^
c300: 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e  If no database n
c310: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
c320: 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  , and the TEMP k
c330: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
c340: 65 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57 20  esent,.the VIEW 
c350: 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  is created in th
c360: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
c370: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61  </p>..<p>^You ca
c380: 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  nnot [DELETE], [
c390: 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44  INSERT], or [UPD
c3a0: 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e 56  ATE] a view.  ^V
c3b0: 69 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  iews are read-on
c3c0: 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20  ly .in SQLite.  
c3d0: 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e  ^However, in man
c3e0: 79 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20  y cases you can 
c3f0: 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20  use an.[INSTEAD 
c400: 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74  OF trigger] on t
c410: 68 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d  he view to accom
c420: 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20  plish .the same 
c430: 74 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20 61  thing.  ^Views a
c440: 72 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68  re removed .with
c450: 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d   the [DROP VIEW]
c460: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   command.</p>..<
c470: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
c480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4c0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
c4d0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
c4e0: 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20  E} {createvtab} 
c4f0: 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  {{CREATE VIRTUAL
c500: 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65   TABLE}}..Bubble
c510: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
c520: 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d  irtual-table-stm
c530: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41  t 1.</tcl>..<p>A
c540: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
c550: 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65   is an interface
c560: 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20   to an external 
c570: 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75  storage or compu
c580: 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68  tation.engine th
c590: 61 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  at appears to be
c5a0: 20 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65   a table but doe
c5b0: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73  s not actually s
c5c0: 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tore information
c5d0: 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .in the database
c5e0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   file.</p>..<p>I
c5f0: 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63  n general, you c
c600: 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77  an do anything w
c610: 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74  ith a [virtual t
c620: 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62  able] that can b
c630: 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f  e done.with an o
c640: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65  rdinary table, e
c650: 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20  xcept that ^you 
c660: 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e  cannot create in
c670: 64 69 63 65 73 20 6f 72 20 74 72 69 67 67 65 72  dices or trigger
c680: 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74  s on a.virtual t
c690: 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72  able.  ^Some vir
c6a0: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
c6b0: 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74  mentations might
c6c0: 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e   impose addition
c6d0: 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e  al.restrictions.
c6e0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d    For example, m
c6f0: 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c  any virtual tabl
c700: 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79  es are read-only
c710: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c  .</p>..<p>The &l
c720: 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74  t;module-name&gt
c730: 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ; is the name of
c740: 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
c750: 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76  implements.the v
c760: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e  irtual table.  ^
c770: 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e  The &lt;module-n
c780: 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20  ame&gt; must be 
c790: 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a  registered with.
c7a0: 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
c7b0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75  ase connection u
c7c0: 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72  sing.[sqlite3_cr
c7d0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f  eate_module()] o
c7e0: 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  r [sqlite3_creat
c7f0: 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70  e_module_v2()].p
c800: 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20  rior to issuing 
c810: 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
c820: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
c830: 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20  nt..^The module 
c840: 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  takes zero or mo
c850: 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74  re comma-separat
c860: 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54  ed arguments..^T
c870: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e  he arguments can
c880: 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61   be just about a
c890: 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20  ny text as long 
c8a0: 61 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63  as it has balanc
c8b0: 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20  ed.parentheses. 
c8c0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79   The argument sy
c8d0: 6e 74 61 78 20 69 73 20 73 75 66 66 69 63 69 65  ntax is sufficie
c8e0: 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61  ntly general tha
c8f0: 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20  t the.arguments 
c900: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61  can be made to a
c910: 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e  ppear as [column
c920: 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e   definitions] in
c930: 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b   a traditional.[
c940: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
c950: 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69  atement.  .^SQLi
c960: 74 65 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f  te passes the mo
c970: 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64  dule arguments d
c980: 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b  irectly.to the [
c990: 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78 43  xCreate] and [xC
c9a0: 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73 20  onnect] methods 
c9b0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
c9c0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74  plementation.wit
c9d0: 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70 72  hout any interpr
c9e0: 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 20  etation.  It is 
c9f0: 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69  the responsibili
ca00: 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  ty.of the module
ca10: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ca20: 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e 74  to parse and int
ca30: 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20 61  erpret its own a
ca40: 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  rguments.</p>..<
ca50: 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61 62  p>^A virtual tab
ca60: 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65 64 20  le is destroyed 
ca70: 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e 61  using the ordina
ca80: 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  ry.[DROP TABLE] 
ca90: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72  statement.  Ther
caa0: 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52  e is no.DROP VIR
cab0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
cac0: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment.</p>..<tcl>
cad0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
cae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
caf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
cb20: 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64  Section DELETE d
cb30: 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a 44  elete {DELETE *D
cb40: 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44  ELETEs}..BubbleD
cb50: 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
cb60: 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72  mt 1.BubbleDiagr
cb70: 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62  am qualified-tab
cb80: 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a  le-name.</tcl>..
cb90: 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63 6f  <p>The DELETE co
cba0: 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72 65  mmand removes re
cbb0: 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 74  cords from the t
cbc0: 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
cbd0: 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71 75 61  by the.   <i>qua
cbe0: 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
cbf0: 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49 66 20  e</i>. ..<p>^If 
cc00: 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
cc10: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c   is not present,
cc20: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e 20   all records in 
cc30: 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 64 65  the table are de
cc40: 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20 61 20  leted..   ^If a 
cc50: 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
cc60: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20 6f  supplied, then o
cc70: 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20 66  nly those rows f
cc80: 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20 20 20  or which the.   
cc90: 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
cca0: 74 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63  ting the WHERE c
ccb0: 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f 6f 6c  lause as a [bool
ccc0: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 0a  ean expression|.
ccd0: 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65     boolean expre
cce0: 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 20 61  ssion is true] a
ccf0: 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 68 33  re deleted...<h3
cd00: 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e  >Restrictions on
cd10: 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e   DELETE Statemen
cd20: 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45  ts Within CREATE
cd30: 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c   TRIGGER</h3>..<
cd40: 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
cd50: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
cd60: 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74 61  ly to DELETE sta
cd70: 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63  tements that occ
cd80: 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20  ur within the.  
cd90: 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41   body of a [CREA
cda0: 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
cdb0: 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  ement:..<ul>.  <
cdc0: 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61  li><p>^The <i>ta
cdd0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
cde0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
cdf0: 66 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65  f a DELETE state
ce00: 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20  ment within.    
ce10: 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d  a trigger body m
ce20: 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
ce30: 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20  ed.  ^(In other 
ce40: 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c  words, the.    <
ce50: 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
ce60: 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
ce70: 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  ix on the table 
ce80: 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  name is not allo
ce90: 77 65 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20  wed .    within 
cea0: 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20  triggers.)^ ^If 
ceb0: 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
cec0: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
ced0: 73 20 61 74 74 61 63 68 65 64 20 69 73 0a 20 20  s attached is.  
cee0: 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d    not in the tem
cef0: 70 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  p database, then
cf00: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
cf10: 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 74 72  ts within the tr
cf20: 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d  igger.    body m
cf30: 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74  ust operate on t
cf40: 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65  ables within the
cf50: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
cf60: 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61  s it. ^If the ta
cf70: 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68  ble.    to which
cf80: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
cf90: 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74  attached is in t
cfa0: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
cfb0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75  , then the.    u
cfc0: 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20  nqualified name 
cfd0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
cfe0: 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20 72 65  ng deleted is re
cff0: 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61  solved in the sa
d000: 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20 69 74  me way as.    it
d010: 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65   is for a top-le
d020: 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62  vel statement (b
d030: 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73  y searching firs
d040: 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  t the TEMP datab
d050: 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68  ase, then.    th
d060: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
d070: 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20   then any other 
d080: 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
d090: 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65   order they were
d0a0: 0a 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a  .    attached)..
d0b0: 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54      .  <li><p>^T
d0c0: 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
d0d0: 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
d0e0: 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  auses are not al
d0f0: 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a  lowed on DELETE.
d100: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
d110: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
d120: 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  /p>..  <li><p>^T
d130: 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  he LIMIT and ORD
d140: 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 28 64  ER BY clauses (d
d150: 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20  escribed below) 
d160: 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
d170: 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73  for.    DELETE s
d180: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
d190: 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c   triggers.</p>.<
d1a0: 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e  /ul>..<h3>Option
d1b0: 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  al LIMIT and ORD
d1c0: 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68  ER BY clauses</h
d1d0: 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69  3>..<p>^(If SQLi
d1e0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
d1f0: 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
d200: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
d210: 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
d220: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
d230: 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
d240: 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
d250: 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65  tatement is.exte
d260: 6e 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69  nded by the addi
d270: 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c  tion of optional
d280: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
d290: 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f  MIT clauses:)^</
d2a0: 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
d2b0: 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
d2c0: 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e  mt-limited</tcl>
d2d0: 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54  ..<p>^If a DELET
d2e0: 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
d2f0: 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
d300: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
d310: 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
d320: 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20  will be deleted 
d330: 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
d340: 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
d350: 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
d360: 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
d370: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
d380: 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72  value. ^If the r
d390: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61  esult of the eva
d3a0: 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49  luating the LIMI
d3b0: 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20  T clause.cannot 
d3c0: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
d3d0: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
d3e0: 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20  teger value, it 
d3f0: 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20  is an error. ^A 
d400: 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20  .negative LIMIT 
d410: 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72  value is interpr
d420: 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69  eted as "no limi
d430: 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c  t". ^(If the DEL
d440: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61  ETE statement .a
d450: 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45  lso has an OFFSE
d460: 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69  T clause, then i
d470: 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65  t is similarly e
d480: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73  valuated and cas
d490: 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20  t to an.integer 
d4a0: 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74  value. Again, it
d4b0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20   is an error if 
d4c0: 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74  the value cannot
d4d0: 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63   be losslessly.c
d4e0: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
d4f0: 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68  nteger.)^ ^If th
d500: 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54  ere is no OFFSET
d510: 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20   clause, or the 
d520: 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67  calculated.integ
d530: 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61  er value is nega
d540: 74 69 76 65 2c 20 74 68 65 20 65 66 66 65 63 74  tive, the effect
d550: 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65  ive OFFSET value
d560: 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28   is zero...<p>^(
d570: 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
d580: 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f  atement has an O
d590: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
d5a0: 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
d5b0: 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c  at would .be del
d5c0: 65 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65  eted in the abse
d5d0: 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
d5e0: 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74   clause are sort
d5f0: 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
d600: 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54  the .ORDER BY. T
d610: 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69  he first <i>M</i
d620: 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69  > rows, where <i
d630: 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61  >M</i> is the va
d640: 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61  lue found by.eva
d650: 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53  luating the OFFS
d660: 45 54 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  ET clause expres
d670: 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65  sion, are skippe
d680: 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f  d, and the follo
d690: 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20  wing .<i>N</i>, 
d6a0: 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69  where <i>N</i> i
d6b0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
d6c0: 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
d6d0: 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64  ion, are deleted
d6e0: 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72  .)^.^If there ar
d6f0: 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e  e less than <i>N
d700: 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e  </i> rows remain
d710: 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67  ing after taking
d720: 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75   the OFFSET clau
d730: 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c  se.into account,
d740: 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54   or if the LIMIT
d750: 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
d760: 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  d to a negative 
d770: 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a  value, then all.
d780: 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61  remaining rows a
d790: 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e  re deleted...<p>
d7a0: 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73  ^If the DELETE s
d7b0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20  tatement has no 
d7c0: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
d7d0: 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
d7e0: 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c  hat.would be del
d7f0: 65 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65  eted in the abse
d800: 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
d810: 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65   clause are asse
d820: 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69  mbled in an.arbi
d830: 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f  trary order befo
d840: 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  re applying the 
d850: 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
d860: 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65   clauses to dete
d870: 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65  rmine .the subse
d880: 74 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61  t that are actua
d890: 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70  lly deleted...<p
d8a0: 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20  >^(The ORDER BY 
d8b0: 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 44 45 4c  clause on an DEL
d8c0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
d8d0: 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
d8e0: 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f  termine which.ro
d8f0: 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74  ws fall within t
d900: 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72  he LIMIT. The or
d910: 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
d920: 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69 73  s are deleted is
d930: 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69   arbitrary.and i
d940: 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64  s not influenced
d950: 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59   by the ORDER BY
d960: 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c   clause.)^..<tcl
d970: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75  >hd_fragment tru
d980: 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61  ncateopt {trunca
d990: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d  te optimization}
d9a0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54  </tcl>.<h3>The T
d9b0: 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61  runcate Optimiza
d9c0: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57  tion</h3>..<p>^W
d9d0: 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73  hen the WHERE is
d9e0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
d9f0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
da00: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62   and the table.b
da10: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73  eing deleted has
da20: 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51   no triggers,.SQ
da30: 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74  Lite uses an opt
da40: 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61  imization to era
da50: 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61  se the entire ta
da60: 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68  ble content.with
da70: 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69  out having to vi
da80: 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  sit each row of 
da90: 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69  the table indivi
daa0: 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72  dually..This "tr
dab0: 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61  uncate" optimiza
dac0: 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64  tion makes the d
dad0: 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66  elete run much f
dae0: 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20  aster..Prior to 
daf0: 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20  SQLite [version 
db00: 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e  3.6.5], the trun
db10: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
db20: 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61  n.also meant tha
db30: 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
db40: 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73  hanges()] and.[s
db50: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
db60: 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63  nges()] interfac
db70: 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e  es.and the [coun
db80: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
db90: 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61  ].will not actua
dba0: 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e  lly return the n
dbb0: 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64  umber of deleted
dbc0: 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72   rows.  .That pr
dbd0: 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66  oblem has been f
dbe0: 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73  ixed as of [vers
dbf0: 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e  ion 3.6.5]...<p>
dc00: 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70  ^The truncate op
dc10: 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62  timization can b
dc20: 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69  e permanently di
dc30: 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71  sabled for all q
dc40: 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70  ueries.by recomp
dc50: 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74  iling.SQLite wit
dc60: 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d  h the [SQLITE_OM
dc70: 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49  IT_TRUNCATE_OPTI
dc80: 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c  MIZATION] compil
dc90: 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f  e-time switch.</
dca0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63  p>..<p>The trunc
dcb0: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
dcc0: 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73   can also be dis
dcd0: 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65  abled at runtime
dce0: 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69   using.the [sqli
dcf0: 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
dd00: 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  er()] interface.
dd10: 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69    ^If an authori
dd20: 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74  zer callback.ret
dd30: 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e  urns [SQLITE_IGN
dd40: 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c  ORE] for an [SQL
dd50: 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69  ITE_DELETE] acti
dd60: 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68  on code, then.th
dd70: 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69  e DELETE operati
dd80: 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20  on will proceed 
dd90: 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65  but the truncate
dda0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69   optimization wi
ddb0: 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61  ll.be bypassed a
ddc0: 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  nd rows will be 
ddd0: 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f  deleted one by o
dde0: 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ne.</p>..<tcl>.#
ddf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
de40: 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44  ection {DETACH D
de50: 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20  ATABASE} detach 
de60: 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65 44  *DETACH..BubbleD
de70: 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74  iagram detach-st
de80: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
de90: 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20  ^This statement 
dea0: 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64 69  detaches an addi
deb0: 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
dec0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69  connection previ
ded0: 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64 20  ously .attached 
dee0: 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41 43  using the [ATTAC
def0: 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  H] statement.  .
df00: 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20  ^It is possible 
df10: 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  to have the same
df20: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
df30: 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65  ttached multiple
df40: 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69   times using .di
df50: 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61  fferent names, a
df60: 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65  nd detaching one
df70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61   connection to a
df80: 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65   file will leave
df90: 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74   the .others int
dfa0: 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  act.</p>..<p>^Th
dfb0: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  is statement wil
dfc0: 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74 65  l fail if SQLite
dfd0: 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c   is in the middl
dfe0: 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69  e of a transacti
dff0: 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  on.</p>...<tcl>.
e000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
e050: 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44  ection {DROP IND
e060: 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b  EX} dropindex {{
e070: 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42 75  DROP INDEX}}..Bu
e080: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
e090: 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f  -index-stmt 1.</
e0a0: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
e0b0: 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  OP INDEX stateme
e0c0: 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e  nt removes an in
e0d0: 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74  dex added.with t
e0e0: 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  he [CREATE INDEX
e0f0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
e100: 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c  e index is compl
e110: 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
e120: 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68  om.the disk.  Th
e130: 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65  e only way to re
e140: 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20  cover the index 
e150: 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68  is to reenter th
e160: 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43  e.appropriate [C
e170: 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d  REATE INDEX] com
e180: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  mand.</p>..<tcl>
e190: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e1e0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41  Section {DROP TA
e1f0: 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b  BLE} droptable {
e200: 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 42  {DROP TABLE}}..B
e210: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
e220: 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c  p-table-stmt 1.<
e230: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
e240: 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
e250: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61  ent removes a ta
e260: 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74  ble added with t
e270: 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
e280: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
e290: 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
e2a0: 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61   is the.table na
e2b0: 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65  me.  ^The droppe
e2c0: 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c  d table is compl
e2d0: 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
e2e0: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
e2f0: 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20  .schema and the 
e300: 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20  disk file.  The 
e310: 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65  table can not be
e320: 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41   recovered.  .^A
e330: 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74  ll indices and t
e340: 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74  riggers.associat
e350: 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
e360: 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74  e are also delet
e370: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ed.</p>..<p>^The
e380: 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49   optional IF EXI
e390: 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72  STS clause suppr
e3a0: 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20  esses the error 
e3b0: 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61  that would norma
e3c0: 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68  lly.result if th
e3d0: 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  e table does not
e3e0: 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   exist.</p>..<p>
e3f0: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
e400: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
e410: 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f  e enabled, a DRO
e420: 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
e430: 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c  performs an.impl
e440: 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44  icit [DELETE | D
e450: 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74  ELETE FROM &lt;t
e460: 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64 20  bl&gt;] command 
e470: 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20  before removing 
e480: 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20 74  the.table from t
e490: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
e4a0: 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65 72  ma. ^Any trigger
e4b0: 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
e4c0: 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f 70  e table are.drop
e4d0: 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ped from the dat
e4e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65 66  abase schema bef
e4f0: 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69 74  ore the implicit
e500: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
e510: 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78 65  ;tbl&gt; .is exe
e520: 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20 63  cuted, so this c
e530: 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20  annot cause any 
e540: 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65  triggers to fire
e550: 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 5e  . By contrast, ^
e560: 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  an.implicit DELE
e570: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
e580: 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20 61  gt; does cause a
e590: 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66  ny configured.[f
e5a0: 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
e5b0: 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63  ns] to take plac
e5c0: 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c  e. .^If the impl
e5d0: 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
e5e0: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78 65   &lt;tbl&gt; exe
e5f0: 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66  cuted.as part of
e600: 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
e610: 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61  mmand violates a
e620: 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ny immediate for
e630: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
e640: 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69  ints,.an error i
e650: 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74  s returned and t
e660: 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  he table is not 
e670: 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68  dropped. ^If .th
e680: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
e690: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
e6a0: 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64  t; causes any .d
e6b0: 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
e6c0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
e6d0: 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20  to be violated, 
e6e0: 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f  and the violatio
e6f0: 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77  ns still.exist w
e700: 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74  hen the transact
e710: 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64  ion is committed
e720: 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  , an error is re
e730: 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69  turned at the ti
e740: 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c  me.of commit...<
e750: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
e760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e7a0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
e7b0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
e7c0: 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52  rigger {{DROP TR
e7d0: 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  IGGER}}..BubbleD
e7e0: 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67  iagram drop-trig
e7f0: 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ger-stmt 1.</tcl
e800: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20  >..<p>^The DROP 
e810: 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
e820: 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67  t removes a trig
e830: 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74  ger created by t
e840: 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47  he .[CREATE TRIG
e850: 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  GER] statement. 
e860: 20 5e 54 68 65 20 74 72 69 67 67 65 72 20 69 73   ^The trigger is
e870: 20 0a 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74   .deleted from t
e880: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
e890: 6d 61 2e 20 5e 4e 6f 74 65 20 74 68 61 74 20 74  ma. ^Note that t
e8a0: 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
e8b0: 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f 70 70  matically .dropp
e8c0: 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f  ed when the asso
e8d0: 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 20  ciated table is 
e8e0: 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  dropped.</p>..<t
e8f0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
e900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e940: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
e950: 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20   VIEW} dropview 
e960: 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 42  {{DROP VIEW}}..B
e970: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
e980: 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  p-view-stmt 1.</
e990: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
e9a0: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
e9b0: 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
e9c0: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 0a   created by the.
e9d0: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 73 74  [CREATE VIEW] st
e9e0: 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 6e  atement.  ^The n
e9f0: 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69 73  ame specified is
ea00: 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65 2e   the .view name.
ea10: 20 20 5e 49 74 20 69 73 20 72 65 6d 6f 76 65 64    ^It is removed
ea20: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
ea30: 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 6e  se schema, but n
ea40: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a 69  o actual data .i
ea50: 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  n the underlying
ea60: 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20   base tables is 
ea70: 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c  modified.</p>..<
ea80: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
ea90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eaa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ead0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c  ###.Section EXPL
eae0: 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c  AIN explain EXPL
eaf0: 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  AIN..BubbleDiagr
eb00: 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63  am sql-stmt.</tc
eb10: 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20 73  l>..<p>^An SQL s
eb20: 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20  tatement can be 
eb30: 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20  preceded by the 
eb40: 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e  keyword "EXPLAIN
eb50: 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61  " or.by the phra
eb60: 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52  se "EXPLAIN QUER
eb70: 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68 65  Y PLAN".  ^Eithe
eb80: 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63  r modification c
eb90: 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74  auses the.SQL st
eba0: 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76  atement to behav
ebb0: 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e 64  e as a query and
ebc0: 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72   to return infor
ebd0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77  mation about.how
ebe0: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
ebf0: 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70  nt would have op
ec00: 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45 58  erated if the EX
ec10: 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72  PLAIN keyword or
ec20: 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65 6e  .phrase had been
ec30: 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   omitted.</p>..<
ec40: 70 3e 54 68 65 20 6f 75 74 70 75 74 20 66 72 6f  p>The output fro
ec50: 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 45 58  m EXPLAIN and EX
ec60: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
ec70: 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
ec80: 0a 69 6e 74 65 72 61 63 74 69 76 65 20 61 6e 61  .interactive ana
ec90: 6c 79 73 69 73 20 61 6e 64 20 74 72 6f 75 62 6c  lysis and troubl
eca0: 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20  eshooting only. 
ecb0: 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   The details of 
ecc0: 74 68 65 20 0a 6f 75 74 70 75 74 20 66 6f 72 6d  the .output form
ecd0: 61 74 20 61 72 65 20 73 75 62 6a 65 63 74 20 74  at are subject t
ece0: 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  o change from on
ecf0: 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51 4c  e release of SQL
ed00: 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ite to the next.
ed10: 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68  .Applications sh
ed20: 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 45 58 50  ould not use EXP
ed30: 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41 49 4e 20  LAIN or EXPLAIN 
ed40: 51 55 45 52 59 20 50 4c 41 4e 20 73 69 6e 63 65  QUERY PLAN since
ed50: 0a 74 68 65 69 72 20 65 78 61 63 74 20 62 65 68  .their exact beh
ed60: 61 76 69 6f 72 20 69 73 20 76 61 72 69 61 62 6c  avior is variabl
ed70: 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72 74 69  e and only parti
ed80: 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65 64 2e  ally documented.
ed90: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
eda0: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
edb0: 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74  rd appears by it
edc0: 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74  self it causes t
edd0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20  he statement.to 
ede0: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
edf0: 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  y that returns t
ee00: 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a  he sequence of .
ee10: 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65  [virtual machine
ee20: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20 69   instructions] i
ee30: 74 20 77 6f 75 6c 64 20 68 61 76 65 20 75 73 65  t would have use
ee40: 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
ee50: 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74 68 65   command had.the
ee60: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
ee70: 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e   not been presen
ee80: 74 2e 20 5e 57 68 65 6e 20 74 68 65 20 45 58 50  t. ^When the EXP
ee90: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
eea0: 70 68 72 61 73 65 0a 61 70 70 65 61 72 73 2c 20  phrase.appears, 
eeb0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65  the statement re
eec0: 74 75 72 6e 73 20 68 69 67 68 2d 6c 65 76 65 6c  turns high-level
eed0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65 67   information reg
eee0: 61 72 64 69 6e 67 20 74 68 65 20 71 75 65 72 79  arding the query
eef0: 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f 75 6c 64  .plan that would
ef00: 20 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e   have been used.
ef10: 0a 0a 3c 68 33 3e 45 58 50 4c 41 49 4e 20 51 55  ..<h3>EXPLAIN QU
ef20: 45 52 59 20 50 4c 41 4e 20 44 65 74 61 69 6c 73  ERY PLAN Details
ef30: 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20 45 58 50  </h3>..<p>An EXP
ef40: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
ef50: 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 20  command returns 
ef60: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77  zero or more row
ef70: 73 20 6f 66 20 66 6f 75 72 20 63 6f 6c 75 6d 6e  s of four column
ef80: 73 0a 65 61 63 68 2e 20 54 68 65 20 63 6f 6c 75  s.each. The colu
ef90: 6d 6e 20 6e 61 6d 65 73 20 61 72 65 20 22 73 65  mn names are "se
efa0: 6c 65 63 74 69 64 22 2c 20 22 6f 72 64 65 72 22  lectid", "order"
efb0: 2c 20 22 66 72 6f 6d 22 2c 20 22 64 65 74 61 69  , "from", "detai
efc0: 6c 22 2e 20 45 61 63 68 0a 6f 66 20 74 68 65 20  l". Each.of the 
efd0: 66 69 72 73 74 20 74 68 72 65 65 20 63 6f 6c 75  first three colu
efe0: 6d 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69  mn always contai
eff0: 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  ns an integer va
f000: 6c 75 65 2e 20 54 68 65 20 66 69 6e 61 6c 0a 63  lue. The final.c
f010: 6f 6c 75 6d 6e 2c 20 22 64 65 74 61 69 6c 22 2c  olumn, "detail",
f020: 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains 
f030: 6d 6f 73 74 20 6f 66 20 74 68 65 20 75 73 65 66  most of the usef
f040: 75 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ul information, 
f050: 61 6c 77 61 79 73 0a 63 6f 6e 74 61 69 6e 73 20  always.contains 
f060: 61 20 74 65 78 74 20 76 61 6c 75 65 2e 0a 0a 3c  a text value...<
f070: 70 3e 54 68 65 20 45 58 50 4c 41 49 4e 20 51 55  p>The EXPLAIN QU
f080: 45 52 59 20 50 4c 41 4e 20 63 6c 61 75 73 65 20  ERY PLAN clause 
f090: 69 73 20 6d 6f 73 74 20 75 73 65 66 75 6c 20 77  is most useful w
f0a0: 68 65 6e 20 75 73 65 64 20 77 69 74 68 20 61 20  hen used with a 
f0b0: 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
f0c0: 2c 20 62 75 74 20 6d 61 79 20 61 6c 73 6f 20 62  , but may also b
f0d0: 65 20 75 73 65 64 20 6f 6e 20 6f 74 68 65 72 20  e used on other 
f0e0: 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
f0f0: 72 65 61 64 20 64 61 74 61 0a 66 72 6f 6d 20 64  read data.from d
f100: 61 74 61 62 61 73 65 20 74 61 62 6c 65 73 20 28  atabase tables (
f110: 65 2e 67 2e 20 55 50 44 41 54 45 2c 20 44 45 4c  e.g. UPDATE, DEL
f120: 45 54 45 2c 20 49 4e 53 45 52 54 20 49 4e 54 4f  ETE, INSERT INTO
f130: 20 2e 2e 2e 20 53 45 4c 45 43 54 29 2e 0a 0a 3c   ... SELECT)...<
f140: 68 34 3e 54 61 62 6c 65 20 61 6e 64 20 49 6e 64  h4>Table and Ind
f150: 65 78 20 53 63 61 6e 73 3c 2f 68 34 3e 0a 0a 3c  ex Scans</h4>..<
f160: 70 3e 0a 20 20 57 68 65 6e 20 70 72 6f 63 65 73  p>.  When proces
f170: 73 69 6e 67 20 61 20 53 45 4c 45 43 54 20 28 6f  sing a SELECT (o
f180: 72 20 6f 74 68 65 72 29 20 73 74 61 74 65 6d 65  r other) stateme
f190: 6e 74 2c 20 53 51 4c 69 74 65 20 6d 61 79 20 72  nt, SQLite may r
f1a0: 65 74 72 69 65 76 65 20 64 61 74 61 20 66 72 6f  etrieve data fro
f1b0: 6d 0a 20 20 64 61 74 61 62 61 73 65 20 74 61 62  m.  database tab
f1c0: 6c 65 73 20 69 6e 20 61 20 76 61 72 69 65 74 79  les in a variety
f1d0: 20 6f 66 20 77 61 79 73 2e 20 49 74 20 6d 61 79   of ways. It may
f1e0: 20 73 63 61 6e 20 74 68 72 6f 75 67 68 20 61 6c   scan through al
f1f0: 6c 20 74 68 65 20 72 65 63 6f 72 64 73 20 69 6e  l the records in
f200: 0a 20 20 61 20 74 61 62 6c 65 20 28 61 20 66 75  .  a table (a fu
f210: 6c 6c 2d 74 61 62 6c 65 20 73 63 61 6e 29 2c 20  ll-table scan), 
f220: 73 63 61 6e 20 61 20 63 6f 6e 74 69 67 75 6f 75  scan a contiguou
f230: 73 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20  s subset of the 
f240: 72 65 63 6f 72 64 73 20 69 6e 20 61 0a 20 20 74  records in a.  t
f250: 61 62 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68  able based on th
f260: 65 20 72 6f 77 69 64 20 69 6e 64 65 78 2c 20 73  e rowid index, s
f270: 63 61 6e 20 61 20 63 6f 6e 74 69 67 75 6f 75 73  can a contiguous
f280: 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 65   subset of the e
f290: 6e 74 72 69 65 73 20 69 6e 20 61 0a 20 20 64 61  ntries in a.  da
f2a0: 74 61 62 61 73 65 20 5b 43 52 45 41 54 45 20 54  tabase [CREATE T
f2b0: 41 42 4c 45 7c 69 6e 64 65 78 5d 2c 20 6f 72 20  ABLE|index], or 
f2c0: 75 73 65 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f  use a combinatio
f2d0: 6e 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 73  n of the above s
f2e0: 74 72 61 74 65 67 69 65 73 0a 20 20 69 6e 20 61  trategies.  in a
f2f0: 20 73 69 6e 67 6c 65 20 73 63 61 6e 2e 20 54 68   single scan. Th
f300: 65 20 76 61 72 69 6f 75 73 20 77 61 79 73 20 69  e various ways i
f310: 6e 20 77 68 69 63 68 20 53 51 4c 69 74 65 20 6d  n which SQLite m
f320: 61 79 20 72 65 74 72 69 65 76 65 20 64 61 74 61  ay retrieve data
f330: 20 66 72 6f 6d 20 61 0a 20 20 74 61 62 6c 65 20   from a.  table 
f340: 6f 72 20 69 6e 64 65 78 20 61 72 65 20 64 65 73  or index are des
f350: 63 72 69 62 65 64 20 69 6e 20 64 65 74 61 69 6c  cribed in detail
f360: 20 5b 73 74 72 61 74 65 67 69 65 73 7c 68 65 72   [strategies|her
f370: 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 46 6f 72 20 65  e]...<p>.  For e
f380: 61 63 68 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ach table or ind
f390: 65 78 20 73 63 61 6e 6e 65 64 2c 20 74 68 65 20  ex scanned, the 
f3a0: 6f 75 74 70 75 74 20 6f 66 20 45 58 50 4c 41 49  output of EXPLAI
f3b0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 0a 20 20  N QUERY PLAN .  
f3c0: 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63 6f 72  includes a recor
f3d0: 64 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  d for which the 
f3e0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 22 64 65  value in the "de
f3f0: 74 61 69 6c 22 20 63 6f 6c 75 6d 6e 20 62 65 67  tail" column beg
f400: 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 77  ins.  with the w
f410: 6f 72 64 20 22 53 43 41 4e 22 2e 20 45 61 63 68  ord "SCAN". Each
f420: 20 53 43 41 4e 20 72 65 63 6f 72 64 20 69 6e 63   SCAN record inc
f430: 6c 75 64 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77  ludes the follow
f440: 69 6e 67 20 0a 20 20 69 6e 66 6f 72 6d 61 74 69  ing .  informati
f450: 6f 6e 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  on:..<ul>.  <li>
f460: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
f470: 20 74 61 62 6c 65 20 64 61 74 61 20 69 73 20 72   table data is r
f480: 65 61 64 20 66 72 6f 6d 2e 0a 20 20 3c 6c 69 3e  ead from..  <li>
f490: 20 57 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   Whether or not 
f4a0: 61 6e 20 69 6e 64 65 78 20 6f 72 20 5b 61 75 74  an index or [aut
f4b0: 6f 6d 61 74 69 63 20 69 6e 64 65 78 69 6e 67 7c  omatic indexing|
f4c0: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 5d  automatic index]
f4d0: 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e   is used..  <li>
f4e0: 20 57 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   Whether or not 
f4f0: 74 68 65 20 5b 63 6f 76 65 72 69 6e 67 20 69 6e  the [covering in
f500: 64 65 78 5d 20 6f 70 74 69 6d 69 7a 61 74 69 6f  dex] optimizatio
f510: 6e 20 61 70 70 6c 69 65 73 2e 0a 20 20 3c 6c 69  n applies..  <li
f520: 3e 20 54 68 65 20 73 65 6c 65 63 74 69 76 69 74  > The selectivit
f530: 79 20 6f 66 20 74 68 65 20 73 75 62 73 65 74 20  y of the subset 
f540: 6f 66 20 72 65 63 6f 72 64 73 20 73 63 61 6e 6e  of records scann
f550: 65 64 2e 0a 20 20 3c 6c 69 3e 20 54 68 65 20 65  ed..  <li> The e
f560: 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
f570: 6f 66 20 72 6f 77 73 20 74 68 61 74 20 53 51 4c  of rows that SQL
f580: 69 74 65 20 65 78 70 65 63 74 73 20 74 68 65 20  ite expects the 
f590: 73 63 61 6e 20 74 6f 20 76 69 73 69 74 2e 0a 3c  scan to visit..<
f5a0: 2f 75 6c 3e 0a 0a 3c 70 3e 0a 20 20 46 6f 72 20  /ul>..<p>.  For 
f5b0: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 6f 6c  example, the fol
f5c0: 6c 6f 77 69 6e 67 20 45 58 50 4c 41 49 4e 20 51  lowing EXPLAIN Q
f5d0: 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e  UERY PLAN comman
f5e0: 64 20 6f 70 65 72 61 74 65 73 20 6f 6e 20 61 20  d operates on a 
f5f0: 53 45 4c 45 43 54 0a 20 20 73 74 61 74 65 6d 65  SELECT.  stateme
f600: 6e 74 20 74 68 61 74 20 69 73 20 69 6d 70 6c 65  nt that is imple
f610: 6d 65 6e 74 65 64 20 62 79 20 70 65 72 66 6f 72  mented by perfor
f620: 6d 69 6e 67 20 61 20 66 75 6c 6c 2d 74 61 62 6c  ming a full-tabl
f630: 65 20 73 63 61 6e 20 6f 6e 20 74 61 62 6c 65 20  e scan on table 
f640: 74 31 3a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20  t1:.<pre>^(.    
f650: 73 71 6c 69 74 65 26 67 74 3b 20 45 58 50 4c 41  sqlite&gt; EXPLA
f660: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
f670: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
f680: 31 20 57 48 45 52 45 20 61 3d 31 3b 20 0a 20 20  1 WHERE a=1; .  
f690: 20 20 30 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42    0|0|0|SCAN TAB
f6a0: 4c 45 20 74 31 20 28 7e 31 30 30 30 30 30 20 72  LE t1 (~100000 r
f6b0: 6f 77 73 29 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c  ows).)^</pre>..<
f6c0: 70 3e 0a 20 20 53 51 4c 69 74 65 20 65 73 74 69  p>.  SQLite esti
f6d0: 6d 61 74 65 73 20 74 68 61 74 20 74 68 65 20 66  mates that the f
f6e0: 75 6c 6c 2d 74 61 62 6c 65 20 73 63 61 6e 20 77  ull-table scan w
f6f0: 69 6c 6c 20 76 69 73 69 74 20 61 70 70 72 6f 78  ill visit approx
f700: 69 6d 61 74 65 6c 79 20 0a 20 20 31 2c 30 30 30  imately .  1,000
f710: 2c 30 30 30 20 72 65 63 6f 72 64 73 2e 20 49 66  ,000 records. If
f720: 20 74 68 65 20 71 75 65 72 79 20 77 65 72 65 20   the query were 
f730: 61 62 6c 65 20 74 6f 20 75 73 65 20 61 6e 20 69  able to use an i
f740: 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 53  ndex, then the S
f750: 43 41 4e 0a 20 20 72 65 63 6f 72 64 20 77 6f 75  CAN.  record wou
f760: 6c 64 20 69 6e 63 6c 75 64 65 20 74 68 65 20 6e  ld include the n
f770: 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  ame of the index
f780: 20 61 6e 64 20 61 20 64 65 73 63 72 69 70 74 69   and a descripti
f790: 6f 6e 20 6f 66 20 68 6f 77 0a 20 20 69 74 20 69  on of how.  it i
f7a0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75  s used by the qu
f7b0: 65 72 79 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ery. For example
f7c0: 3a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 73 71  :.<pre>^(.    sq
f7d0: 6c 69 74 65 26 67 74 3b 20 43 52 45 41 54 45 20  lite&gt; CREATE 
f7e0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61  INDEX i1 ON t1(a
f7f0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 26 67 74  );.    sqlite&gt
f800: 3b 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  ; EXPLAIN QUERY 
f810: 50 4c 41 4e 20 53 45 4c 45 43 54 20 61 2c 20 62  PLAN SELECT a, b
f820: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
f830: 3d 31 3b 0a 20 20 20 20 30 7c 30 7c 30 7c 53 43  =1;.    0|0|0|SC
f840: 41 4e 20 54 41 42 4c 45 20 74 31 20 42 59 20 49  AN TABLE t1 BY I
f850: 4e 44 45 58 20 69 31 20 28 61 3d 3f 29 20 28 7e  NDEX i1 (a=?) (~
f860: 31 30 20 72 6f 77 73 29 0a 29 5e 3c 2f 70 72 65  10 rows).)^</pre
f870: 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 6f 75 74  >..<p>.  The out
f880: 70 75 74 20 61 62 6f 76 65 20 73 68 6f 77 73 20  put above shows 
f890: 74 68 61 74 20 69 6e 20 74 68 69 73 20 63 61 73  that in this cas
f8a0: 65 2c 20 53 51 4c 69 74 65 20 75 73 65 73 20 69  e, SQLite uses i
f8b0: 6e 64 65 78 20 22 69 31 22 20 74 6f 20 6f 70 74  ndex "i1" to opt
f8c0: 69 6d 69 7a 65 0a 20 20 61 20 57 48 45 52 45 20  imize.  a WHERE 
f8d0: 63 6c 61 75 73 65 20 66 69 6c 74 65 72 20 6f 66  clause filter of
f8e0: 20 74 68 65 20 66 6f 72 6d 20 28 61 3d 3f 29 20   the form (a=?) 
f8f0: 2d 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 22  - in this case "
f900: 61 3d 31 22 2e 20 53 51 4c 69 74 65 20 0a 20 20  a=1". SQLite .  
f910: 65 73 74 69 6d 61 74 65 73 20 74 68 61 74 20 73  estimates that s
f920: 63 61 6e 6e 69 6e 67 20 74 68 65 20 73 75 62 73  canning the subs
f930: 65 74 20 6f 66 20 69 6e 64 65 78 20 65 6e 74 72  et of index entr
f940: 69 65 73 20 74 68 61 74 20 6d 61 74 63 68 20 74  ies that match t
f950: 68 65 20 22 61 3d 31 22 0a 20 20 66 69 6c 74 65  he "a=1".  filte
f960: 72 20 6d 65 61 6e 73 20 73 63 61 6e 6e 69 6e 67  r means scanning
f970: 20 74 68 72 6f 75 67 68 20 61 70 70 72 6f 78 69   through approxi
f980: 6d 61 74 65 6c 79 20 31 30 20 72 65 63 6f 72 64  mately 10 record
f990: 73 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  s. In this case 
f9a0: 69 74 20 69 73 0a 20 20 6e 6f 74 20 70 6f 73 73  it is.  not poss
f9b0: 69 62 6c 65 20 74 6f 20 75 73 65 20 69 6e 64 65  ible to use inde
f9c0: 78 20 69 31 20 61 73 20 61 20 5b 63 6f 76 65 72  x i1 as a [cover
f9d0: 69 6e 67 20 69 6e 64 65 78 5d 2c 20 62 75 74 20  ing index], but 
f9e0: 69 66 20 69 74 20 77 65 72 65 2c 20 74 68 65 0a  if it were, the.
f9f0: 20 20 53 43 41 4e 20 72 65 63 6f 72 64 20 77 6f    SCAN record wo
fa00: 75 6c 64 20 72 65 70 6f 72 74 20 74 68 61 74 20  uld report that 
fa10: 61 73 20 77 65 6c 6c 2e 20 46 6f 72 20 65 78 61  as well. For exa
fa20: 6d 70 6c 65 3a 0a 3c 70 72 65 3e 5e 28 0a 20 20  mple:.<pre>^(.  
fa30: 20 20 73 71 6c 69 74 65 26 67 74 3b 20 43 52 45    sqlite&gt; CRE
fa40: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
fa50: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 73 71  t1(a, b);.    sq
fa60: 6c 69 74 65 26 67 74 3b 20 45 58 50 4c 41 49 4e  lite&gt; EXPLAIN
fa70: 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45   QUERY PLAN SELE
fa80: 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 20  CT a, b FROM t1 
fa90: 57 48 45 52 45 20 61 3d 31 3b 20 0a 20 20 20 20  WHERE a=1; .    
faa0: 30 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45  0|0|0|SCAN TABLE
fab0: 20 74 31 20 42 59 20 43 4f 56 45 52 49 4e 47 20   t1 BY COVERING 
fac0: 49 4e 44 45 58 20 69 32 20 28 61 3d 3f 29 20 28  INDEX i2 (a=?) (
fad0: 7e 31 30 20 72 6f 77 73 29 0a 29 5e 3c 2f 70 72  ~10 rows).)^</pr
fae0: 65 3e 0a 0a 3c 70 3e 0a 20 20 41 6c 6c 20 6a 6f  e>..<p>.  All jo
faf0: 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72  ins in SQLite ar
fb00: 65 20 5b 6a 6f 69 6e 20 6f 72 64 65 72 7c 69 6d  e [join order|im
fb10: 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
fb20: 6e 65 73 74 65 64 20 73 63 61 6e 73 5d 2e 20 57  nested scans]. W
fb30: 68 65 6e 20 61 0a 20 20 53 45 4c 45 43 54 20 71  hen a.  SELECT q
fb40: 75 65 72 79 20 74 68 61 74 20 66 65 61 74 75 72  uery that featur
fb50: 65 73 20 61 20 6a 6f 69 6e 20 69 73 20 61 6e 61  es a join is ana
fb60: 6c 79 7a 65 64 20 75 73 69 6e 67 20 45 58 50 4c  lyzed using EXPL
fb70: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 2c 20  AIN QUERY PLAN, 
fb80: 6f 6e 65 0a 20 20 53 43 41 4e 20 72 65 63 6f 72  one.  SCAN recor
fb90: 64 20 69 73 20 6f 75 74 70 75 74 20 66 6f 72 20  d is output for 
fba0: 65 61 63 68 20 6e 65 73 74 65 64 20 73 63 61 6e  each nested scan
fbb0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c  . For example:.<
fbc0: 70 72 65 3e 5e 28 0a 20 20 20 20 73 71 6c 69 74  pre>^(.    sqlit
fbd0: 65 26 67 74 3b 20 45 58 50 4c 41 49 4e 20 51 55  e&gt; EXPLAIN QU
fbe0: 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20  ERY PLAN SELECT 
fbf0: 74 31 2e 2a 2c 20 74 32 2e 2a 20 46 52 4f 4d 20  t1.*, t2.* FROM 
fc00: 74 31 2c 20 74 32 20 57 48 45 52 45 20 74 31 2e  t1, t2 WHERE t1.
fc10: 61 3d 31 20 41 4e 44 20 74 31 2e 62 3e 32 3b 0a  a=1 AND t1.b>2;.
fc20: 20 20 20 20 30 7c 30 7c 30 7c 53 43 41 4e 20 54      0|0|0|SCAN T
fc30: 41 42 4c 45 20 74 31 20 42 59 20 43 4f 56 45 52  ABLE t1 BY COVER
fc40: 49 4e 47 20 49 4e 44 45 58 20 69 32 20 28 61 3d  ING INDEX i2 (a=
fc50: 3f 20 41 4e 44 20 62 3e 3f 29 20 28 7e 33 20 72  ? AND b>?) (~3 r
fc60: 6f 77 73 29 0a 20 20 20 20 30 7c 31 7c 31 7c 53  ows).    0|1|1|S
fc70: 43 41 4e 20 54 41 42 4c 45 20 74 32 20 28 7e 31  CAN TABLE t2 (~1
fc80: 30 30 30 30 30 30 20 72 6f 77 73 29 0a 29 5e 3c  000000 rows).)^<
fc90: 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65  /pre>..<p>.  The
fca0: 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 6f   second column o
fcb0: 66 20 6f 75 74 70 75 74 20 28 63 6f 6c 75 6d 6e  f output (column
fcc0: 20 22 6f 72 64 65 72 22 29 20 69 6e 64 69 63 61   "order") indica
fcd0: 74 65 73 20 74 68 65 20 6e 65 73 74 69 6e 67 20  tes the nesting 
fce0: 6f 72 64 65 72 2e 20 49 6e 0a 20 20 74 68 69 73  order. In.  this
fcf0: 20 63 61 73 65 2c 20 74 68 65 20 73 63 61 6e 20   case, the scan 
fd00: 6f 66 20 74 61 62 6c 65 20 74 31 20 75 73 69 6e  of table t1 usin
fd10: 67 20 69 6e 64 65 78 20 69 32 20 69 73 20 74 68  g index i2 is th
fd20: 65 20 6f 75 74 65 72 20 6c 6f 6f 70 20 28 6f 72  e outer loop (or
fd30: 64 65 72 3d 30 29 0a 20 20 61 6e 64 20 74 68 65  der=0).  and the
fd40: 20 66 75 6c 6c 2d 74 61 62 6c 65 20 73 63 61 6e   full-table scan
fd50: 20 6f 66 20 74 61 62 6c 65 20 74 32 20 28 6f 72   of table t2 (or
fd60: 64 65 72 3d 31 29 20 69 73 20 74 68 65 20 69 6e  der=1) is the in
fd70: 6e 65 72 20 6c 6f 6f 70 2e 20 54 68 65 20 74 68  ner loop. The th
fd80: 69 72 64 0a 20 20 63 6f 6c 75 6d 6e 20 28 63 6f  ird.  column (co
fd90: 6c 75 6d 6e 20 22 66 72 6f 6d 22 29 2c 20 69 6e  lumn "from"), in
fda0: 64 69 63 61 74 65 73 20 74 68 65 20 70 6f 73 69  dicates the posi
fdb0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 46 52 4f 4d  tion in the FROM
fdc0: 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 0a 20   clause of the. 
fdd0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
fde0: 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
fdf0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
fe00: 20 65 61 63 68 20 73 63 61 6e 20 6f 63 63 75 72   each scan occur
fe10: 73 20 69 6e 2e 20 49 6e 20 74 68 65 0a 20 20 63  s in. In the.  c
fe20: 61 73 65 20 61 62 6f 76 65 2c 20 74 61 62 6c 65  ase above, table
fe30: 20 74 31 20 6f 63 63 75 70 69 65 73 20 74 68 65   t1 occupies the
fe40: 20 66 69 72 73 74 20 70 6f 73 69 74 69 6f 6e 20   first position 
fe50: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
fe60: 73 65 2c 20 73 6f 20 74 68 65 0a 20 20 76 61 6c  se, so the.  val
fe70: 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 22 66 72  ue of column "fr
fe80: 6f 6d 22 20 69 73 20 30 20 69 6e 20 74 68 65 20  om" is 0 in the 
fe90: 66 69 72 73 74 20 53 43 41 4e 20 72 65 63 6f 72  first SCAN recor
fea0: 64 2e 20 54 61 62 6c 65 20 74 32 20 69 73 20 69  d. Table t2 is i
feb0: 6e 20 74 68 65 0a 20 20 73 65 63 6f 6e 64 20 70  n the.  second p
fec0: 6f 73 69 74 69 6f 6e 2c 20 73 6f 20 74 68 65 20  osition, so the 
fed0: 22 66 72 6f 6d 22 20 63 6f 6c 75 6d 6e 20 66 6f  "from" column fo
fee0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
fef0: 69 6e 67 20 53 43 41 4e 20 72 65 63 6f 72 64 20  ing SCAN record 
ff00: 69 73 0a 20 20 73 65 74 20 74 6f 20 31 2e 20 49  is.  set to 1. I
ff10: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
ff20: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 6f 73  example, the pos
ff30: 69 74 69 6f 6e 73 20 6f 66 20 74 31 20 61 6e 64  itions of t1 and
ff40: 20 74 32 20 69 6e 20 74 68 65 20 46 52 4f 4d 20   t2 in the FROM 
ff50: 0a 20 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  .  clause of the
ff60: 20 53 45 4c 45 43 54 20 61 72 65 20 72 65 76 65   SELECT are reve
ff70: 72 73 65 64 2e 20 54 68 65 20 71 75 65 72 79 20  rsed. The query 
ff80: 73 74 72 61 74 65 67 79 20 72 65 6d 61 69 6e 73  strategy remains
ff90: 20 74 68 65 20 73 61 6d 65 2c 20 62 75 74 0a 20   the same, but. 
ffa0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
ffb0: 68 65 20 22 66 72 6f 6d 22 20 63 6f 6c 75 6d 6e  he "from" column
ffc0: 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 61   of the output a
ffd0: 72 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f  re adjusted acco
ffe0: 72 64 69 6e 67 6c 79 2e 0a 3c 70 72 65 3e 5e 28  rdingly..<pre>^(
fff0: 0a 20 20 20 20 73 71 6c 69 74 65 26 67 74 3b 20  .    sqlite&gt; 
10000 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
10010 41 4e 20 53 45 4c 45 43 54 20 74 31 2e 2a 2c 20  AN SELECT t1.*, 
10020 74 32 2e 2a 20 46 52 4f 4d 20 74 32 2c 20 74 31  t2.* FROM t2, t1
10030 20 57 48 45 52 45 20 74 31 2e 61 3d 31 20 41 4e   WHERE t1.a=1 AN
10040 44 20 74 31 2e 62 3e 32 3b 0a 20 20 20 20 30 7c  D t1.b>2;.    0|
10050 30 7c 31 7c 53 43 41 4e 20 54 41 42 4c 45 20 74  0|1|SCAN TABLE t
10060 31 20 42 59 20 43 4f 56 45 52 49 4e 47 20 49 4e  1 BY COVERING IN
10070 44 45 58 20 69 32 20 28 61 3d 3f 20 41 4e 44 20  DEX i2 (a=? AND 
10080 62 3e 3f 29 20 28 7e 33 20 72 6f 77 73 29 0a 20  b>?) (~3 rows). 
10090 20 20 20 30 7c 31 7c 30 7c 53 43 41 4e 20 54 41     0|1|0|SCAN TA
100a0 42 4c 45 20 74 32 20 28 7e 31 30 30 30 30 30 30  BLE t2 (~1000000
100b0 20 72 6f 77 73 29 0a 29 5e 3c 2f 70 72 65 3e 0a   rows).)^</pre>.
100c0 0a 3c 70 3e 0a 20 20 49 6e 20 74 68 65 20 65 78  .<p>.  In the ex
100d0 61 6d 70 6c 65 20 61 62 6f 76 65 2c 20 53 51 4c  ample above, SQL
100e0 69 74 65 20 65 73 74 69 6d 61 74 65 73 20 74 68  ite estimates th
100f0 61 74 20 74 68 65 20 6f 75 74 65 72 20 6c 6f 6f  at the outer loo
10100 70 20 73 63 61 6e 20 77 69 6c 6c 20 76 69 73 69  p scan will visi
10110 74 0a 20 20 61 70 70 72 6f 78 69 6d 61 74 65 6c  t.  approximatel
10120 79 20 33 20 72 6f 77 73 2c 20 61 6e 64 20 74 68  y 3 rows, and th
10130 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 73 63 61  e inner loop sca
10140 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  n approximately 
10150 31 2c 30 30 30 2c 30 30 30 2e 20 49 66 0a 20 20  1,000,000. If.  
10160 79 6f 75 20 6f 62 73 65 72 76 65 20 74 68 61 74  you observe that
10170 20 53 51 4c 69 74 65 27 73 20 65 73 74 69 6d 61   SQLite's estima
10180 74 65 73 20 61 72 65 20 77 69 6c 64 6c 79 20 69  tes are wildly i
10190 6e 61 63 63 75 72 61 74 65 20 28 61 6e 64 20 61  naccurate (and a
101a0 70 70 65 61 72 20 74 6f 20 62 65 0a 20 20 63 61  ppear to be.  ca
101b0 75 73 69 6e 67 20 69 74 20 74 6f 20 67 65 6e 65  using it to gene
101c0 72 61 74 65 20 73 75 62 2d 6f 70 74 69 6d 61 6c  rate sub-optimal
101d0 20 71 75 65 72 79 20 70 6c 61 6e 73 29 2c 20 79   query plans), y
101e0 6f 75 72 20 71 75 65 72 69 65 73 20 6d 61 79 20  our queries may 
101f0 62 65 6e 65 66 69 74 0a 20 20 66 72 6f 6d 20 72  benefit.  from r
10200 75 6e 6e 69 6e 67 20 74 68 65 20 5b 41 4e 41 4c  unning the [ANAL
10210 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 20  YZE] command on 
10220 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c  the database...<
10230 70 3e 0a 20 20 49 66 20 74 68 65 20 57 48 45 52  p>.  If the WHER
10240 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20 71 75  E clause of a qu
10250 65 72 79 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ery contains an 
10260 4f 52 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  OR expression, t
10270 68 65 6e 20 53 51 4c 69 74 65 20 6d 69 67 68 74  hen SQLite might
10280 0a 20 20 75 73 65 20 74 68 65 20 5b 6f 72 2d 63  .  use the [or-c
10290 6f 6e 6e 65 63 74 65 64 2d 74 65 72 6d 73 7c 22  onnected-terms|"
102a0 4f 52 20 62 79 20 75 6e 69 6f 6e 22 5d 20 73 74  OR by union"] st
102b0 72 61 74 65 67 79 20 28 61 6c 73 6f 20 64 65 73  rategy (also des
102c0 63 72 69 62 65 64 20 0a 20 20 5b 6f 72 20 6f 70  cribed .  [or op
102d0 74 69 6d 69 7a 61 74 69 6f 6e 7c 68 65 72 65 5d  timization|here]
102e0 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
102f0 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20 74 77  there will be tw
10300 6f 20 53 43 41 4e 20 72 65 63 6f 72 64 73 2c 20  o SCAN records, 
10310 6f 6e 65 0a 20 20 66 6f 72 20 65 61 63 68 20 69  one.  for each i
10320 6e 64 65 78 20 73 63 61 6e 2c 20 77 69 74 68 20  ndex scan, with 
10330 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 73 20  the same values 
10340 69 6e 20 62 6f 74 68 20 74 68 65 20 22 6f 72 64  in both the "ord
10350 65 72 22 20 61 6e 64 20 22 66 72 6f 6d 22 20 0a  er" and "from" .
10360 20 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 20 65    columns. For e
10370 78 61 6d 70 6c 65 3a 0a 3c 70 72 65 3e 5e 28 0a  xample:.<pre>^(.
10380 20 20 20 20 73 71 6c 69 74 65 26 67 74 3b 20 43      sqlite&gt; C
10390 52 45 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f  REATE INDEX i3 O
103a0 4e 20 74 31 28 62 29 3b 0a 20 20 20 20 73 71 6c  N t1(b);.    sql
103b0 69 74 65 26 67 74 3b 20 45 58 50 4c 41 49 4e 20  ite&gt; EXPLAIN 
103c0 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
103d0 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
103e0 45 20 61 3d 31 20 4f 52 20 62 3d 32 3b 0a 20 20  E a=1 OR b=2;.  
103f0 20 20 30 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42    0|0|0|SCAN TAB
10400 4c 45 20 74 31 20 42 59 20 43 4f 56 45 52 49 4e  LE t1 BY COVERIN
10410 47 20 49 4e 44 45 58 20 69 32 20 28 61 3d 3f 29  G INDEX i2 (a=?)
10420 20 28 7e 31 30 20 72 6f 77 73 29 0a 20 20 20 20   (~10 rows).    
10430 30 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45  0|0|0|SCAN TABLE
10440 20 74 31 20 42 59 20 49 4e 44 45 58 20 69 33 20   t1 BY INDEX i3 
10450 28 62 3d 3f 29 20 28 7e 31 30 20 72 6f 77 73 29  (b=?) (~10 rows)
10460 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 68 34 3e 54  .)^</pre>..<h4>T
10470 65 6d 70 6f 72 61 72 79 20 53 6f 72 74 69 6e 67  emporary Sorting
10480 20 42 2d 54 72 65 65 73 3c 2f 68 34 3e 0a 0a 3c   B-Trees</h4>..<
10490 70 3e 0a 20 20 49 66 20 61 20 53 45 4c 45 43 54  p>.  If a SELECT
104a0 20 71 75 65 72 79 20 63 6f 6e 74 61 69 6e 73 20   query contains 
104b0 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 47 52 4f  an ORDER BY, GRO
104c0 55 50 20 42 59 20 6f 72 20 44 49 53 54 49 4e 43  UP BY or DISTINC
104d0 54 20 63 6c 61 75 73 65 2c 20 0a 20 20 53 51 4c  T clause, .  SQL
104e0 69 74 65 20 6d 61 79 20 6e 65 65 64 20 74 6f 20  ite may need to 
104f0 75 73 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20  use a temporary 
10500 62 2d 74 72 65 65 20 73 74 72 75 63 74 75 72 65  b-tree structure
10510 20 74 6f 20 70 65 72 66 6f 72 6d 20 61 6e 20 0a   to perform an .
10520 20 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a    <a href="http:
10530 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
10540 72 67 2f 77 69 6b 69 2f 49 6e 73 65 72 74 69 6f  rg/wiki/Insertio
10550 6e 5f 73 6f 72 74 22 3e 69 6e 73 65 72 74 69 6f  n_sort">insertio
10560 6e 20 73 6f 72 74 3c 2f 61 3e 20 0a 20 20 6f 66  n sort</a> .  of
10570 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73   the output rows
10580 2e 20 4f 72 2c 20 69 74 20 6d 61 79 20 5b 73 6f  . Or, it may [so
10590 72 74 69 6e 67 7c 75 73 65 20 61 6e 20 69 6e 64  rting|use an ind
105a0 65 78 5d 2e 20 55 73 69 6e 67 20 61 6e 20 69 6e  ex]. Using an in
105b0 64 65 78 20 69 73 20 0a 20 20 61 6c 6d 6f 73 74  dex is .  almost
105c0 20 61 6c 77 61 79 73 20 6d 75 63 68 20 6d 6f 72   always much mor
105d0 65 20 65 66 66 69 63 69 65 6e 74 20 74 68 61 6e  e efficient than
105e0 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 6e 20 6f   performing an o
105f0 6e 6c 69 6e 65 20 69 6e 73 65 72 74 69 6f 6e 20  nline insertion 
10600 73 6f 72 74 2e 0a 20 20 49 66 20 61 20 74 65 6d  sort..  If a tem
10610 70 6f 72 61 72 79 20 62 2d 74 72 65 65 20 69 73  porary b-tree is
10620 20 72 65 71 75 69 72 65 64 2c 20 61 20 72 65 63   required, a rec
10630 6f 72 64 20 69 73 20 61 64 64 65 64 20 74 6f 20  ord is added to 
10640 74 68 65 20 45 58 50 4c 41 49 4e 0a 20 20 51 55  the EXPLAIN.  QU
10650 45 52 59 20 50 4c 41 4e 20 6f 75 74 70 75 74 20  ERY PLAN output 
10660 77 69 74 68 20 74 68 65 20 22 64 65 74 61 69 6c  with the "detail
10670 22 20 66 69 65 6c 64 20 73 65 74 20 74 6f 20 61  " field set to a
10680 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 6f 66   string value of
10690 0a 20 20 74 68 65 20 66 6f 72 6d 20 22 55 53 45  .  the form "USE
106a0 20 54 45 4d 50 20 42 2d 54 52 45 45 20 46 4f 52   TEMP B-TREE FOR
106b0 20 78 78 78 22 2c 20 77 68 65 72 65 20 78 78 78   xxx", where xxx
106c0 20 69 73 20 6f 6e 65 20 6f 66 20 22 4f 52 44 45   is one of "ORDE
106d0 52 20 42 59 22 2c 0a 20 20 22 47 52 4f 55 50 20  R BY",.  "GROUP 
106e0 42 59 22 20 6f 72 20 22 44 49 53 54 49 4e 43 54  BY" or "DISTINCT
106f0 22 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a  ". For example:.
10700 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 73 71 6c  .<pre>^(.    sql
10710 69 74 65 26 67 74 3b 20 45 58 50 4c 41 49 4e 20  ite&gt; EXPLAIN 
10720 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
10730 54 20 63 2c 20 64 20 46 52 4f 4d 20 74 32 20 4f  T c, d FROM t2 O
10740 52 44 45 52 20 42 59 20 63 3b 20 0a 20 20 20 20  RDER BY c; .    
10750 30 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45  0|0|0|SCAN TABLE
10760 20 74 32 20 28 7e 31 30 30 30 30 30 30 20 72 6f   t2 (~1000000 ro
10770 77 73 29 0a 20 20 20 20 30 7c 30 7c 30 7c 55 53  ws).    0|0|0|US
10780 45 20 54 45 4d 50 20 42 2d 54 52 45 45 20 46 4f  E TEMP B-TREE FO
10790 52 20 4f 52 44 45 52 20 42 59 0a 29 5e 3c 2f 70  R ORDER BY.)^</p
107a0 72 65 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20 74 68  re>..<p>.  In th
107b0 69 73 20 63 61 73 65 20 75 73 69 6e 67 20 74 68  is case using th
107c0 65 20 74 65 6d 70 6f 72 61 72 79 20 62 2d 74 72  e temporary b-tr
107d0 65 65 20 63 61 6e 20 62 65 20 61 76 6f 69 64 65  ee can be avoide
107e0 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 6e  d by creating an
107f0 20 69 6e 64 65 78 0a 20 20 6f 6e 20 74 32 28 63   index.  on t2(c
10800 29 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  ), as follows:..
10810 3c 70 72 65 3e 5e 28 0a 20 20 20 20 73 71 6c 69  <pre>^(.    sqli
10820 74 65 26 67 74 3b 20 43 52 45 41 54 45 20 49 4e  te&gt; CREATE IN
10830 44 45 58 20 69 34 20 4f 4e 20 74 32 28 63 29 3b  DEX i4 ON t2(c);
10840 0a 20 20 20 20 73 71 6c 69 74 65 26 67 74 3b 20  .    sqlite&gt; 
10850 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
10860 41 4e 20 53 45 4c 45 43 54 20 63 2c 20 64 20 46  AN SELECT c, d F
10870 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
10880 63 3b 20 0a 20 20 20 20 30 7c 30 7c 30 7c 53 43  c; .    0|0|0|SC
10890 41 4e 20 54 41 42 4c 45 20 74 32 20 42 59 20 49  AN TABLE t2 BY I
108a0 4e 44 45 58 20 69 34 20 28 7e 31 30 30 30 30 30  NDEX i4 (~100000
108b0 30 20 72 6f 77 73 29 0a 29 5e 3c 2f 70 72 65 3e  0 rows).)^</pre>
108c0 0a 0a 3c 68 34 3e 53 75 62 71 75 65 72 69 65 73  ..<h4>Subqueries
108d0 3c 2f 68 34 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20  </h4>..<p>.  In 
108e0 61 6c 6c 20 74 68 65 20 65 78 61 6d 70 6c 65 73  all the examples
108f0 20 61 62 6f 76 65 2c 20 74 68 65 20 66 69 72 73   above, the firs
10900 74 20 63 6f 6c 75 6d 6e 20 28 63 6f 6c 75 6d 6e  t column (column
10910 20 22 73 65 6c 65 63 74 69 64 22 29 20 69 73 20   "selectid") is 
10920 61 6c 77 61 79 73 0a 20 20 73 65 74 20 74 6f 20  always.  set to 
10930 30 2e 20 49 66 20 61 20 71 75 65 72 79 20 63 6f  0. If a query co
10940 6e 74 61 69 6e 73 20 73 75 62 2d 73 65 6c 65 63  ntains sub-selec
10950 74 73 2c 20 65 69 74 68 65 72 20 61 73 20 70 61  ts, either as pa
10960 72 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 0a 20  rt of the FROM. 
10970 20 63 6c 61 75 73 65 20 6f 72 20 61 73 20 70 61   clause or as pa
10980 72 74 20 6f 66 20 53 51 4c 20 65 78 70 72 65 73  rt of SQL expres
10990 73 69 6f 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  sions, then the 
109a0 6f 75 74 70 75 74 20 6f 66 20 45 58 50 4c 41 49  output of EXPLAI
109b0 4e 20 51 55 45 52 59 0a 20 20 50 4c 41 4e 20 61  N QUERY.  PLAN a
109c0 6c 73 6f 20 69 6e 63 6c 75 64 65 73 20 61 20 72  lso includes a r
109d0 65 70 6f 72 74 20 66 6f 72 20 65 61 63 68 20 73  eport for each s
109e0 75 62 2d 73 65 6c 65 63 74 2e 20 45 61 63 68 20  ub-select. Each 
109f0 73 75 62 2d 73 65 6c 65 63 74 20 69 73 20 61 73  sub-select is as
10a00 73 69 67 6e 65 64 0a 20 20 61 20 64 69 73 74 69  signed.  a disti
10a10 6e 63 74 2c 20 6e 6f 6e 2d 7a 65 72 6f 20 22 73  nct, non-zero "s
10a20 65 6c 65 63 74 69 64 22 20 76 61 6c 75 65 2e 20  electid" value. 
10a30 54 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 53 45  The top-level SE
10a40 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
10a50 73 0a 20 20 61 6c 77 61 79 73 20 61 73 73 69 67  s.  always assig
10a60 6e 65 64 20 74 68 65 20 73 65 6c 65 63 74 69 64  ned the selectid
10a70 20 76 61 6c 75 65 20 30 2e 20 46 6f 72 20 65 78   value 0. For ex
10a80 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a  ample:..<pre>^(.
10a90 20 20 20 20 73 71 6c 69 74 65 26 67 74 3b 20 45      sqlite&gt; E
10aa0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
10ab0 4e 20 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54  N SELECT (SELECT
10ac0 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
10ad0 20 61 3d 30 29 2c 20 28 53 45 4c 45 43 54 20 61   a=0), (SELECT a
10ae0 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
10af0 3d 74 32 2e 63 29 20 46 52 4f 4d 20 74 32 3b 0a  =t2.c) FROM t2;.
10b00 20 20 20 20 30 7c 30 7c 30 7c 53 43 41 4e 20 54      0|0|0|SCAN T
10b10 41 42 4c 45 20 74 32 20 28 7e 31 30 30 30 30 30  ABLE t2 (~100000
10b20 30 20 72 6f 77 73 29 0a 20 20 20 20 30 7c 30 7c  0 rows).    0|0|
10b30 30 7c 45 58 45 43 55 54 45 20 53 43 41 4c 41 52  0|EXECUTE SCALAR
10b40 20 53 55 42 51 55 45 52 59 20 31 0a 20 20 20 20   SUBQUERY 1.    
10b50 31 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45  1|0|0|SCAN TABLE
10b60 20 74 31 20 42 59 20 43 4f 56 45 52 49 4e 47 20   t1 BY COVERING 
10b70 49 4e 44 45 58 20 69 32 20 28 61 3d 3f 29 20 28  INDEX i2 (a=?) (
10b80 7e 31 30 20 72 6f 77 73 29 0a 20 20 20 20 30 7c  ~10 rows).    0|
10b90 30 7c 30 7c 45 58 45 43 55 54 45 20 43 4f 52 52  0|0|EXECUTE CORR
10ba0 45 4c 41 54 45 44 20 53 43 41 4c 41 52 20 53 55  ELATED SCALAR SU
10bb0 42 51 55 45 52 59 20 32 0a 20 20 20 20 32 7c 30  BQUERY 2.    2|0
10bc0 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45 20 74 31  |0|SCAN TABLE t1
10bd0 20 42 59 20 49 4e 44 45 58 20 69 33 20 28 62 3d   BY INDEX i3 (b=
10be0 3f 29 20 28 7e 31 30 20 72 6f 77 73 29 0a 29 5e  ?) (~10 rows).)^
10bf0 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20 20 54 68  </pre>..<p>.  Th
10c00 65 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  e example above 
10c10 63 6f 6e 74 61 69 6e 73 20 61 20 70 61 69 72 20  contains a pair 
10c20 6f 66 20 73 63 61 6c 61 72 20 73 75 62 71 75 65  of scalar subque
10c30 72 69 65 73 20 61 73 73 69 67 6e 65 64 20 73 65  ries assigned se
10c40 6c 65 63 74 69 64 20 0a 20 20 76 61 6c 75 65 73  lectid .  values
10c50 20 31 20 61 6e 64 20 32 2e 20 41 73 20 77 65 6c   1 and 2. As wel
10c60 6c 20 61 73 20 61 20 53 43 41 4e 20 72 65 63 6f  l as a SCAN reco
10c70 72 64 2c 20 74 68 65 72 65 20 61 72 65 20 61 6c  rd, there are al
10c80 73 6f 20 32 20 22 45 58 45 43 55 54 45 22 20 0a  so 2 "EXECUTE" .
10c90 20 20 72 65 63 6f 72 64 73 20 61 73 73 6f 63 69    records associ
10ca0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 6f  ated with the to
10cb0 70 20 6c 65 76 65 6c 20 73 75 62 71 75 65 72 79  p level subquery
10cc0 20 28 73 65 6c 65 63 74 69 64 20 30 29 2c 20 69   (selectid 0), i
10cd0 6e 64 69 63 61 74 69 6e 67 0a 20 20 74 68 61 74  ndicating.  that
10ce0 20 73 75 62 71 75 65 72 69 65 73 20 31 20 61 6e   subqueries 1 an
10cf0 64 20 32 20 61 72 65 20 65 78 65 63 75 74 65 64  d 2 are executed
10d00 20 62 79 20 74 68 65 20 74 6f 70 20 6c 65 76 65   by the top leve
10d10 6c 20 71 75 65 72 79 20 69 6e 20 61 20 73 63 61  l query in a sca
10d20 6c 61 72 0a 20 20 63 6f 6e 74 65 78 74 2e 20 54  lar.  context. T
10d30 68 65 20 43 4f 52 52 45 4c 41 54 45 44 20 71 75  he CORRELATED qu
10d40 61 6c 69 66 69 65 72 20 70 72 65 73 65 6e 74 20  alifier present 
10d50 69 6e 20 74 68 65 20 45 58 45 43 55 54 45 20 72  in the EXECUTE r
10d60 65 63 6f 72 64 20 61 73 73 6f 63 69 61 74 65 64  ecord associated
10d70 0a 20 20 77 69 74 68 20 73 63 61 6c 61 72 20 73  .  with scalar s
10d80 75 62 71 75 65 72 79 20 32 20 69 6e 64 69 63 61  ubquery 2 indica
10d90 74 65 73 20 74 68 61 74 20 74 68 65 20 71 75 65  tes that the que
10da0 72 79 20 6d 75 73 74 20 62 65 20 72 75 6e 20 73  ry must be run s
10db0 65 70 61 72 61 74 65 6c 79 0a 20 20 66 6f 72 20  eparately.  for 
10dc0 65 61 63 68 20 72 6f 77 20 76 69 73 69 74 65 64  each row visited
10dd0 20 62 79 20 74 68 65 20 74 6f 70 20 6c 65 76 65   by the top leve
10de0 6c 20 71 75 65 72 79 2e 20 49 74 73 20 61 62 73  l query. Its abs
10df0 65 6e 63 65 20 69 6e 20 74 68 65 20 72 65 63 6f  ence in the reco
10e00 72 64 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20  rd.  associated 
10e10 77 69 74 68 20 73 75 62 71 75 65 72 79 20 31 20  with subquery 1 
10e20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 73  means that the s
10e30 75 62 71 75 65 72 79 20 69 73 20 6f 6e 6c 79 20  ubquery is only 
10e40 72 75 6e 20 6f 6e 63 65 20 61 6e 64 0a 20 20 74  run once and.  t
10e50 68 65 20 72 65 73 75 6c 74 20 63 61 63 68 65 64  he result cached
10e60 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
10e70 2c 20 73 75 62 71 75 65 72 79 20 32 20 6d 61 79  , subquery 2 may
10e80 20 62 65 20 6d 6f 72 65 20 70 65 72 66 6f 72 6d   be more perform
10e90 61 6e 63 65 0a 20 20 63 72 69 74 69 63 61 6c 2c  ance.  critical,
10ea0 20 61 73 20 69 74 20 6d 61 79 20 62 65 20 72 75   as it may be ru
10eb0 6e 20 6d 61 6e 79 20 74 69 6d 65 73 20 77 68 65  n many times whe
10ec0 72 65 61 73 20 73 75 62 71 75 65 72 79 20 31 20  reas subquery 1 
10ed0 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 72 75 6e  is only ever run
10ee0 0a 20 20 6f 6e 63 65 2e 0a 0a 3c 70 3e 0a 20 20  .  once...<p>.  
10ef0 55 6e 6c 65 73 73 20 74 68 65 20 5b 66 6c 61 74  Unless the [flat
10f00 74 65 6e 69 6e 67 20 6f 70 74 69 6d 69 7a 61 74  tening optimizat
10f10 69 6f 6e 5d 20 69 73 20 61 70 70 6c 69 65 64 2c  ion] is applied,
10f20 20 69 66 20 61 20 73 75 62 71 75 65 72 79 20 61   if a subquery a
10f30 70 70 65 61 72 73 20 69 6e 0a 20 20 74 68 65 20  ppears in.  the 
10f40 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
10f50 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10f60 74 2c 20 53 51 4c 69 74 65 20 65 78 65 63 75 74  t, SQLite execut
10f70 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 20  es the subquery 
10f80 61 6e 64 0a 20 20 73 74 6f 72 65 73 20 74 68 65  and.  stores the
10f90 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
10fa0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 2e 20 49  mporary table. I
10fb0 74 20 74 68 65 6e 20 75 73 65 73 20 74 68 65 20  t then uses the 
10fc0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
10fd0 0a 20 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  .  temporary tab
10fe0 6c 65 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74  le in place of t
10ff0 68 65 20 73 75 62 71 75 65 72 79 20 74 6f 20 65  he subquery to e
11000 78 65 63 75 74 65 20 74 68 65 20 70 61 72 65 6e  xecute the paren
11010 74 20 71 75 65 72 79 2e 20 54 68 69 73 0a 20 20  t query. This.  
11020 69 73 20 73 68 6f 77 6e 20 69 6e 20 74 68 65 20  is shown in the 
11030 6f 75 74 70 75 74 20 6f 66 20 45 58 50 4c 41 49  output of EXPLAI
11040 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 62 79 20  N QUERY PLAN by 
11050 73 75 62 73 74 69 74 75 74 69 6e 67 20 61 20 0a  substituting a .
11060 20 20 22 53 43 41 4e 20 53 55 42 51 55 45 52 59    "SCAN SUBQUERY
11070 22 20 72 65 63 6f 72 64 20 66 6f 72 20 74 68 65  " record for the
11080 20 22 53 43 41 4e 20 54 41 42 4c 45 22 20 72 65   "SCAN TABLE" re
11090 63 6f 72 64 20 74 68 61 74 20 6e 6f 72 6d 61 6c  cord that normal
110a0 6c 79 20 61 70 70 65 61 72 73 0a 20 20 66 6f 72  ly appears.  for
110b0 20 65 61 63 68 20 65 6c 65 6d 65 6e 74 20 69 6e   each element in
110c0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
110d0 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a  . For example:..
110e0 3c 70 72 65 3e 5e 28 0a 20 20 20 20 73 71 6c 69  <pre>^(.    sqli
110f0 74 65 26 67 74 3b 20 45 58 50 4c 41 49 4e 20 51  te&gt; EXPLAIN Q
11100 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54  UERY PLAN SELECT
11110 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 28   count(*) FROM (
11120 53 45 4c 45 43 54 20 6d 61 78 28 62 29 20 41 53  SELECT max(b) AS
11130 20 78 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50   x FROM t1 GROUP
11140 20 42 59 20 61 29 20 47 52 4f 55 50 20 42 59 20   BY a) GROUP BY 
11150 78 3b 0a 20 20 20 20 31 7c 30 7c 30 7c 53 43 41  x;.    1|0|0|SCA
11160 4e 20 54 41 42 4c 45 20 74 31 20 42 59 20 43 4f  N TABLE t1 BY CO
11170 56 45 52 49 4e 47 20 49 4e 44 45 58 20 69 32 20  VERING INDEX i2 
11180 28 7e 31 30 30 30 30 30 30 20 72 6f 77 73 29 0a  (~1000000 rows).
11190 20 20 20 20 30 7c 30 7c 30 7c 53 43 41 4e 20 53      0|0|0|SCAN S
111a0 55 42 51 55 45 52 59 20 31 20 28 7e 31 30 30 30  UBQUERY 1 (~1000
111b0 30 30 30 20 72 6f 77 73 29 0a 20 20 20 20 30 7c  000 rows).    0|
111c0 30 7c 30 7c 55 53 45 20 54 45 4d 50 20 42 2d 54  0|0|USE TEMP B-T
111d0 52 45 45 20 46 4f 52 20 47 52 4f 55 50 20 42 59  REE FOR GROUP BY
111e0 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20  .)^</pre>..<p>. 
111f0 20 49 66 20 74 68 65 20 5b 66 6c 61 74 74 65 6e   If the [flatten
11200 69 6e 67 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ing optimization
11210 5d 20 69 73 20 75 73 65 64 20 6f 6e 20 61 20 73  ] is used on a s
11220 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
11230 52 4f 4d 20 63 6c 61 75 73 65 0a 20 20 6f 66 20  ROM clause.  of 
11240 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
11250 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 75 74  nt, then the out
11260 70 75 74 20 6f 66 20 45 58 50 4c 41 49 4e 20 51  put of EXPLAIN Q
11270 55 45 52 59 20 50 4c 41 4e 20 72 65 66 6c 65 63  UERY PLAN reflec
11280 74 73 20 74 68 69 73 2e 0a 20 20 46 6f 72 20 65  ts this..  For e
11290 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 66  xample, in the f
112a0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 72 65 20 69  ollowing there i
112b0 73 20 6e 6f 20 22 53 43 41 4e 20 53 55 42 51 55  s no "SCAN SUBQU
112c0 45 52 59 22 20 72 65 63 6f 72 64 20 65 76 65 6e  ERY" record even
112d0 20 74 68 6f 75 67 68 0a 20 20 74 68 65 72 65 20   though.  there 
112e0 69 73 20 61 20 73 75 62 71 75 65 72 79 20 69 6e  is a subquery in
112f0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
11300 20 6f 66 20 74 68 65 20 74 6f 70 20 6c 65 76 65   of the top leve
11310 6c 20 53 45 4c 45 43 54 2e 20 49 6e 73 74 65 61  l SELECT. Instea
11320 64 2c 20 73 69 6e 63 65 0a 20 20 74 68 65 20 66  d, since.  the f
11330 6c 61 74 74 65 6e 69 6e 67 20 6f 70 74 69 6d 69  lattening optimi
11340 7a 61 74 69 6f 6e 20 64 6f 65 73 20 61 70 70 6c  zation does appl
11350 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2c 20  y in this case, 
11360 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
11370 59 20 50 4c 41 4e 0a 20 20 72 65 70 6f 72 74 20  Y PLAN.  report 
11380 73 68 6f 77 73 20 74 68 61 74 20 74 68 65 20 74  shows that the t
11390 6f 70 20 6c 65 76 65 6c 20 71 75 65 72 79 20 69  op level query i
113a0 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73  s implemented us
113b0 69 6e 67 20 61 20 6e 65 73 74 65 64 20 6c 6f 6f  ing a nested loo
113c0 70 20 6a 6f 69 6e 0a 20 20 6f 66 20 74 61 62 6c  p join.  of tabl
113d0 65 73 20 74 31 20 61 6e 64 20 74 32 2e 0a 0a 3c  es t1 and t2...<
113e0 70 72 65 3e 5e 28 0a 20 20 20 20 73 71 6c 69 74  pre>^(.    sqlit
113f0 65 26 67 74 3b 20 45 58 50 4c 41 49 4e 20 51 55  e&gt; EXPLAIN QU
11400 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20  ERY PLAN SELECT 
11410 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a  * FROM (SELECT *
11420 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 63   FROM t2 WHERE c
11430 3d 31 29 2c 20 74 31 3b 0a 20 20 20 20 30 7c 30  =1), t1;.    0|0
11440 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45 20 74 32  |0|SCAN TABLE t2
11450 20 42 59 20 49 4e 44 45 58 20 69 34 20 28 63 3d   BY INDEX i4 (c=
11460 3f 29 20 28 7e 31 30 20 72 6f 77 73 29 0a 20 20  ?) (~10 rows).  
11470 20 20 30 7c 31 7c 31 7c 53 43 41 4e 20 54 41 42    0|1|1|SCAN TAB
11480 4c 45 20 74 31 20 28 7e 31 30 30 30 30 30 30 20  LE t1 (~1000000 
11490 72 6f 77 73 29 0a 29 5e 3c 2f 70 72 65 3e 0a 0a  rows).)^</pre>..
114a0 3c 68 34 3e 43 6f 6d 70 6f 75 6e 64 20 51 75 65  <h4>Compound Que
114b0 72 69 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 0a 20  ries</h4>..<p>. 
114c0 20 45 61 63 68 20 63 6f 6d 70 6f 6e 65 6e 74 20   Each component 
114d0 71 75 65 72 79 20 6f 66 20 61 20 5b 63 6f 6d 70  query of a [comp
114e0 6f 75 6e 64 20 71 75 65 72 79 5d 20 28 55 4e 49  ound query] (UNI
114f0 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 45  ON, UNION ALL, E
11500 58 43 45 50 54 20 6f 72 20 0a 20 20 49 4e 54 45  XCEPT or .  INTE
11510 52 53 45 43 54 29 20 69 73 20 61 73 73 69 67 6e  RSECT) is assign
11520 65 64 20 69 74 73 20 6f 77 6e 20 73 65 6c 65 63  ed its own selec
11530 74 69 64 20 61 6e 64 20 72 65 70 6f 72 74 65 64  tid and reported
11540 20 6f 6e 20 73 65 70 61 72 61 74 65 6c 79 2e 20   on separately. 
11550 41 0a 20 20 73 69 6e 67 6c 65 20 72 65 63 6f 72  A.  single recor
11560 64 20 69 73 20 6f 75 74 70 75 74 20 66 6f 72 20  d is output for 
11570 74 68 65 20 70 61 72 65 6e 74 20 28 63 6f 6d 70  the parent (comp
11580 6f 75 6e 64 20 71 75 65 72 79 29 20 69 64 65 6e  ound query) iden
11590 74 69 66 79 69 6e 67 20 74 68 65 0a 20 20 6f 70  tifying the.  op
115a0 65 72 61 74 69 6f 6e 2c 20 61 6e 64 20 77 68 65  eration, and whe
115b0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 65  ther or not a te
115c0 6d 70 6f 72 61 72 79 20 62 2d 74 72 65 65 20 69  mporary b-tree i
115d0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
115e0 65 6e 74 0a 20 20 69 74 2e 20 46 6f 72 20 65 78  ent.  it. For ex
115f0 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a  ample:..<pre>^(.
11600 20 20 20 20 73 71 6c 69 74 65 26 67 74 3b 20 45      sqlite&gt; E
11610 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
11620 4e 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20  N SELECT a FROM 
11630 74 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  t1 UNION SELECT 
11640 63 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 31  c FROM t2;.    1
11650 7c 30 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45 20  |0|0|SCAN TABLE 
11660 74 31 20 28 7e 31 30 30 30 30 30 30 20 72 6f 77  t1 (~1000000 row
11670 73 29 0a 20 20 20 20 32 7c 30 7c 30 7c 53 43 41  s).    2|0|0|SCA
11680 4e 20 54 41 42 4c 45 20 74 32 20 28 7e 31 30 30  N TABLE t2 (~100
11690 30 30 30 30 20 72 6f 77 73 29 0a 20 20 20 20 30  0000 rows).    0
116a0 7c 30 7c 30 7c 43 4f 4d 50 4f 55 4e 44 20 53 55  |0|0|COMPOUND SU
116b0 42 51 55 45 52 49 45 53 20 31 20 41 4e 44 20 32  BQUERIES 1 AND 2
116c0 20 55 53 49 4e 47 20 54 45 4d 50 20 42 2d 54 52   USING TEMP B-TR
116d0 45 45 20 28 55 4e 49 4f 4e 29 0a 29 5e 3c 2f 70  EE (UNION).)^</p
116e0 72 65 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 22  re>..<p>.  The "
116f0 55 53 49 4e 47 20 54 45 4d 50 20 42 2d 54 52 45  USING TEMP B-TRE
11700 45 22 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65  E" clause in the
11710 20 61 62 6f 76 65 20 6f 75 74 70 75 74 20 69 6e   above output in
11720 64 69 63 61 74 65 73 20 74 68 61 74 20 61 20 0a  dicates that a .
11730 20 20 74 65 6d 70 6f 72 61 72 79 20 62 2d 74 72    temporary b-tr
11740 65 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ee structure is 
11750 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
11760 74 20 74 68 65 20 55 4e 49 4f 4e 20 6f 66 20 74  t the UNION of t
11770 68 65 20 72 65 73 75 6c 74 73 0a 20 20 6f 66 20  he results.  of 
11780 74 68 65 20 74 77 6f 20 73 75 62 2d 73 65 6c 65  the two sub-sele
11790 63 74 73 2e 20 49 66 20 74 68 65 20 74 65 6d 70  cts. If the temp
117a0 6f 72 61 72 79 20 62 2d 74 72 65 65 20 77 65 72  orary b-tree wer
117b0 65 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c 20  e not required, 
117c0 61 73 0a 20 20 69 6e 20 74 68 65 20 66 6f 6c 6c  as.  in the foll
117d0 6f 77 69 6e 67 20 65 78 61 6d 70 6c 65 2c 20 74  owing example, t
117e0 68 65 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  he clause is not
117f0 20 70 72 65 73 65 6e 74 2e 0a 0a 3c 70 72 65 3e   present...<pre>
11800 5e 28 0a 20 20 20 20 73 71 6c 69 74 65 26 67 74  ^(.    sqlite&gt
11810 3b 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  ; EXPLAIN QUERY 
11820 50 4c 41 4e 20 53 45 4c 45 43 54 20 61 20 46 52  PLAN SELECT a FR
11830 4f 4d 20 74 31 20 45 58 43 45 50 54 20 53 45 4c  OM t1 EXCEPT SEL
11840 45 43 54 20 64 20 46 52 4f 4d 20 74 32 20 4f 52  ECT d FROM t2 OR
11850 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20 31 7c  DER BY 1;.    1|
11860 30 7c 30 7c 53 43 41 4e 20 54 41 42 4c 45 20 74  0|0|SCAN TABLE t
11870 31 20 42 59 20 43 4f 56 45 52 49 4e 47 20 49 4e  1 BY COVERING IN
11880 44 45 58 20 69 32 20 28 7e 31 30 30 30 30 30 30  DEX i2 (~1000000
11890 20 72 6f 77 73 29 0a 20 20 20 20 32 7c 30 7c 30   rows).    2|0|0
118a0 7c 53 43 41 4e 20 54 41 42 4c 45 20 74 32 20 28  |SCAN TABLE t2 (
118b0 7e 31 30 30 30 30 30 30 20 72 6f 77 73 29 0a 20  ~1000000 rows). 
118c0 20 20 20 32 7c 30 7c 30 7c 55 53 45 20 54 45 4d     2|0|0|USE TEM
118d0 50 20 42 2d 54 52 45 45 20 46 4f 52 20 4f 52 44  P B-TREE FOR ORD
118e0 45 52 20 42 59 0a 20 20 20 20 30 7c 30 7c 30 7c  ER BY.    0|0|0|
118f0 43 4f 4d 50 4f 55 4e 44 20 53 55 42 51 55 45 52  COMPOUND SUBQUER
11900 49 45 53 20 31 20 41 4e 44 20 32 20 28 45 58 43  IES 1 AND 2 (EXC
11910 45 50 54 29 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 0a  EPT).)^</pre>...
11920 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
11930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11970 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70  ####.Section exp
11980 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65  ression expr {*e
11990 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65  xpression {expre
119a0 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a  ssion syntax}}..
119b0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78  BubbleDiagram ex
119c0 70 72 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72  pr 1.BubbleDiagr
119d0 61 6d 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65  am literal-value
119e0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
119f0 69 67 6e 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62  igned-number.Bub
11a00 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65  bleDiagram raise
11a10 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e  -function.</tcl>
11a20 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f  ..<p>This sectio
11a30 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  n is different f
11a40 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20  rom the others. 
11a50 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74   Most other sect
11a60 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63  ions of.this doc
11a70 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75  ument talks abou
11a80 74 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53  t a particular S
11a90 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69  QL command.  Thi
11aa0 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e  s section does.n
11ab0 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20  ot talk about a 
11ac0 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61  standalone comma
11ad0 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78  nd but about "ex
11ae0 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68  pressions" which
11af0 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65   are .subcompone
11b00 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65  nts of most othe
11b10 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a  r commands.</p>.
11b20 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
11b30 74 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e  t binaryops {bin
11b40 61 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f  ary operators}</
11b50 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f  tcl>.<h3>Operato
11b60 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c  rs</h3>.<p>^(SQL
11b70 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ite understands 
11b80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69  the following bi
11b90 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20  nary operators, 
11ba0 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69  in order from.hi
11bb0 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20  ghest to lowest 
11bc0 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a  precedence:</p>.
11bd0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
11be0 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
11bf0 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c  #2c2cf0"><big>||
11c00 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20  .*    /    %.+  
11c10 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26    -.&lt;&lt;   &
11c20 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20  gt;&gt;   &amp; 
11c30 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74     |.&lt;    &lt
11c40 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74  ;=   &gt;    &gt
11c50 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20  ;=.=    ==   != 
11c60 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62    &lt;&gt;   </b
11c70 69 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20  ig>IS   IS NOT  
11c80 20 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f   IN   LIKE   GLO
11c90 42 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45  B   MATCH   REGE
11ca0 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f  XP.AND   .OR</fo
11cb0 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt>.</pre></bloc
11cc0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28  kquote>)^..<p>^(
11cd0 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20  Supported unary 
11ce0 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73  prefix operators
11cf0 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a   are these:</p>.
11d00 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
11d10 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
11d20 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20  #2c2cf0"><big>- 
11d30 20 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54     +    ~    NOT
11d40 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f  </big></font>.</
11d50 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
11d60 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  >)^..<tcl>hd_fra
11d70 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20  gment collateop 
11d80 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  {COLLATE operato
11d90 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  r}</tcl>.<p>^The
11da0 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f   COLLATE operato
11db0 72 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73  r is a unary pos
11dc0 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68  tfix.operator th
11dd0 61 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f  at assigns a [co
11de0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11df0 5d 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69  ] to an expressi
11e00 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45  on..^The COLLATE
11e10 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20   operator has a 
11e20 68 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63  higher precedenc
11e30 65 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69  e (binds more ti
11e40 67 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a  ghtly) than any.
11e50 70 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65  prefix unary ope
11e60 72 61 74 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e  rator or any bin
11e70 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54  ary operator..^T
11e80 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
11e90 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 65  uence set by the
11ea0 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f   COLLATE operato
11eb0 72 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a  r overrides the.
11ec0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11ed0 63 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ce determined by
11ee0 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61   the COLLATE cla
11ef0 75 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b  use in a table.[
11f00 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
11f10 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c  n]..See the [col
11f20 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c  lating sequence|
11f30 20 64 65 74 61 69 6c 65 64 20 64 69 73 63 75 73   detailed discus
11f40 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e  sion on collatin
11f50 67 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20  g sequences].in 
11f60 74 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20  the [datatype | 
11f70 44 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69  Datatype In SQLi
11f80 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f  te3] document fo
11f90 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
11fa0 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a  ormation..</p>..
11fb0 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c  <tcl>hd_puts ".<
11fc0 70 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65  p>^The unary ope
11fd0 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  rator [Operator 
11fe0 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  +] is a no-op.  
11ff0 5e 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69  ^It can be appli
12000 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e  ed.to strings, n
12010 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72  umbers, blobs or
12020 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77   NULL and it alw
12030 61 79 73 20 72 65 74 75 72 6e 73 20 61 20 72 65  ays returns a re
12040 73 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61  sult.with the sa
12050 6d 65 20 76 61 6c 75 65 20 61 73 20 74 68 65 20  me value as the 
12060 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74  operand.</p>"</t
12070 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  cl>..<p>Note tha
12080 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  t there are two 
12090 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68  variations of th
120a0 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74  e equals and not
120b0 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72   equals.operator
120c0 73 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20  s.  ^Equals can 
120d0 62 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e  be either..<tcl>
120e0 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61  .hd_puts "[Opera
120f0 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61  tor =] or [Opera
12100 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f  tor ==]..^The no
12110 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f  n-equals operato
12120 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a  r can be either.
12130 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72  [Operator !=] or
12140 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b   [Operator {&lt;
12150 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70  &gt;}]..^The [Op
12160 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61  erator ||] opera
12170 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65  tor is \"concate
12180 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e  nate\" - it join
12190 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74  s together.the t
121a0 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74  wo strings of it
121b0 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65  s operands..^The
121c0 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
121d0 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74  tor %] outputs t
121e0 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20  he value of its 
121f0 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f  left .operand mo
12200 64 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f  dulo its right o
12210 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  perand.</p>..<p>
12220 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61  ^The result of a
12230 6e 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ny binary operat
12240 6f 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e  or is either a n
12250 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20  umeric value or 
12260 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f  .NULL, except fo
12270 72 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  r the [Operator 
12280 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f  ||] concatenatio
12290 6e 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68  n operator which
122a0 20 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74   always .evaluat
122b0 65 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c  es to either NUL
122c0 4c 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75  L or a text valu
122d0 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67  e.</p>"..hd_frag
122e0 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b  ment {isisnot} {
122f0 49 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53  IS operator} {IS
12300 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a   NOT operator}..
12310 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65  hd_puts "<p>^The
12320 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61   [Operator IS] a
12330 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53  nd [Operator {IS
12340 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73   NOT}] operators
12350 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72   work.like [Oper
12360 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65  ator =] and [Ope
12370 72 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74  rator !=] except
12380 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74   when one or bot
12390 68 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64  h of the.operand
123a0 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20  s are NULL. ^In 
123b0 74 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f  this case, if bo
123c0 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
123d0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49  NULL, then the.I
123e0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
123f0 61 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29  ates to 1 (true)
12400 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20   and the IS NOT 
12410 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
12420 65 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e  es.to 0 (false).
12430 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64   ^If one operand
12440 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65   is NULL and the
12450 20 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74   other is not, t
12460 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
12470 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
12480 20 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74   0 (false) and t
12490 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
124a0 6f 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a  or is 1 (true)..
124b0 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  ^It is not possi
124c0 62 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72  ble for an IS or
124d0 20 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69   IS NOT expressi
124e0 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74  on to evaluate t
124f0 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f  o NULL..^Operato
12500 72 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d  rs [Operator IS]
12510 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b   and [Operator {
12520 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68  IS NOT}] have th
12530 65 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e  e same .preceden
12540 63 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20  ce as [Operator 
12550 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  =]."..<tcl>hd_fr
12560 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20  agment litvalue 
12570 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c  {literal value}<
12580 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61  /tcl>.<h3>Litera
12590 6c 20 56 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70  l Values</h3>.<p
125a0 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  >.^A literal val
125b0 75 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  ue is a constant
125c0 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e   of some kind..^
125d0 4c 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d  Literal values m
125e0 61 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20  ay be integers, 
125f0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
12600 75 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c  umbers, strings,
12610 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73  .BLOBs, or NULLs
12620 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79  .</p>..<p>The sy
12630 6e 74 61 78 20 66 6f 72 20 69 6e 74 65 67 65 72  ntax for integer
12640 20 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f   and floating po
12650 69 6e 74 20 6c 69 74 65 72 61 6c 73 20 28 63 6f  int literals (co
12660 6c 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65  llectively."nume
12670 72 69 63 20 6c 69 74 65 72 61 6c 73 22 29 20 69  ric literals") i
12680 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66  s shown by the f
12690 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d  ollowing diagram
126a0 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62  :</p>..<tcl>Bubb
126b0 6c 65 44 69 61 67 72 61 6d 20 6e 75 6d 65 72 69  leDiagram numeri
126c0 63 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a  c-literal</tcl>.
126d0 0a 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65  .<p>.^(If a nume
126e0 72 69 63 20 6c 69 74 65 72 61 6c 20 68 61 73 20  ric literal has 
126f0 61 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  a decimal point 
12700 6f 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61  or an exponentia
12710 74 69 6f 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65  tion.clause, the
12720 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69  n it is a floati
12730 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c  ng point literal
12740 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 73 20  .  Otherwise is 
12750 69 74 20 69 73 20 61 6e 20 0a 69 6e 74 65 67 65  it is an .intege
12760 72 20 6c 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54  r literal.)^  ^T
12770 68 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72  he "E" character
12780 20 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65   that begins the
12790 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a   exponentiation.
127a0 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61  clause of a floa
127b0 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
127c0 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  al can be either
127d0 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20   upper or lower 
127e0 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20  case..^(The "." 
127f0 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77  character is alw
12800 61 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65  ays used .as the
12810 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65   decimal point e
12820 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c  ven if the local
12830 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66  e setting specif
12840 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73  ies "," for.this
12850 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20   role - the use 
12860 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64  of "," for the d
12870 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75  ecimal point wou
12880 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e  ld result in.syn
12890 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79  tactic ambiguity
128a0 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20  .)^</p>..<p> ^A 
128b0 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20  string constant 
128c0 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63  is formed by enc
128d0 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e  losing the.strin
128e0 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  g in single quot
128f0 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67  es (').  ^A sing
12900 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20  le quote within 
12910 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62  the string can.b
12920 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74  e encoded by put
12930 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20  ting two single 
12940 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20  quotes in a row 
12950 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a  - as in Pascal..
12960 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20  C-style escapes 
12970 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c  using the backsl
12980 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72  ash character ar
12990 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
129a0 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65  because.they are
129b0 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
129c0 4c 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c  L..^BLOB literal
129d0 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74  s are string lit
129e0 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67  erals containing
129f0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74   hexadecimal dat
12a00 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62  a and.preceded b
12a10 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f  y a single "x" o
12a20 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e  r "X" character.
12a30 20 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a    ^(For example:
12a40 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
12a50 65 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43  e><pre>.X'53514C
12a60 36 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f  697465'.</pre></
12a70 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
12a80 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61  p>.^A literal va
12a90 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  lue can also be 
12aa0 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22  the token "NULL"
12ab0 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
12ac0 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61  fragment varpara
12ad0 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61  m parameter para
12ae0 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61  meters {bound pa
12af0 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20  rameter} {bound 
12b00 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c  parameters}</tcl
12b10 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73  >.<h3>Parameters
12b20 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72  </h3>.<p>.A "var
12b30 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d  iable" or "param
12b40 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63  eter" token.spec
12b50 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c  ifies a placehol
12b60 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  der in the expre
12b70 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c  ssion for a .val
12b80 75 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65  ue that is fille
12b90 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20  d in at runtime 
12ba0 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
12bb0 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c  e3_bind_blob() |
12bc0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d   sqlite3_bind()]
12bd0 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b   family of C/C++
12be0 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72   interfaces..Par
12bf0 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65  ameters can take
12c00 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a   several forms:.
12c10 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
12c20 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a  e>.<table>.<tr>.
12c30 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
12c40 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
12c50 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69  b>?</b><i>NNN</i
12c60 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
12c70 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
12c80 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (A question mark
12c90 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e   followed by a n
12ca0 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e  umber <i>NNN</i>
12cb0 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
12cc0 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72  r the.NNN-th par
12cd0 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73  ameter.  NNN mus
12ce0 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  t be between 1 a
12cf0 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  nd [SQLITE_MAX_V
12d00 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e  ARIABLE_NUMBER].
12d10 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  )^.</td>.</tr>.<
12d20 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
12d30 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
12d40 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e  p"><b>?</b></td>
12d50 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
12d60 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73  /td>.<td>^A ques
12d70 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69  tion mark that i
12d80 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
12d90 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74  y a number creat
12da0 65 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77  es a parameter.w
12db0 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65  ith a number one
12dc0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
12dd0 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
12de0 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
12df0 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66  dy assigned..^If
12e00 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   this means the 
12e10 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
12e20 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
12e30 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  .[SQLITE_MAX_VAR
12e40 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69  IABLE_NUMBER], i
12e50 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c  t is an error..<
12e60 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
12e70 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
12e80 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
12e90 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>:</b><i>AAAA</
12ea0 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
12eb0 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
12ec0 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65  ^A colon followe
12ed0 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69  d by an identifi
12ee0 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20  er name holds a 
12ef0 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c  spot for a .[sql
12f00 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
12f10 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70  ter_name|named p
12f20 61 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74  arameter] with t
12f30 68 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20  he name :AAAA.  
12f40 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74  .^(Named paramet
12f50 65 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d  ers are also num
12f60 62 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65  bered. The numbe
12f70 72 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e  r assigned is on
12f80 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74  e greater than.t
12f90 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d  he largest param
12fa0 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65  eter number alre
12fb0 61 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20  ady assigned.)^ 
12fc0 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74  ^If this means t
12fd0 68 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75  he parameter.wou
12fe0 6c 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61  ld be assigned a
12ff0 20 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20   number greater 
13000 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58  than [SQLITE_MAX
13010 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
13020 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f  ], it is.an erro
13030 72 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66  r. To avoid conf
13040 75 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73  usion, it is bes
13050 74 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e  t to avoid mixin
13060 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62  g named and numb
13070 65 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e  ered.parameters.
13080 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
13090 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
130a0 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
130b0 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c  <b>@</b><i>AAAA<
130c0 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
130d0 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
130e0 3e 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77  >^An "at" sign w
130f0 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
13100 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70  e a colon, excep
13110 74 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20  t that the name 
13120 6f 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72  of.the parameter
13130 20 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41   created is @AAA
13140 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  A.</td>.</tr>.<t
13150 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
13160 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
13170 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>$</b><i>AAA
13180 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
13190 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
131a0 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67  td>^A dollar-sig
131b0 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
131c0 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
131d0 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70   also holds a sp
131e0 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70  ot for a named.p
131f0 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68  arameter with th
13200 65 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e  e name $AAAA.  ^
13210 28 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20  (The identifier 
13220 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73  name in this cas
13230 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e  e can include.on
13240 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72  e or more occurr
13250 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e  ences of "::" an
13260 64 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f  d a suffix enclo
13270 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63  sed in "(...)" c
13280 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65  ontaining.any te
13290 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68  xt at all.)^  Th
132a0 69 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65  is syntax is the
132b0 20 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61   form of a varia
132c0 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a  ble name in the.
132d0 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e  [http://www.tcl.
132e0 74 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61  tk/ | Tcl progra
132f0 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e  mming language].
13300 20 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f    The presence.o
13310 66 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65  f this syntax re
13320 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66  sults from the f
13330 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20  act that SQLite 
13340 69 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63  is really a .[Tc
13350 6c 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61  l extension] tha
13360 74 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e  t has escaped in
13370 74 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64  to the wild.</td
13380 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  >.</tr>.</table>
13390 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
133a0 3c 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74  <p>^Parameters t
133b0 68 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69  hat are not assi
133c0 67 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e  gned values usin
133d0 67 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  g.[sqlite3_bind_
133e0 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33  blob() | sqlite3
133f0 5f 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65  _bind()] are tre
13400 61 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70  ated.as NULL.</p
13410 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d  >..<p>^The maxim
13420 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  um parameter num
13430 62 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f  ber is set at co
13440 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68  mpile-time by.th
13450 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  e [SQLITE_MAX_VA
13460 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d  RIABLE_NUMBER] m
13470 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69  acro.  ^(An indi
13480 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65  vidual [database
13490 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20   connections].D 
134a0 63 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d  can reduce its m
134b0 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
134c0 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68   number below th
134d0 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d  e compile-time m
134e0 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65  aximum.using the
134f0 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d   [sqlite3_limit]
13500 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  (D, [SQLITE_LIMI
13510 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  T_VARIABLE_NUMBE
13520 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  R],...) interfac
13530 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  e.)^.</p>..<tcl>
13540 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65  hd_fragment like
13550 20 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63   LIKE ESCAPE</tc
13560 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20  l>.<h3>The LIKE 
13570 61 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f  and GLOB operato
13580 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20  rs</h3>.<p>^The 
13590 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f  LIKE operator do
135a0 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74  es a pattern mat
135b0 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  ching comparison
135c0 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74  . ^The operand.t
135d0 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74  o the right of t
135e0 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
135f0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61   contains the pa
13600 74 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65  ttern and the le
13610 66 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20  ft hand.operand 
13620 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72  contains the str
13630 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61  ing to match aga
13640 69 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e  inst the pattern
13650 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ...<tcl>hd_puts 
13660 22 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62  "^A percent symb
13670 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68  ol (\"%\") in th
13680 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
13690 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65  atches any.seque
136a0 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  nce of zero or m
136b0 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ore characters i
136c0 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e  n the string.  ^
136d0 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c  An underscore.(\
136e0 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b  "_\") in the LIK
136f0 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65  E pattern matche
13700 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61  s any single cha
13710 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74  racter in the.st
13720 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68  ring.  ^(Any oth
13730 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74  er character mat
13740 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69  ches itself or i
13750 74 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63  ts lower/upper c
13760 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28  ase.equivalent (
13770 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73  i.e. case-insens
13780 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e  itive matching).
13790 29 5e 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c  )^  (A bug: ^SQL
137a0 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74  ite only.underst
137b0 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72  ands upper/lower
137c0 20 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20   case for ASCII 
137d0 63 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65  characters by de
137e0 66 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b  fault.  ^The.LIK
137f0 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61  E operator is ca
13800 73 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20  se sensitive by 
13810 64 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63  default for unic
13820 6f 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74  ode characters t
13830 68 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74  hat are.beyond t
13840 68 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20  he ASCII range. 
13850 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74   For example,.^t
13860 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62  he expression <b
13870 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e  >'a'&nbsp;LIKE&n
13880 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54  bsp;'A'</b>.is T
13890 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c  RUE but <b>'&ael
138a0 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e  ig;'&nbsp;LIKE&n
138b0 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62  bsp;'&AElig;'</b
138c0 3e 20 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22  > is FALSE.)<p>"
138d0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74  </tcl>..<p>^If t
138e0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41  he optional ESCA
138f0 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  PE clause is pre
13900 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65  sent, then the e
13910 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77  xpression.follow
13920 69 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b  ing the ESCAPE k
13930 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c  eyword must eval
13940 75 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67  uate to a string
13950 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61   consisting of.a
13960 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
13970 72 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63 74  r. ^This charact
13980 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20 69  er may be used i
13990 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
139a0 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69  rn.to include li
139b0 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72  teral percent or
139c0 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72   underscore char
139d0 61 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63  acters. ^The esc
139e0 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f  ape.character fo
139f0 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63  llowed by a perc
13a00 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20  ent symbol (%), 
13a10 75 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20  underscore (_), 
13a20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74  or a second.inst
13a30 61 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63 61  ance of the esca
13a40 70 65 20 63 68 61 72 61 63 74 65 72 20 69 74 73  pe character its
13a50 65 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69  elf matches a.li
13a60 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79  teral percent sy
13a70 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65  mbol, underscore
13a80 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73  , or a single es
13a90 63 61 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a  cape character,.
13aa0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c  respectively...<
13ab0 70 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b  p>^The infix LIK
13ac0 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d  E operator is im
13ad0 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
13ae0 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61  ling the.applica
13af0 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c  tion-defined SQL
13b00 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65   functions [like
13b10 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
13b20 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69  i>)] or.[like(<i
13b30 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c  >Y</i>,<i>X</i>,
13b40 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c  <i>Z</i>)]</a>.<
13b50 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b  /p>..<p>^The LIK
13b60 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  E operator can b
13b70 65 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73  e made case sens
13b80 69 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a  itive using the.
13b90 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f  [case_sensitive_
13ba0 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70  like pragma].</p
13bb0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
13bc0 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74  ent glob GLOB</t
13bd0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42  cl>.<p>^The GLOB
13be0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d   operator is sim
13bf0 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74  ilar to LIKE but
13c00 20 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66   uses the Unix.f
13c10 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e  ile globbing syn
13c20 74 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64  tax for its wild
13c30 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47  cards.  ^Also, G
13c40 4c 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73  LOB is case.sens
13c50 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49  itive, unlike LI
13c60 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20  KE.  ^Both GLOB 
13c70 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20  and LIKE may be 
13c80 70 72 65 63 65 64 65 64 20 62 79 0a 74 68 65 20  preceded by.the 
13c90 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69  NOT keyword to i
13ca0 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20  nvert the sense 
13cb0 6f 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54  of the test.  ^T
13cc0 68 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f  he infix GLOB .o
13cd0 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65  perator is imple
13ce0 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
13cf0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b  g the function.[
13d00 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  glob(<i>Y</i>,<i
13d10 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e  >X</i>)] and can
13d20 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20   be modified by 
13d30 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20  overriding.that 
13d40 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  function.</p>..<
13d50 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
13d60 72 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74  regexp REGEXP</t
13d70 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45  cl>.<p>^The REGE
13d80 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  XP operator is a
13d90 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20   special syntax 
13da0 66 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29  for the regexp()
13db0 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20  .user function. 
13dc0 20 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73   ^No regexp() us
13dd0 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  er function is d
13de0 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c  efined by defaul
13df0 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20  t.and so use of 
13e00 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61  the REGEXP opera
13e10 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c  tor will normall
13e20 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65  y result in an.e
13e30 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e  rror message.  ^
13e40 49 66 20 61 20 5b 61 70 70 6c 69 63 61 74 69 6f  If a [applicatio
13e50 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75  n-defined SQL fu
13e60 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72  nction] named "r
13e70 65 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20  egexp".is added 
13e80 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61  at run-time, tha
13e90 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  t function will 
13ea0 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64  be called in ord
13eb0 65 72 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  er.to implement 
13ec0 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61  the REGEXP opera
13ed0 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  tor.</p>..<tcl>h
13ee0 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68  d_fragment match
13ef0 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e   MATCH</tcl>.<p>
13f00 5e 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61  ^The MATCH opera
13f10 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c  tor is a special
13f20 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
13f30 6d 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74  match().applicat
13f40 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
13f50 74 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61  tion.  ^The defa
13f60 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63  ult match() func
13f70 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
13f80 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78  ion.raises an ex
13f90 63 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e  ception and is n
13fa0 6f 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c  ot really useful
13fb0 20 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e   for anything..^
13fc0 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63  But extensions c
13fd0 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  an override the 
13fe0 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e  match() function
13ff0 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66   with more.helpf
14000 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c  ul logic.</p>..<
14010 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
14020 62 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c  between BETWEEN<
14030 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45  /tcl>.<h3>The BE
14040 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f  TWEEN operator</
14050 68 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54  h3>.<p>^(The BET
14060 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
14070 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76   logically equiv
14080 61 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20  alent to a pair 
14090 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a  of comparisons..
140a0 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54  "<i>x</i> <b>BET
140b0 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69  WEEN</b> <i>y</i
140c0 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
140d0 7a 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76  z</i>" is .equiv
140e0 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c  alent to ."<i>x<
140f0 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c  /i><b>&gt;=</b><
14100 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f  i>y</i> <b>AND</
14110 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c  b> <i>x</i><b>&l
14120 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22  t;=</b><i>z</i>"
14130 20 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74   except.that wit
14140 68 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c  h BETWEEN, the <
14150 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69  i>x</i> expressi
14160 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75  on is only evalu
14170 61 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68  ated once.)^.^Th
14180 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20  e precedence of 
14190 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  the BETWEEN oper
141a0 61 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65  ator is the same
141b0 20 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e   as the preceden
141c0 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20  ce.as operators 
141d0 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62  <b>==</b> and <b
141e0 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c  >!=</b> and <b>L
141f0 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75  IKE</b> and grou
14200 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  ps left to right
14210 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
14220 65 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65  ent case {CASE e
14230 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e  xpression}</tcl>
14240 0a 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78  .<h3>The CASE ex
14250 70 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70  pression</h3>.<p
14260 3e 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69  >A CASE expressi
14270 6f 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65  on serves a role
14280 20 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54   similar to IF-T
14290 48 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65  HEN-ELSE in othe
142a0 72 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61  r.programming la
142b0 6e 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54  nguages.  ..<p>T
142c0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72  he optional expr
142d0 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75  ession that occu
142e0 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  rs in between th
142f0 65 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61  e CASE keyword a
14300 6e 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45  nd the.first WHE
14310 4e 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c  N keyword is cal
14320 6c 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65  led the "base" e
14330 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72  xpression. ^Ther
14340 65 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20  e are two basic 
14350 66 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53  forms.of the CAS
14360 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68  E expression: th
14370 6f 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20  ose with a base 
14380 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
14390 68 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c  hose without...<
143a0 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74  p>^In a CASE wit
143b0 68 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72  hout a base expr
143c0 65 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45  ession, each WHE
143d0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  N expression is 
143e0 65 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68  evaluated.and th
143f0 65 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64  e result treated
14400 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73   as a boolean, s
14410 74 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65  tarting with the
14420 20 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f   leftmost and co
14430 6e 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20  ntinuing.to the 
14440 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75  right. ^The resu
14450 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65  lt of the CASE e
14460 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
14470 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74   evaluation of t
14480 68 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69  he THEN.expressi
14490 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
144a0 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
144b0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
144c0 20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20   that evaluates 
144d0 74 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  to.true. ^Or, if
144e0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
144f0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N expressions ev
14500 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20  aluate to true, 
14510 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76  the result of.ev
14520 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
14530 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
14540 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
14550 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
14560 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
14570 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
14580 73 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c  ssions are true,
14590 20 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c   then the overal
145a0 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
145b0 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65  ...<p>^A NULL re
145c0 73 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72  sult is consider
145d0 65 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65  ed untrue when e
145e0 76 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74  valuating WHEN t
145f0 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  erms...<p>^In a 
14600 43 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65  CASE with a base
14610 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
14620 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
14630 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75   is evaluated ju
14640 73 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20  st.once and the 
14650 72 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72  result is compar
14660 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65  ed against the e
14670 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63  valuation of eac
14680 68 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69  h WHEN .expressi
14690 6f 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  on from left to 
146a0 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75  right. ^The resu
146b0 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65  lt of the CASE e
146c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
146d0 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20   .evaluation of 
146e0 74 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73  the THEN express
146f0 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70  ion that corresp
14700 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73  onds to the firs
14710 74 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  t WHEN.expressio
14720 6e 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  n for which the 
14730 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
14740 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65  ue. ^Or, if none
14750 20 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70   of the WHEN.exp
14760 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
14770 65 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75  e to a value equ
14780 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
14790 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72  xpression, the r
147a0 65 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74  esult.of evaluat
147b0 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
147c0 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e  ression, if any.
147d0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
147e0 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
147f0 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65   and.none of the
14800 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
14810 73 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75  s produce a resu
14820 6c 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  lt equal to the 
14830 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
14840 0a 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73  .the overall res
14850 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70  ult is NULL...<p
14860 3e 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  >^When comparing
14870 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
14880 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45  on against a WHE
14890 4e 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68  N expression, th
148a0 65 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67  e same.collating
148b0 20 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e   sequence, affin
148c0 69 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61  ity, and NULL-ha
148d0 6e 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70  ndling rules app
148e0 6c 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73  ly as if the.bas
148f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  e expression and
14900 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
14910 20 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c   are respectivel
14920 79 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a  y the left- and.
14930 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
14940 6e 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c  nds of an <big><
14950 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70  b>=</b></big> op
14960 65 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20  erator.</p> ^If 
14970 74 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73  the base .expres
14980 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65  sion is NULL the
14990 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
149a0 74 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61  the CASE is alwa
149b0 79 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f  ys the result .o
149c0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
149d0 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
149e0 20 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f   if it exists, o
149f0 72 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65  r NULL if it doe
14a00 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68  s not...<p>^Both
14a10 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41   forms of the CA
14a20 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  SE expression us
14a30 65 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74  e lazy, or short
14a40 2d 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75  -circuit, .evalu
14a50 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ation...<p>^(The
14a60 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
14a70 20 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c   between the fol
14a80 6c 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20  lowing two CASE 
14a90 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74  expressions is t
14aa0 68 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69  hat .the <i>x</i
14ab0 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
14ac0 65 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c  evaluated exactl
14ad0 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69  y once in the fi
14ae0 72 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20  rst example but 
14af0 0a 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61  .might be evalua
14b00 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  ted multiple tim
14b10 65 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64  es in the second
14b20 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69  :..<ul><pre>.<li
14b30 3e 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20  >CASE x WHEN w1 
14b40 54 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20  THEN r1 WHEN w2 
14b50 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20  THEN r2 ELSE r3 
14b60 45 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45  END.<li>CASE WHE
14b70 4e 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57  N x=w1 THEN r1 W
14b80 48 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32  HEN x=w2 THEN r2
14b90 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70   ELSE r3 END.</p
14ba0 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63  re></ul>)^...<tc
14bb0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
14bc0 5f 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72  _op {IN operator
14bd0 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  } {NOT IN operat
14be0 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  or}</tcl>.<h3>Th
14bf0 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20  e IN and NOT IN 
14c00 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c  operators</h3>.<
14c10 70 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  p>^The IN and NO
14c20 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74  T IN operators t
14c30 61 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61  ake a single sca
14c40 6c 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  lar operand on t
14c50 68 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65  he.left and a ve
14c60 63 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20  ctor operand on 
14c70 74 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64  the right.formed
14c80 20 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20   by an explicit 
14c90 6c 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20  list of zero or 
14ca0 6d 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20  more scalars or 
14cb0 62 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62  by a .single sub
14cc0 71 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65  query..^When the
14cd0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f   right operand o
14ce0 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
14cf0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  N operator is a 
14d00 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75  subquery, the.su
14d10 62 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65  bquery must have
14d20 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74   a single result
14d30 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74   column..^When t
14d40 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
14d50 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74   is an empty set
14d60 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
14d70 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  IN is false and 
14d80 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f  the.result of NO
14d90 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65  T IN is true, re
14da0 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
14db0 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64  left operand and
14dc0 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66   even if the.lef
14dd0 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  t operand is NUL
14de0 4c 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20  L..^(The result 
14df0 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
14e00 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64  IN operator is d
14e10 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
14e20 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69   following.matri
14e30 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61  x:..<center>.<ta
14e40 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  ble border=1>.<t
14e50 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72  r>.<th>Left oper
14e60 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a  and <br>is NULL.
14e70 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e  <th>Right operan
14e80 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e  d <br>contains N
14e90 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
14ea0 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20  erand <br>is an 
14eb0 65 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65  empty set.<th>Le
14ec0 66 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64  ft operand found
14ed0 20 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68   <br>within righ
14ee0 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65  t operand.<th>Re
14ef0 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f  sult of <br>IN o
14f00 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75  perator.<th>Resu
14f10 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e  lt of <br>NOT IN
14f20 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c   operator.<tr>.<
14f30 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
14f40 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
14f50 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
14f60 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
14f70 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14f80 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
14f90 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
14fa0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14fb0 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
14fc0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
14fd0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
14fe0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14ff0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
15000 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
15010 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
15020 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
15030 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20  nter">false.<td 
15040 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74  align="center">t
15050 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  rue.<tr>.<td ali
15060 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
15070 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
15080 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
15090 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
150a0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
150b0 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
150c0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
150d0 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e  ">true.<td align
150e0 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
150f0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
15100 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
15110 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
15120 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
15130 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
15140 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
15150 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
15160 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d  >NULL.<td align=
15170 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
15180 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
15190 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
151a0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
151b0 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
151c0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
151d0 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
151e0 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
151f0 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
15200 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
15210 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
15220 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  >NULL.</table>.<
15230 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e  /center>)^..<p>^
15240 4e 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65  Note that SQLite
15250 20 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65   allows the pare
15260 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
15270 66 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20  f scalar values 
15280 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e  on.the right-han
15290 64 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20  d side of an IN 
152a0 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
152b0 6f 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74  or to be an empt
152c0 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20  y list but.most 
152d0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
152e0 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  se database engi
152f0 6e 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39  nes and the SQL9
15300 32 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69  2 standard requi
15310 72 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63  re.the list to c
15320 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20  ontain at least 
15330 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e  one element.</p>
15340 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
15350 6e 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53  nt in_op {EXISTS
15360 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20   operator} {NOT 
15370 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d  EXISTS operator}
15380 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45  </tcl>.<h3>The E
15390 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f  XISTS operator</
153a0 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49  h3>..<p>^The EXI
153b0 53 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77  STS operator alw
153c0 61 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ays evaluates to
153d0 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65   one of the inte
153e0 67 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e  ger values 0 .an
153f0 64 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69  d 1. ^If executi
15400 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  ng the SELECT st
15410 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65  atement specifie
15420 64 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68  d as the right-h
15430 61 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20  and .operand of 
15440 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  the EXISTS opera
15450 74 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  tor would return
15460 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77   one or more row
15470 73 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53  s, then the.EXIS
15480 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  TS operator eval
15490 75 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20  uates to 1. ^If 
154a0 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45  executing the SE
154b0 4c 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72  LECT would retur
154c0 6e 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c  n.no rows at all
154d0 2c 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54  , then the EXIST
154e0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
154f0 61 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e  ates to 0. ..<p>
15500 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  ^The number of c
15510 6f 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72  olumns in each r
15520 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ow returned by t
15530 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
15540 65 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64  ent.(if any) and
15550 20 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61   the specific va
15560 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61  lues returned ha
15570 76 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20  ve no effect on 
15580 74 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74  the results.of t
15590 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
155a0 6f 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c  or. ^In particul
155b0 61 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e  ar, rows contain
155c0 69 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ing NULL values 
155d0 61 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20  are.not handled 
155e0 61 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20  any differently 
155f0 66 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75  from rows withou
15600 74 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a  t NULL values...
15610 3c 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75  <h3>Scalar Subqu
15620 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  eries</h3>..<p>^
15630 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  A [SELECT] state
15640 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ment enclosed in
15650 20 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79   parentheses may
15660 20 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61   appear as a sca
15670 6c 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41  lar.quantity. ^A
15680 20 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61   [SELECT] used a
15690 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74  s a scalar quant
156a0 69 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20  ity must return 
156b0 61 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74  a result set.wit
156c0 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  h a single colum
156d0 6e 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  n. ^The result o
156e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
156f0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
15700 20 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e   the.only column
15710 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f   in the first ro
15720 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
15730 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
15740 6e 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45  nt. ^If the SELE
15750 43 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20  CT .yields more 
15760 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20  than one result 
15770 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66  row, all rows af
15780 74 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72  ter the first ar
15790 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74  e ignored. ^If.t
157a0 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73  he SELECT yields
157b0 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74   no rows, then t
157c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
157d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55  expression is NU
157e0 4c 4c 2e 0a 0a 3c 70 3e 5e 41 6c 6c 20 74 79 70  LL...<p>^All typ
157f0 65 73 20 6f 66 20 5b 53 45 4c 45 43 54 5d 20 73  es of [SELECT] s
15800 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64  tatement, includ
15810 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 61 6e  ing aggregate an
15820 64 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  d compound SELEC
15830 54 0a 71 75 65 72 69 65 73 20 28 71 75 65 72 69  T.queries (queri
15840 65 73 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73  es with keywords
15850 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 20 45   like UNION or E
15860 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77  XCEPT) are allow
15870 65 64 20 61 73 20 73 63 61 6c 61 72 0a 73 75 62  ed as scalar.sub
15880 71 75 65 72 69 65 73 2e 0a 0a 3c 68 33 3e 54 61  queries...<h3>Ta
15890 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73  ble Column Names
158a0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c  </h3>..<p>^A col
158b0 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20  umn name can be 
158c0 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73  any of the names
158d0 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
158e0 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
158f0 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20  tatement or one 
15900 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
15910 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
15920 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c  iers: "<b>ROWID<
15930 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62  /b>",."<b>OID</b
15940 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49  >", or "<b>_ROWI
15950 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 73 65 20  D_</b>"..^These 
15960 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
15970 65 72 73 20 61 6c 6c 20 64 65 73 63 72 69 62 65  ers all describe
15980 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74 65   the.unique inte
15990 67 65 72 20 6b 65 79 20 28 74 68 65 20 5b 72 6f  ger key (the [ro
159a0 77 69 64 5d 29 20 61 73 73 6f 63 69 61 74 65 64  wid]) associated
159b0 20 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77   with every .row
159c0 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 2e   of every table.
159d0 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20 69 64  .^The special id
159e0 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72  entifiers only r
159f0 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20  efer to the row 
15a00 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52 45 41  key if the [CREA
15a10 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
15a20 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  ent does not def
15a30 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d  ine a real colum
15a40 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
15a50 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64  name..^The rowid
15a60 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79   can be used any
15a70 77 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a  where a regular.
15a80 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73  column can be us
15a90 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b  ed.</p>..<p>^A [
15aa0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
15ab0 74 20 75 73 65 64 20 61 73 20 65 69 74 68 65 72  t used as either
15ac0 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
15ad0 72 79 20 6f 72 20 61 73 20 74 68 65 20 0a 72 69  ry or as the .ri
15ae0 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
15af0 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49   of an IN, NOT I
15b00 4e 20 6f 72 20 45 58 49 53 54 53 20 65 78 70 72  N or EXISTS expr
15b10 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61  ession may conta
15b20 69 6e 20 0a 72 65 66 65 72 65 6e 63 65 73 20 74  in .references t
15b30 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  o columns in the
15b40 20 6f 75 74 65 72 20 71 75 65 72 79 2e 20 53 75   outer query. Su
15b50 63 68 20 61 20 73 75 62 71 75 65 72 79 20 69 73  ch a subquery is
15b60 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72   known as.a corr
15b70 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 2e  elated subquery.
15b80 20 5e 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73   ^A correlated s
15b90 75 62 71 75 65 72 79 20 69 73 20 72 65 65 76 61  ubquery is reeva
15ba0 6c 75 61 74 65 64 20 65 61 63 68 20 74 69 6d 65  luated each time
15bb0 0a 69 74 73 20 72 65 73 75 6c 74 20 69 73 20 72  .its result is r
15bc0 65 71 75 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63  equired. ^An unc
15bd0 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
15be0 72 79 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  ry is evaluated 
15bf0 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68  only once.and th
15c00 65 20 72 65 73 75 6c 74 20 72 65 75 73 65 64 20  e result reused 
15c10 61 73 20 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c  as necessary...<
15c20 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
15c30 63 61 73 74 65 78 70 72 20 7b 43 41 53 54 20 65  castexpr {CAST e
15c40 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e  xpression}</tcl>
15c50 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65 73  .<h3>CAST expres
15c60 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  sions</h3>..<p>A
15c70 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e   CAST expression
15c80 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76   is used to conv
15c90 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ert the value of
15ca0 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 74 6f   &lt;expr&gt; to
15cb0 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73   .a different [s
15cc0 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 69 6e  torage class] in
15cd0 20 61 20 73 69 6d 69 6c 61 72 20 77 61 79 20 74   a similar way t
15ce0 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
15cf0 20 74 68 61 74 20 74 61 6b 65 73 0a 70 6c 61 63   that takes.plac
15d00 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e  e when a [column
15d10 20 61 66 66 69 6e 69 74 79 5d 20 69 73 20 61 70   affinity] is ap
15d20 70 6c 69 65 64 20 74 6f 20 61 20 76 61 6c 75 65  plied to a value
15d30 2e 20 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 6f  . ^Application o
15d40 66 20 61 20 43 41 53 54 0a 65 78 70 72 65 73 73  f a CAST.express
15d50 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74  ion is different
15d60 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   to application 
15d70 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 61 66 66 69  of a column affi
15d80 6e 69 74 79 2c 20 61 73 0a 77 69 74 68 20 61 20  nity, as.with a 
15d90 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20  CAST expression 
15da0 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73  the storage clas
15db0 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  s conversion is 
15dc0 66 6f 72 63 65 64 20 65 76 65 6e 20 0a 69 66 20  forced even .if 
15dd0 69 74 20 69 73 20 6c 6f 73 73 79 20 61 6e 64 20  it is lossy and 
15de0 69 72 72 72 65 76 65 72 73 69 62 6c 65 2e 0a 0a  irrreversible...
15df0 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c 75 65  <p>^If the value
15e00 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67 74 3b   of &lt;expr&gt;
15e10 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74   is NULL, then t
15e20 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
15e30 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e   CAST.expression
15e40 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e   is also NULL. ^
15e50 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 73  Otherwise, the s
15e60 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66 20  torage class of 
15e70 74 68 65 20 72 65 73 75 6c 74 20 76 61 6c 75 65  the result value
15e80 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .is determined b
15e90 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b  y applying the [
15ea0 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d  rules for determ
15eb0 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66  ining column aff
15ec0 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c  inity] to.the &l
15ed0 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20  t;type-name&gt; 
15ee0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
15ef0 74 20 6f 66 20 74 68 65 20 43 41 53 54 20 65 78  t of the CAST ex
15f00 70 72 65 73 73 69 6f 6e 2e 0a 0a 3c 74 61 62 6c  pression...<tabl
15f10 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
15f20 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69 74 79  .  <th> Affinity
15f30 20 6f 66 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d   of &lt;type-nam
15f40 65 26 67 74 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e  e&gt;.  <th> Con
15f50 76 65 72 73 69 6f 6e 20 50 72 6f 63 65 73 73 69  version Processi
15f60 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e  ng.<tr>.  <td> N
15f70 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e 43 61 73  ONE .  <td> ^Cas
15f80 74 69 6e 67 20 61 20 76 61 6c 75 65 20 74 6f 20  ting a value to 
15f90 61 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26  a &lt;type-name&
15fa0 67 74 3b 20 77 69 74 68 20 6e 6f 20 61 66 66 69  gt; with no affi
15fb0 6e 69 74 79 20 63 61 75 73 65 73 20 74 68 65 20  nity causes the 
15fc0 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f  value to.  be co
15fd0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42  nverted into a B
15fe0 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74  LOB.  ^Casting t
15ff0 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74  o a BLOB consist
16000 73 20 6f 66 20 66 69 72 73 74 20 63 61 73 74 69  s of first casti
16010 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74  ng.  the value t
16020 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65  o TEXT in the [e
16030 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20  ncoding] of the 
16040 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
16050 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65  ion, then.  inte
16060 72 70 72 65 74 69 6e 67 20 74 68 65 20 72 65 73  rpreting the res
16070 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71 75  ulting byte sequ
16080 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69  ence as a BLOB i
16090 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54 45 58  nstead of as TEX
160a0 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  T...<tr>.  <td> 
160b0 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20  TEXT.  <td> ^To 
160c0 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75  cast a BLOB valu
160d0 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73  e to TEXT, the s
160e0 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
160f0 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68   that make up th
16100 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65  e.  BLOB is inte
16110 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 20  rpreted as text 
16120 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68  encoded using th
16130 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
16140 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43  ing..  <p>.   ^C
16150 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45  asting an INTEGE
16160 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20  R or REAL value 
16170 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72  into TEXT render
16180 73 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 69  s the value as i
16190 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69  f via .    [sqli
161a0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20  te3_snprintf()] 
161b0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
161c0 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75  resulting TEXT u
161d0 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e  ses the [encodin
161e0 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61  g] of.    the da
161f0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
16200 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20  n...<tr>.  <td> 
16210 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65  REAL.  <td> ^Whe
16220 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42  n casting a BLOB
16230 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c   value to a REAL
16240 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66  , the value is f
16250 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74  irst converted t
16260 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a  o.        TEXT..
16270 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20         <p>^When 
16280 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76  casting a TEXT v
16290 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68  alue to REAL, th
162a0 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62  e longest possib
162b0 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20  le prefix of.   
162c0 20 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74       the value t
162d0 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
162e0 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
162f0 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
16300 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
16310 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
16320 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
16330 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
16340 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
16350 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
16360 45 58 54 20 76 61 6c 75 65 20 61 72 65 20 69 67  EXT value are ig
16370 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65  nored when conve
16380 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rging from TEXT 
16390 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68  to REAL. ^(If th
163a0 65 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e  ere is.        n
163b0 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61  o prefix that ca
163c0 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  n be interpreted
163d0 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65   as a real numbe
163e0 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  r, the result of
163f0 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e   the.        con
16400 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29  version is 0.0.)
16410 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49  ^..<tr>.  <td> I
16420 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57  NTEGER.  <td> ^W
16430 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
16440 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45  OB value to INTE
16450 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69  GER, the value i
16460 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65  s first converte
16470 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58  d to.        TEX
16480 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68  T..       <p>^Wh
16490 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58  en casting a TEX
164a0 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47  T value to INTEG
164b0 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  ER, the longest 
164c0 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
164d0 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
164e0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
164f0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
16500 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
16510 72 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66  r is extracted f
16520 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20  rom.        the 
16530 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74  TEXT value and t
16540 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e  he remainder ign
16550 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69  ored. ^Any leadi
16560 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65  ng spaces in the
16570 0a 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61  .        TEXT va
16580 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74  lue when convert
16590 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f  ing from TEXT to
165a0 20 49 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e   INTEGER are ign
165b0 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a  ored. ^If there.
165c0 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72          is no pr
165d0 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
165e0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
165f0 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
16600 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20  r, the result.  
16610 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
16620 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 0a 0a 20  version is 0... 
16630 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20       <p>^A cast 
16640 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20  of a REAL value 
16650 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20  into an INTEGER 
16660 77 69 6c 6c 20 74 72 75 6e 63 61 74 65 20 74 68  will truncate th
16670 65 20 66 72 61 63 74 69 6f 6e 61 6c 0a 20 20 20  e fractional.   
16680 20 20 20 70 61 72 74 20 6f 66 20 74 68 65 20 52     part of the R
16690 45 41 4c 2e 20 20 5e 49 66 20 61 6e 20 52 45 41  EAL.  ^If an REA
166a0 4c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74  L is too large t
166b0 6f 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  o be represented
166c0 20 61 73 20 61 6e 20 0a 20 20 20 20 20 20 49 4e   as an .      IN
166d0 54 45 47 45 52 20 74 68 65 6e 20 74 68 65 20 72  TEGER then the r
166e0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73  esult of the cas
166f0 74 20 69 73 20 74 68 65 20 6c 61 72 67 65 73 74  t is the largest
16700 20 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65   negative intege
16710 72 3a 20 0a 20 20 20 20 20 20 2d 39 32 32 33 33  r: .      -92233
16720 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 0a  72036854775808..
16730 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d  .<tr>.  <td> NUM
16740 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43 61 73  ERIC.  <td> ^Cas
16750 74 69 6e 67 20 61 20 54 45 58 54 20 6f 72 20 42  ting a TEXT or B
16760 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e  LOB value into N
16770 55 4d 45 52 49 43 20 66 69 72 73 74 20 64 6f 65  UMERIC first doe
16780 73 20 61 20 66 6f 72 63 65 64 0a 20 20 20 63 6f  s a forced.   co
16790 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45  nversion into RE
167a0 41 4c 20 62 75 74 20 74 68 65 6e 20 66 75 72 74  AL but then furt
167b0 68 65 72 20 63 6f 6e 76 65 72 74 73 20 74 68 65  her converts the
167c0 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54   result into INT
167d0 45 47 45 52 20 69 66 0a 20 20 20 61 6e 64 20 6f  EGER if.   and o
167e0 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e 76 65  nly if the conve
167f0 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20  rsion from REAL 
16800 74 6f 20 49 4e 54 45 47 45 52 20 69 73 20 6c 6f  to INTEGER is lo
16810 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72  ssless and rever
16820 73 69 62 6c 65 2e 0a 20 20 20 54 68 69 73 20 69  sible..   This i
16830 73 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e 74 65  s the only conte
16840 78 74 20 69 6e 20 53 51 4c 69 74 65 20 77 68 65  xt in SQLite whe
16850 72 65 20 74 68 65 20 4e 55 4d 45 52 49 43 20 61  re the NUMERIC a
16860 6e 64 20 49 4e 54 45 47 45 52 20 5b 61 66 66 69  nd INTEGER [affi
16870 6e 69 74 69 65 73 5d 0a 20 20 20 62 65 68 61 76  nities].   behav
16880 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 0a 20  e differently.. 
16890 20 20 3c 70 3e 20 5e 43 61 73 74 69 6e 67 20 61    <p> ^Casting a
168a0 20 52 45 41 4c 20 6f 72 20 49 4e 54 45 47 45 52   REAL or INTEGER
168b0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49   value to NUMERI
168c0 43 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76  C is a no-op, ev
168d0 65 6e 20 69 66 20 61 20 72 65 61 6c 0a 20 20 20  en if a real.   
168e0 76 61 6c 75 65 20 63 6f 75 6c 64 20 62 65 20 6c  value could be l
168f0 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
16900 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
16910 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62  r...</tr>..</tab
16920 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68  le>..<p>^Note th
16930 61 74 20 74 68 65 20 72 65 73 75 6c 74 20 66 72  at the result fr
16940 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 6e  om casting any n
16950 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  on-BLOB value in
16960 74 6f 20 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74  to a .BLOB and t
16970 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63  he result from c
16980 61 73 74 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20  asting any BLOB 
16990 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e  value into a non
169a0 2d 42 4c 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20  -BLOB value.may 
169b0 62 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 70  be different dep
169c0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
169d0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b  r the database [
169e0 65 6e 63 6f 64 69 6e 67 5d 20 69 73 20 55 54 46  encoding] is UTF
169f0 2d 38 2c 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72  -8,.UTF-16be, or
16a00 20 55 54 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63   UTF-16le....<tc
16a10 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f  l>hd_fragment bo
16a20 6f 6c 65 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65  oleanexpr {boole
16a30 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f  an expression}</
16a40 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e  tcl>.<h3>Boolean
16a50 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
16a60 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61  >..<p>The SQL la
16a70 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20  nguage features 
16a80 73 65 76 65 72 61 6c 20 63 6f 6e 74 65 78 74 73  several contexts
16a90 20 77 68 65 72 65 20 61 6e 20 65 78 70 72 65 73   where an expres
16aa0 73 69 6f 6e 20 69 73 20 0a 65 76 61 6c 75 61 74  sion is .evaluat
16ab0 65 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  ed and the resul
16ac0 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  t converted to a
16ad0 20 62 6f 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f   boolean (true o
16ae0 72 20 66 61 6c 73 65 29 20 76 61 6c 75 65 2e 20  r false) value. 
16af0 54 68 65 73 65 0a 63 6f 6e 74 65 78 74 73 20 61  These.contexts a
16b00 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20  re:..  <ul>.    
16b10 3c 6c 69 3e 20 74 68 65 20 57 48 45 52 45 20 63  <li> the WHERE c
16b20 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
16b30 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
16b40 45 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ETE statement,. 
16b50 20 20 20 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f     <li> the ON o
16b60 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  r USING clause o
16b70 66 20 61 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45  f a join in a SE
16b80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a  LECT statement,.
16b90 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 48 41 56      <li> the HAV
16ba0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
16bb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16bc0 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  ,.    <li> the W
16bd0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 6e  HEN clause of an
16be0 20 53 51 4c 20 74 72 69 67 67 65 72 2c 20 61 6e   SQL trigger, an
16bf0 64 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  d.    <li> the W
16c00 48 45 4e 20 63 6c 61 75 73 65 20 6f 72 20 63 6c  HEN clause or cl
16c10 61 75 73 65 73 20 6f 66 20 73 6f 6d 65 20 43 41  auses of some CA
16c20 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a  SE expressions..
16c30 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f    </ul>..<p>^(To
16c40 20 63 6f 6e 76 65 72 74 20 74 68 65 20 72 65 73   convert the res
16c50 75 6c 74 73 20 6f 66 20 61 6e 20 53 51 4c 20 65  ults of an SQL e
16c60 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 61 20 62  xpression to a b
16c70 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 20 53 51  oolean value, SQ
16c80 4c 69 74 65 0a 66 69 72 73 74 20 63 61 73 74 73  Lite.first casts
16c90 20 74 68 65 20 72 65 73 75 6c 74 20 74 6f 20 61   the result to a
16ca0 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69   NUMERIC value i
16cb0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
16cc0 73 20 61 20 0a 5b 43 41 53 54 20 65 78 70 72 65  s a .[CAST expre
16cd0 73 73 69 6f 6e 5d 2e 20 41 20 4e 55 4c 4c 20 6f  ssion]. A NULL o
16ce0 72 20 7a 65 72 6f 20 76 61 6c 75 65 20 28 69 6e  r zero value (in
16cf0 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
16d00 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
16d10 20 69 73 0a 63 6f 6e 73 69 64 65 72 65 64 20 74   is.considered t
16d20 6f 20 62 65 20 66 61 6c 73 65 2e 20 41 6c 6c 20  o be false. All 
16d30 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72 65  other values are
16d40 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
16d50 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20 65 78  .)^..<p>^(For ex
16d60 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c 75 65  ample, the value
16d70 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30 2c 20  s NULL, 0.0, 0, 
16d80 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20 27 30  'english' and '0
16d90 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 69 64  ' are all consid
16da0 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c 73 65  ered.to be false
16db0 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31 2c 20  .)^ ^(Values 1, 
16dc0 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31 20 61  1.0, 0.1, -0.1 a
16dd0 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20 61 72  nd '1english' ar
16de0 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
16df0 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c 68 33  .be true.)^..<h3
16e00 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a  >Functions</h3>.
16e10 3c 70 3e 5e 42 6f 74 68 20 5b 63 6f 72 65 66 75  <p>^Both [corefu
16e20 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b  nc|simple] and [
16e30 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74  aggfunc|aggregat
16e40 65 5d 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  e] functions are
16e50 20 73 75 70 70 6f 72 74 65 64 2e 0a 28 46 6f 72   supported..(For
16e60 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75   presentation pu
16e70 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66  rposes, simple f
16e80 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72  unctions are fur
16e90 74 68 65 72 20 73 75 62 64 69 76 69 64 65 64 20  ther subdivided 
16ea0 69 6e 74 6f 0a 5b 63 6f 72 65 66 75 6e 63 20 7c  into.[corefunc |
16eb0 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d   core functions]
16ec0 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 20 7c   and [datefunc |
16ed0 20 64 61 74 65 2d 74 69 6d 65 20 66 75 6e 63 74   date-time funct
16ee0 69 6f 6e 73 5d 2e 29 0a 5e 41 20 73 69 6d 70 6c  ions].).^A simpl
16ef0 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62  e function can b
16f00 65 20 75 73 65 64 20 69 6e 20 61 6e 79 20 65 78  e used in any ex
16f10 70 72 65 73 73 69 6f 6e 2e 20 20 5e 53 69 6d 70  pression.  ^Simp
16f20 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 74  le functions ret
16f30 75 72 6e 0a 61 20 72 65 73 75 6c 74 20 69 6d 6d  urn.a result imm
16f40 65 64 69 61 74 65 6c 79 20 62 61 73 65 64 20 6f  ediately based o
16f50 6e 20 74 68 65 69 72 20 69 6e 70 75 74 73 2e 20  n their inputs. 
16f60 20 5e 41 67 67 72 65 67 61 74 65 20 66 75 6e 63   ^Aggregate func
16f70 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20 62  tions.may only b
16f80 65 20 75 73 65 64 20 69 6e 20 61 20 53 45 4c 45  e used in a SELE
16f90 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  CT statement.  ^
16fa0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
16fb0 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68 65 69  ons compute.thei
16fc0 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73 73 20  r result across 
16fd0 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65 20  all rows of the 
16fe0 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a  result set.</p>.
16ff0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
17000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17040 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
17050 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63  ore Functions} c
17060 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75  orefunc {*corefu
17070 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64 65 66  nc}.proc funcdef
17080 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
17090 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64 5f 70  s desc} {.  hd_p
170a0 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72 65 67  uts {<tr>}.  reg
170b0 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b  sub -all {\s+} [
170c0 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79 6e  string trim $syn
170d0 74 61 78 5d 20 7b 3c 62 72 3e 3c 2f 62 72 3e 7d  tax] {<br></br>}
170e0 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
170f0 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b   -all {\(([^*)]+
17100 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c  )\)} $syntax {(<
17110 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61  i>\1</i>)} synta
17120 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
17130 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69  {,} $syntax {</i
17140 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20  >,<i>} syntax.  
17150 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e  regsub -all {<i>
17160 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e  \.\.\.</i>} $syn
17170 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78  tax {...} syntax
17180 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64 20  .  hd_puts "<td 
17190 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61  valign=\"top\" a
171a0 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77  lign=\"right\" w
171b0 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a 20  idth=\"120\">". 
171c0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b   if {[llength $k
171d0 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20  eywords]==0} {. 
171e0 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f     regexp {[a-z_
171f0 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65  ]+} $syntax name
17200 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74  .    hd_fragment
17210 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24   $name *$name "$
17220 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e  {name}() SQL fun
17230 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20  ction".  } else 
17240 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61  {.    set fragna
17250 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77  me [lindex $keyw
17260 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73  ords 0].    regs
17270 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d  ub -all {[^a-z]}
17280 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72   $fragname {} fr
17290 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  agname.    hd_fr
172a0 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65  agment $fragname
172b0 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  .    eval hd_key
172c0 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61  words [string ma
172d0 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77  p {\n { }} $keyw
172e0 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70  ords].  }.  hd_p
172f0 75 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74 64  uts "$syntax</td
17300 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74  >".  hd_puts {<t
17310 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d  d valign="top">}
17320 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64  .  hd_resolve $d
17330 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  esc.  hd_puts {<
17340 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74  /td></tr>}.}.</t
17350 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  cl>..<p>The core
17360 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
17370 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
17380 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
17390 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61   .[datefunc | Da
173a0 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75  te &amp; Time fu
173b0 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67  nctions] and.[ag
173c0 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74  gfunc | aggregat
173d0 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65  e functions] are
173e0 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61   documented sepa
173f0 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c  rately.  An.appl
17400 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69  ication may defi
17410 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75  ne additional.fu
17420 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
17430 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74  in C and added t
17440 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
17450 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20  ngine using.the 
17460 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
17470 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e  function()] API.
17480 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
17490 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
174a0 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63  g=10>.<tcl>.func
174b0 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20  def {abs(X)} {} 
174c0 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29 20  {.  ^The abs(X) 
174d0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
174e0 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
174f0 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72  lue of the numer
17500 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e  ic.  argument X.
17510 20 20 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e    ^Abs(X) return
17520 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e  s NULL if X is N
17530 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29  ULL. .  ^(Abs(X)
17540 20 72 65 74 75 72 6e 20 30 2e 30 20 69 66 20 58   return 0.0 if X
17550 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
17560 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e  blob.  that cann
17570 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
17580 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  to a numeric val
17590 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20  ue.)^  ^If X is 
175a0 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d  the .  integer -
175b0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
175c0 38 30 37 20 74 68 65 6e 20 61 62 73 28 58 29 20  807 then abs(X) 
175d0 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
175e0 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72  r overflow.  err
175f0 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20 69  or since there i
17600 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20  s no equivalent 
17610 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74 20  positive 64-bit 
17620 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76  two complement v
17630 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  alue..}..funcdef
17640 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20   {changes()} {} 
17650 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73  {.  ^The changes
17660 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
17670 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
17680 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  f database rows 
17690 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67 65  that were change
176a0 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20  d.  or inserted 
176b0 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
176c0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20  e most recently 
176d0 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54  completed INSERT
176e0 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55  , DELETE,.  or U
176f0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c  PDATE statement,
17700 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74   exclusive of st
17710 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65  atements in lowe
17720 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73  r-level triggers
17730 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73  ..  ^The changes
17740 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
17750 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
17760 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
17770 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
17780 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  C++ function and
17790 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74   hence follows t
177a0 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f  he same rules fo
177b0 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67  r counting chang
177c0 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  es..}..funcdef {
177d0 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e  coalesce(X,Y,...
177e0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
177f0 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69  oalesce() functi
17800 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
17810 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e  y of its first n
17820 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
17830 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61  , or.  NULL if a
17840 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ll arguments are
17850 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63   NULL.  ^Coalesc
17860 65 28 29 20 6d 75 73 74 20 62 65 20 61 74 20 6c  e() must be at l
17870 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65  east .  2 argume
17880 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  nts..}..funcdef 
17890 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b  {glob(X,Y)} {} {
178a0 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59  .  ^The glob(X,Y
178b0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
178c0 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a  uivalent to the.
178d0 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62    expression "<b
178e0 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a  >Y GLOB X</b>"..
178f0 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
17900 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74  X and Y argument
17910 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20 69  s are reversed i
17920 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e  n the glob() fun
17930 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65  ction.  relative
17940 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47   to the infix [G
17950 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  LOB] operator.. 
17960 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65   ^If the [sqlite
17970 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
17980 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69  n()] interface i
17990 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72  s used to.  over
179a0 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c  ride the glob(X,
179b0 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  Y) function with
179c0 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
179d0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
179e0 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d  hen.  the [GLOB]
179f0 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69   operator will i
17a00 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e  nvoke the altern
17a10 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61  ative implementa
17a20 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  tion..}..funcdef
17a30 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b   {ifnull(X,Y)} {
17a40 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c  } {.  ^The ifnul
17a50 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  l() function ret
17a60 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
17a70 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  ts first non-NUL
17a80 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20  L argument, or. 
17a90 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72   NULL if both ar
17aa0 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c  guments are NULL
17ab0 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73  .  ^Ifnull() mus
17ac0 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20 32  t have exactly 2
17ad0 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54   arguments..  ^T
17ae0 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63  he ifnull() func
17af0 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
17b00 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28  nt to [coalesce(
17b10 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67 75  )] with two argu
17b20 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ments..}..funcde
17b30 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a  f {hex(X)} {} {.
17b40 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e    ^The hex() fun
17b50 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73  ction interprets
17b60 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73   its argument as
17b70 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75   a BLOB and retu
17b80 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
17b90 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70 65  hich is the uppe
17ba0 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69 6d  r-case hexadecim
17bb0 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20  al rendering of 
17bc0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20  the content of. 
17bd0 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66   that blob..}..f
17be0 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73  uncdef {last_ins
17bf0 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20  ert_rowid()} {} 
17c00 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  {.  ^The last_in
17c10 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
17c20 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
17c30 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74  e [ROWID].  of t
17c40 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65  he last row inse
17c50 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  rt from the data
17c60 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
17c70 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68  which invoked th
17c80 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  e.  function..  
17c90 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74  ^The last_insert
17ca0 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e  _rowid() SQL fun
17cb0 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
17cc0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
17cd0 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  [sqlite3_last_in
17ce0 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f  sert_rowid()] C/
17cf0 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75  C++ interface fu
17d00 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  nction..}..funcd
17d10 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b  ef {length(X)} {
17d20 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 65 6e 67 74  } {.  ^The lengt
17d30 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  h(X) function re
17d40 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68  turns the length
17d50 20 6f 66 20 58 20 69 6e 20 0a 20 20 63 68 61 72   of X in .  char
17d60 61 63 74 65 72 73 20 69 66 20 58 20 69 73 20 61  acters if X is a
17d70 20 73 74 72 69 6e 67 2c 20 6f 72 20 69 6e 20 62   string, or in b
17d80 79 74 65 73 20 69 66 20 58 20 69 73 20 61 20 62  ytes if X is a b
17d90 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  lob..  ^If X is 
17da0 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68  NULL then length
17db0 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e  (X) is NULL..  ^
17dc0 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20  If X is numeric 
17dd0 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72  then length(X) r
17de0 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
17df0 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20  h of a string.  
17e00 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
17e10 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
17e20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
17e30 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
17e40 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  The like() funct
17e50 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
17e60 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
17e70 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31  <b>Y LIKE X &#91
17e80 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f  ;ESCAPE Z&#93;</
17e90 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  b>" expression. 
17ea0 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f  .  ^If the optio
17eb0 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
17ec0 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
17ed0 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  en the.  like() 
17ee0 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
17ef0 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
17f00 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65  rguments.  ^Othe
17f10 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69  rwise, it is.  i
17f20 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20  nvoked with two 
17f30 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20  arguments only. 
17f40 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
17f50 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73  and Y parameters
17f60 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20   are.  reversed 
17f70 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  in the like() fu
17f80 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20  nction relative 
17f90 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49  to the infix [LI
17fa0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  KE] operator..  
17fb0 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  ^The [sqlite3_cr
17fc0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
17fd0 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
17fe0 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
17ff0 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  de the.  like() 
18000 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
18010 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20  reby change the 
18020 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
18030 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  .  [LIKE] operat
18040 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69  or.  When overri
18050 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20  ding the like() 
18060 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79  function, it may
18070 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20   be important.  
18080 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68  to override both
18090 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72   the two and thr
180a0 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73  ee argument vers
180b0 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65  ions of the like
180c0 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20  () .  function. 
180d0 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65  Otherwise, diffe
180e0 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65  rent code may be
180f0 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65   called to imple
18100 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45  ment the.  [LIKE
18110 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e  ] operator depen
18120 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
18130 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45  or not an ESCAPE
18140 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73   clause was .  s
18150 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75 6e  pecified..}..fun
18160 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e  cdef {load_exten
18170 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74  sion(X) load_ext
18180 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20  ension(X,Y)} {} 
18190 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78  {.  ^The load_ex
181a0 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e  tension(X,Y) fun
181b0 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51 4c 69  ction loads SQLi
181c0 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f 75  te extensions ou
181d0 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a  t of the shared.
181e0 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e    library file n
181f0 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68 65  amed X using the
18200 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20   entry point Y. 
18210 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
18220 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
18230 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e  .  is always a N
18240 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f  ULL.  ^If Y is o
18250 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20  mitted then the 
18260 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f  default entry po
18270 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c 69  int.  of <b>sqli
18280 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e  te3_extension_in
18290 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e 20  it</b> is used. 
182a0 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e   ^The load_exten
182b0 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 0a  sion() function.
182c0 20 20 72 61 69 73 65 73 20 61 6e 20 65 78 63 65    raises an exce
182d0 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74  ption if the ext
182e0 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 20  ension fails to 
182f0 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69  load or initiali
18300 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20  ze correctly... 
18310 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78   <p>^The load_ex
18320 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  tension() functi
18330 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  on will fail if 
18340 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74  the extension at
18350 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64  tempts to .  mod
18360 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61 20  ify or delete a 
18370 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  SQL function or 
18380 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
18390 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65  ce.  ^The.  exte
183a0 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65  nsion can add ne
183b0 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  w functions or c
183c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
183d0 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20  es, but cannot. 
183e0 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74   modify or delet
183f0 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74  e existing funct
18400 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
18410 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63 61  g sequences beca
18420 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63  use.  those func
18430 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c  tions and/or col
18440 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
18450 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 65   might be used e
18460 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68  lsewhere.  in th
18470 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  e currently runn
18480 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ing SQL statemen
18490 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65  t.  To load an e
184a0 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20  xtension that.  
184b0 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74  changes or delet
184c0 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  es functions or 
184d0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
184e0 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b  ces, use the.  [
184f0 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
18500 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67  ension()] C-lang
18510 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d 0a  uage API.</p>.}.
18520 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28  .funcdef {lower(
18530 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
18540 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69 6f  lower(X) functio
18550 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
18560 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69 74   of string X wit
18570 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61 72  h all ASCII char
18580 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72 74  acters.  convert
18590 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73 65  ed to lower case
185a0 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20  .  ^The default 
185b0 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29  built-in lower()
185c0 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a   function works.
185d0 20 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72    for ASCII char
185e0 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f  acters only.  To
185f0 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72 73   do case convers
18600 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49  ions on non-ASCI
18610 49 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c 20  I.  characters, 
18620 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65 78 74  load the ICU ext
18630 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  ension..}..funcd
18640 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72  ef {ltrim(X) ltr
18650 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
18660 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29 20  ^The ltrim(X,Y) 
18670 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18680 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
18690 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
186a0 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
186b0 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
186c0 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20  r in Y from the 
186d0 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e 0a  left side of X..
186e0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
186f0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
18700 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65   ltrim(X) remove
18710 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68  s spaces from th
18720 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f 66  e left side.  of
18730 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b   X..}..funcdef {
18740 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a  max(X,Y,...)} {*
18750 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78  maxCoreFunc *max
18760 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e 63   {max() SQL func
18770 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
18780 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
18790 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ax() function re
187a0 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
187b0 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20 20 6d  nt with the .  m
187c0 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72  aximum value, or
187d0 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20   return NULL if 
187e0 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73 20  any argument is 
187f0 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75  NULL. .  ^The mu
18800 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78  lti-argument max
18810 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72  () function sear
18820 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e  ches its argumen
18830 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ts from left to 
18840 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61  right.  for an a
18850 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66  rgument that def
18860 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
18870 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73   function and us
18880 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e  es that collatin
18890 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  g.  function for
188a0 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70   all string comp
188b0 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f  arisons.  ^If no
188c0 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  ne of the argume
188d0 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20 64  nts to max().  d
188e0 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e  efine a collatin
188f0 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e  g function, then
18900 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
18910 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  ating function i
18920 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74  s used..  Note t
18930 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e  hat <b>max()</b>
18940 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
18950 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20  ction when.  it 
18960 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
18970 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72  guments but oper
18980 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 69  ates as an.  [mi
18990 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65  nAggFunc | aggre
189a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69  gate function] i
189b0 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73  f given only a s
189c0 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a  ingle argument..
189d0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
189e0 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43  X,Y,...)} {*minC
189f0 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69  oreFunc *min {mi
18a00 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  n() SQL function
18a10 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74  }} {.  ^The mult
18a20 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29  i-argument min()
18a30 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
18a40 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77  s the argument w
18a50 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75  ith the.  minimu
18a60 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20  m value..  ^The 
18a70 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
18a80 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  in() function se
18a90 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
18aa0 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
18ab0 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
18ac0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
18ad0 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
18ae0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
18af0 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
18b00 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
18b10 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
18b20 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
18b30 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
18b40 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20  ments to min(). 
18b50 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
18b60 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
18b70 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
18b80 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
18b90 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65   is used..  Note
18ba0 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f   that <b>min()</
18bb0 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
18bc0 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69  unction when.  i
18bd0 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
18be0 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70  arguments but op
18bf0 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20 20  erates as an .  
18c00 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61 67  [maxAggFunc | ag
18c10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18c20 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c  ] if given.  onl
18c30 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
18c40 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
18c50 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d  {nullif(X,Y)} {}
18c60 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66   {.  ^The nullif
18c70 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
18c80 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73 74  eturns its first
18c90 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68 65   argument if the
18ca0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a 20   arguments are. 
18cb0 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20 4e   different and N
18cc0 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75 6d  ULL if the argum
18cd0 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61 6d  ents are the sam
18ce0 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28  e.  ^The nullif(
18cf0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  X,Y) function.  
18d00 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
18d10 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
18d20 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61 6e   to right for an
18d30 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
18d40 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61  efines a.  colla
18d50 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
18d60 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
18d70 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66  ating function f
18d80 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20  or all string.  
18d90 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
18da0 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d 65  f neither argume
18db0 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64  nt to nullif() d
18dc0 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
18dd0 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68  ng function.  th
18de0 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69 73  en the BINARY is
18df0 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65   used..}..funcde
18e00 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20  f {quote(X)} {} 
18e10 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58  {.  ^The quote(X
18e20 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18e30 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  ns a string whic
18e40 68 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  h is the value o
18e50 66 0a 20 20 69 74 73 20 61 72 67 75 6d 65 6e 74  f.  its argument
18e60 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e   suitable for in
18e70 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f  clusion into ano
18e80 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65  ther SQL stateme
18e90 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61  nt..  ^Strings a
18ea0 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  re surrounded by
18eb0 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77   single-quotes w
18ec0 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69  ith escapes on i
18ed0 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20  nterior quotes. 
18ee0 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c   as needed.  ^BL
18ef0 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20  OBs are encoded 
18f00 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c  as hexadecimal l
18f10 69 74 65 72 61 6c 73 2e 0a 7d 0a 0a 66 75 6e 63  iterals..}..func
18f20 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b  def {random()} {
18f30 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f  } {.  ^The rando
18f40 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  m() function ret
18f50 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61  urns a pseudo-ra
18f60 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62  ndom integer.  b
18f70 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30  etween -92233720
18f80 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20  36854775808 and 
18f90 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
18fa0 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  5807..}..funcdef
18fb0 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d   {randomblob(N)}
18fc0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e   {} {.  ^The ran
18fd0 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74  domblob(N) funct
18fe0 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d  ion return an N-
18ff0 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69  byte blob contai
19000 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64  ning pseudo-rand
19010 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20  om.  bytes. ^If 
19020 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  N is less than 1
19030 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72   then a 1-byte r
19040 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65  andom blob is re
19050 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69  turned...  <p>Hi
19060 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e  nt:  application
19070 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67  s can generate g
19080 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69  lobally unique i
19090 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69  dentifiers.  usi
190a0 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ng this function
190b0 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b   together with [
190c0 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20  hex()] and/or.  
190d0 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74  [lower()] like t
190e0 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f  his:</p>..  <blo
190f0 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72  ckquote>.  hex(r
19100 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62  andomblob(16))<b
19110 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28  r></br>.  lower(
19120 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  hex(randomblob(1
19130 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75  6))).  </blockqu
19140 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ote>.}..funcdef 
19150 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d  {replace(X,Y,Z)}
19160 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70   {} {.  ^The rep
19170 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63  lace(X,Y,Z) func
19180 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
19190 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
191a0 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73  substituting.  s
191b0 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72  tring Z for ever
191c0 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  y occurrence of 
191d0 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69  string Y in stri
191e0 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e  ng X.  ^The [BIN
191f0 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67  ARY].  collating
19200 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
19210 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  d for comparison
19220 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20  s.  ^If Y is an 
19230 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74  empty.  string t
19240 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63  hen return X unc
19250 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69  hanged.  ^If Z i
19260 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
19270 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69    a string, it i
19280 73 20 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d  s cast to a UTF-
19290 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74  8 string prior t
192a0 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a  o processing..}.
192b0 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28  .funcdef {round(
192c0 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b  X) round(X,Y)} {
192d0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64  } {.  ^The round
192e0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
192f0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
19300 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
19310 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 2d 70  f the floating-p
19320 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72  oint.  value X r
19330 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69  ounded to Y digi
19340 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  ts to the right 
19350 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  of the decimal p
19360 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20  oint..  ^If the 
19370 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
19380 69 74 74 65 64 2c 20 74 68 65 20 58 20 76 61 6c  itted, the X val
19390 75 65 20 69 73 20 74 72 75 6e 63 61 74 65 64 20  ue is truncated 
193a0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 7d  to an integer..}
193b0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d  ..funcdef {rtrim
193c0 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20  (X) rtrim(X,Y)} 
193d0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69  {} {.  ^The rtri
193e0 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
193f0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
19400 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
19410 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
19420 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
19430 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
19440 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64  om the right sid
19450 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
19460 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
19470 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58  omitted, rtrim(X
19480 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
19490 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a   from the right.
194a0 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a    side of X..}..
194b0 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78  funcdef {soundex
194c0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
194d0 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63   soundex(X) func
194e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
194f0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74 68  tring that is th
19500 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69  e soundex encodi
19510 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72  ng .  of the str
19520 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74  ing X..  ^The st
19530 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72  ring "?000" is r
19540 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61  eturned if the a
19550 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20  rgument is NULL 
19560 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f  or contains.  no
19570 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74 69   ASCII alphabeti
19580 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20  c characters..  
19590 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  ^(This function 
195a0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
195b0 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c  SQLite by defaul
195c0 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  t..  It is only 
195d0 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65  available if the
195e0 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58   [SQLITE_SOUNDEX
195f0 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ] compile-time o
19600 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20  ption.  is used 
19610 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62  when SQLite is b
19620 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  uilt.)^.}..funcd
19630 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
19640 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d  leoption_get(N)}
19650 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
19660 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
19670 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63  n_get() SQL func
19680 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
19690 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b  r around the.  [
196a0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
196b0 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43  ption_get()] C/C
196c0 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e  ++ function..  ^
196d0 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  This routine ret
196e0 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f  urns the N-th co
196f0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
19700 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  n used to build 
19710 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c  SQLite.  or NULL
19720 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20   if N is out of 
19730 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f  range.  See also
19740 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70   the [compile_op
19750 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d  tions pragma]..}
19760 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
19770 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
19780 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  used(X)} {} {.  
19790 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
197a0 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29  ileoption_used()
197b0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
197c0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
197d0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
197e0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
197f0 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  sed()] C/C++ fun
19800 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74  ction..  ^When t
19810 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f  he argument X to
19820 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
19830 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73  ption_used(X) is
19840 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a   a string which.
19850 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66    is the name of
19860 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20   a compile-time 
19870 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75  option, this rou
19880 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75  tine returns tru
19890 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65  e (1) or.  false
198a0 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f   (0) depending o
198b0 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
198c0 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73   that option was
198d0 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65   used during the
198e0 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e  .  build..}..fun
198f0 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75  cdef {sqlite_sou
19900 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  rce_id()} {} {. 
19910 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75   ^The sqlite_sou
19920 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f  rce_id() functio
19930 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
19940 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69  ng that identifi
19950 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69  es the.  specifi
19960 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  c version of the
19970 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61   source code tha
19980 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  t was used to bu
19990 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20  ild the SQLite. 
199a0 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20   library.  ^The 
199b0 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
199c0 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  by sqlite_source
199d0 5f 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74  _id() begins wit
199e0 68 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64  h.  the date and
199f0 20 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73   time that the s
19a00 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63  ource code was c
19a10 68 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73  hecked in and is
19a20 20 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e   follows by.  an
19a30 20 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20   SHA1 hash that 
19a40 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66  uniquely identif
19a50 69 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74  ies the source t
19a60 72 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63  ree.  ^This func
19a70 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c  tion is.  an SQL
19a80 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
19a90 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75  the [sqlite3_sou
19aa0 72 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72  rceid()] C inter
19ab0 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  face..}..funcdef
19ac0 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e   {sqlite_version
19ad0 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
19ae0 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
19af0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19b00 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74  s the version st
19b10 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c  ring for the SQL
19b20 69 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68  ite.  library th
19b30 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20  at is running.  
19b40 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
19b50 73 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70  s an SQL.  wrapp
19b60 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
19b70 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
19b80 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65  n()] C-interface
19b90 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75  ..}..funcdef {su
19ba0 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73  bstr(X,Y,Z) subs
19bb0 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  tr(X,Y)} {} {.  
19bc0 5e 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c  ^The substr(X,Y,
19bd0 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
19be0 72 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20  rns a substring 
19bf0 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  of input string 
19c00 58 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20  X that begins.  
19c10 77 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68  with the Y-th ch
19c20 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63  aracter and whic
19c30 68 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72  h is Z character
19c40 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20  s long..  ^If Z 
19c50 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20  is omitted then 
19c60 73 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75  substr(X,Y) retu
19c70 72 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65  rns all characte
19c80 72 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  rs through the e
19c90 6e 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69  nd.  of the stri
19ca0 6e 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77  ng X beginning w
19cb0 69 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20  ith the Y-th..  
19cc0 5e 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  ^The left-most c
19cd0 68 61 72 61 63 74 65 72 20 6f 66 20 58 20 69 73  haracter of X is
19ce0 20 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20   number 1.  ^If 
19cf0 59 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20  Y is negative.  
19d00 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 63  then the first c
19d10 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20  haracter of the 
19d20 73 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75  substring is fou
19d30 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66  nd by counting f
19d40 72 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20  rom the.  right 
19d50 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
19d60 6c 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20  left.  ^If Z is 
19d70 6e 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20  negative then.  
19d80 74 68 65 20 61 62 73 28 5a 29 20 63 68 61 72 61  the abs(Z) chara
19d90 63 74 65 72 73 20 70 72 65 63 65 64 69 6e 67 20  cters preceding 
19da0 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74  the Y-th charact
19db0 65 72 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e  er are returned.
19dc0 0a 20 20 5e 49 66 20 58 20 69 73 20 61 20 73 74  .  ^If X is a st
19dd0 72 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63  ring then charac
19de0 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65 66  ters indices ref
19df0 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46  er to actual UTF
19e00 2d 38 20 0a 20 20 63 68 61 72 61 63 74 65 72 73  -8 .  characters
19e10 2e 20 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c  .  ^If X is a BL
19e20 4f 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69  OB then the indi
19e30 63 65 73 20 72 65 66 65 72 20 74 6f 20 62 79 74  ces refer to byt
19e40 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  es..}..funcdef {
19e50 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d  total_changes()}
19e60 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74   {} {.  ^The tot
19e70 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e  al_changes() fun
19e80 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
19e90 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20  e number of row 
19ea0 63 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64  changes.  caused
19eb0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
19ec0 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73  TE or DELETE.  s
19ed0 74 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20  tatements since 
19ee0 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 61  the current data
19ef0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
19f00 77 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54  was opened..  ^T
19f10 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
19f20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
19f30 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f   the [sqlite3_to
19f40 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20  tal_changes()]. 
19f50 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
19f60 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72  ..}..funcdef {tr
19f70 69 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d  im(X) trim(X,Y)}
19f80 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69   {} {.  ^The tri
19f90 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
19fa0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
19fb0 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
19fc0 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
19fd0 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
19fe0 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
19ff0 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20  om both ends of 
1a000 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1a010 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1a020 65 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f  ed, trim(X) remo
1a030 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1a040 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a  both ends of X..
1a050 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65  }..funcdef {type
1a060 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  of(X)} {} {.  ^T
1a070 68 65 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e  he typeof(X) fun
1a080 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1a090 73 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69  string that indi
1a0a0 63 61 74 65 73 20 74 68 65 20 5b 64 61 74 61 74  cates the [datat
1a0b0 79 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78  ype] of.  the ex
1a0c0 70 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c  pression X: "nul
1a0d0 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22  l", "integer", "
1a0e0 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f  real", "text", o
1a0f0 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e  r "blob"..}..fun
1a100 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20  cdef {upper(X)} 
1a110 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65  {} {.  ^The uppe
1a120 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1a130 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1a140 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69  input string X i
1a150 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c  n which all .  l
1a160 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20  ower-case ASCII 
1a170 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63  characters are c
1a180 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
1a190 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75  r upper-case equ
1a1a0 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  ivalent..}..func
1a1b0 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29  def {zeroblob(N)
1a1c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65  } {} {.  ^The ze
1a1d0 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  roblob(N) functi
1a1e0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f  on returns a BLO
1a1f0 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  B consisting of 
1a200 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e  N bytes of 0x00.
1a210 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  .  SQLite manage
1a220 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62  s these zeroblob
1a230 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
1a240 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63  ly.  Zeroblobs c
1a250 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20  an be used to.  
1a260 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f  reserve space fo
1a270 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73  r a BLOB that is
1a280 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75   later written u
1a290 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33  sing .  [sqlite3
1a2a0 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69  _blob_open() | i
1a2b0 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
1a2c0 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51  I/O]..  ^This SQ
1a2d0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  L function is im
1a2e0 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
1a2f0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
1a300 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a  ult_zeroblob()].
1a310 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74    routine from t
1a320 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  he C/C++ interfa
1a330 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ce..}.</tcl>.</t
1a340 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
1a350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a390 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1a3a0 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69  ion {Date And Ti
1a3b0 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61  me Functions} da
1a3c0 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e  tefunc {*datefun
1a3d0 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  c}.hd_keywords {
1a3e0 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74  date() SQL funct
1a3f0 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c  ion} {time() SQL
1a400 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
1a410 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65  ywords {datetime
1a420 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1a430 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51   {julianday() SQ
1a440 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1a450 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d  eywords {strftim
1a460 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1a470 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51  }.</tcl>..<p>.SQ
1a480 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69  Lite supports fi
1a490 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
1a4a0 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f   functions as fo
1a4b0 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e  llows:.</p>..<p>
1a4c0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  .<ol>.<li> ^(<b>
1a4d0 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  date(</b><i>time
1a4e0 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1a4f0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1a500 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1a510 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69  li>.<li> ^(<b>ti
1a520 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
1a530 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a540 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a550 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a560 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1a570 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
1a580 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1a590 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1a5a0 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1a5b0 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75  li>.<li> ^(<b>ju
1a5c0 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
1a5d0 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
1a5e0 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
1a5f0 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
1a600 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
1a610 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69  >strftime(</b><i
1a620 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72  >format, timestr
1a630 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1a640 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1a650 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1a660 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c  .</ol>..<p>.^All
1a670 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74   five date and t
1a680 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61  ime functions ta
1a690 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67  ke a time string
1a6a0 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e   as an argument.
1a6b0 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69   .^The time stri
1a6c0 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  ng is followed b
1a6d0 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1a6e0 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20  odifiers. .^The 
1a6f0 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
1a700 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61  ion also takes a
1a710 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61   format string a
1a720 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1a730 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ment..</p>..<p>.
1a740 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
1a750 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
1a760 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74  a subset of.[htt
1a770 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a780 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36  .org/wiki/ISO_86
1a790 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64  01 | IS0-8601] d
1a7a0 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72  ate and time.for
1a7b0 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28  mats..^The date(
1a7c0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a7d0 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74  ns the date in t
1a7e0 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59  his format: YYYY
1a7f0 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69  -MM-DD. .^The ti
1a800 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
1a810 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
1a820 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68  s HH:MM:SS. .^Th
1a830 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e  e datetime() fun
1a840 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59  ction returns "Y
1a850 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
1a860 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69  SS". .^(The juli
1a870 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e  anday() function
1a880 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68   returns the .[h
1a890 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a8a0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1a8b0 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1a8c0 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65  day] - the.numbe
1a8d0 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
1a8e0 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63  noon in Greenwic
1a8f0 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34  h on November 24
1a900 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68  , 4714 B.C. .([h
1a910 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a920 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c  ia.org/wiki/Prol
1a930 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f  eptic_Gregorian_
1a940 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65  calendar | Prole
1a950 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63  ptic Gregorian c
1a960 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68  alendar]).)^.^Th
1a970 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75  e strftime() rou
1a980 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1a990 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20   date formatted 
1a9a0 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68  according to .th
1a9b0 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1a9c0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1a9d0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
1a9e0 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72  .^The format str
1a9f0 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65  ing supports the
1aa00 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62   most common sub
1aa10 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64  stitutions found
1aa20 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   in the .[http:/
1aa30 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f  /opengroup.org/o
1aa40 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38  nlinepubs/007908
1aa50 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65  799/xsh/strftime
1aa60 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65  .html | strftime
1aa70 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f  () function].fro
1aa80 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
1aa90 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77   library plus tw
1aaa0 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69  o new substituti
1aab0 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a  ons, %f and %J..
1aac0 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(The following 
1aad0 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69  is a complete li
1aae0 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66  st of valid strf
1aaf0 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74  time() substitut
1ab00 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ions:.</p>..<blo
1ab10 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1ab20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
1ab30 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
1ab40 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1ab50 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31  <td><td width="1
1ab60 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  0"><td></tr>..<t
1ab70 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74  r><td> %d <td><t
1ab80 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a  d> day of month:
1ab90 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20   00.<tr><td> %f 
1aba0 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f  <td><td> fractio
1abb0 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e  nal seconds: SS.
1abc0 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20  SSS.<tr><td> %H 
1abd0 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30  <td><td> hour: 0
1abe0 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25  0-24 .<tr><td> %
1abf0 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  j <td><td> day o
1ac00 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a  f year: 001-366.
1ac10 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e  <tr><td> %J <td>
1ac20 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20  <td> Julian day 
1ac30 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20  number.<tr><td> 
1ac40 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74  %m <td><td> mont
1ac50 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64  h: 01-12.<tr><td
1ac60 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69  > %M <td><td> mi
1ac70 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  nute: 00-59.<tr>
1ac80 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e  <td> %s <td><td>
1ac90 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1aca0 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74  970-01-01.<tr><t
1acb0 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %S <td><td> s
1acc0 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74  econds: 00-59.<t
1acd0 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74  r><td> %w <td><t
1ace0 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30  d> day of week 0
1acf0 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d  -6 with Sunday==
1ad00 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74  0.<tr><td> %W <t
1ad10 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79  d><td> week of y
1ad20 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c  ear: 00-53.<tr><
1ad30 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20  td> %Y <td><td> 
1ad40 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a  year: 0000-9999.
1ad50 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e  <tr><td> %% <td>
1ad60 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a  <td> %.</table>.
1ad70 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1ad80 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68  .<p>.^(Notice th
1ad90 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74  at all other dat
1ada0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1adb0 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72  ions can be expr
1adc0 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f  essed.in terms o
1add0 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f  f strftime():.</
1ade0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1adf0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
1ae00 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
1ae10 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
1ae20 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46  0">.<tr><td><b>F
1ae30 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77  unction</b><td w
1ae40 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62  idth="30"><td><b
1ae50 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66  >Equivalent strf
1ae60 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c  time()</b>.<tr><
1ae70 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20  td>   date(...) 
1ae80 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
1ae90 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
1aea0 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  d', ...).<tr><td
1aeb0 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20  >   time(...)   
1aec0 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1aed0 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27  ftime('%H:%M:%S'
1aee0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1aef0 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20    datetime(...) 
1af00 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1af10 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
1af20 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
1af30 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64  r><td>   juliand
1af40 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e  ay(...) <td><td>
1af50 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c    strftime('%J',
1af60 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c   ...).</table>.<
1af70 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1af80 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
1af90 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
1afa0 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
1afb0 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
1afc0 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
1afd0 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
1afe0 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
1aff0 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
1b000 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69  </h3>..<p>^(A ti
1b010 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65  me string can be
1b020 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66   in any of the f
1b030 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73  ollowing formats
1b040 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
1b050 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1b060 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1b070 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a  MM-DD HH:MM</i>.
1b080 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b090 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  DD HH:MM:SS</i>.
1b0a0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b0b0 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  DD HH:MM:SS.SSS<
1b0c0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1b0d0 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1b0e0 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  b><i>HH:MM</i>.<
1b0f0 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1b100 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1b110 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
1b120 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1b130 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1b140 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1b150 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e  li> <i>HH:MM</i>
1b160 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
1b170 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
1b180 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1b190 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c  li> <b>now</b>.<
1b1a0 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44  li> <i>DDDDDDDDD
1b1b0 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  D</i>.</ol>)^..<
1b1c0 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35  p>.^In formats 5
1b1d0 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20   through 7, the 
1b1e0 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c  "T" is a literal
1b1f0 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72   character separ
1b200 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20  ating .the date 
1b210 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73  and the time, as
1b220 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68   required by .[h
1b230 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72  ttp://www.w3c.or
1b240 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69  g/TR/NOTE-dateti
1b250 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20  me | ISO-8601]. 
1b260 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f  .^Formats 8 thro
1b270 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63  ugh 10 that spec
1b280 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20  ify only a time 
1b290 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66  assume a date of
1b2a0 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f   .2000-01-01. Fo
1b2b0 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72  rmat 11, the str
1b2c0 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f  ing 'now', is co
1b2d0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nverted into the
1b2e0 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61   .current date a
1b2f0 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69  nd time as obtai
1b300 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75  ned from the xCu
1b310 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64  rrentTime method
1b320 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  .of the [sqlite3
1b330 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20  _vfs] object in 
1b340 75 73 65 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e  use..^[http://en
1b350 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1b360 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f  iki/Coordinated_
1b370 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c  Universal_Time |
1b380 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64   Universal Coord
1b390 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43  inated Time (UTC
1b3a0 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f  )] is used. .^Fo
1b3b0 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20 0a  rmat 12 is the .
1b3c0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1b3d0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75  edia.org/wiki/Ju
1b3e0 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61  lian_day | Julia
1b3f0 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78  n day number].ex
1b400 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f  pressed as a flo
1b410 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
1b420 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64  e..</p>..<h3>Mod
1b430 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ifiers</h3>..<p>
1b440 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
1b450 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
1b460 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
1b470 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74 20   modifiers that 
1b480 0a 61 6c 74 65 72 20 74 68 65 20 64 61 74 65 20  .alter the date 
1b490 61 6e 64 20 74 69 6d 65 20 73 74 72 69 6e 67 2e  and time string.
1b4a0 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a   ^Each modifier.
1b4b0 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74  is a transformat
1b4c0 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c  ion that is appl
1b4d0 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20  ied to the time 
1b4e0 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66  value to its lef
1b4f0 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72  t..^Modifiers ar
1b500 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c  e applied from l
1b510 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72  eft to right; or
1b520 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  der is important
1b530 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c  ..^(The availabl
1b540 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20  e modifiers are 
1b550 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a  as follows.</p>.
1b560 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64  .<ol>.<li> NNN d
1b570 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75  ays.<li> NNN hou
1b580 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75  rs.<li> NNN minu
1b590 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e  tes.<li> NNN.NNN
1b5a0 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e  N seconds.<li> N
1b5b0 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e  NN months.<li> N
1b5c0 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74  NN years.<li> st
1b5d0 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69  art of month.<li
1b5e0 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a  > start of year.
1b5f0 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61  <li> start of da
1b600 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e  y.<li> weekday N
1b610 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a  .<li> unixepoch.
1b620 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c  <li> localtime.<
1b630 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e  li> utc .</ol>)^
1b640 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20  ..<p>^The first 
1b650 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31  six modifiers (1
1b660 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d   through 6) .sim
1b670 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63  ply add the spec
1b680 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20  ified amount of 
1b690 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65  time to the date
1b6a0 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69   and time .speci
1b6b0 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63  fied by the prec
1b6c0 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67  eding timestring
1b6d0 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a   and modifiers..
1b6e0 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75  ^Note that "&plu
1b6f0 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20  smn;NNN months" 
1b700 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69  works by renderi
1b710 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
1b720 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59  date into.the YY
1b730 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c  YY-MM-DD format,
1b740 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75   adding the &plu
1b750 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d  smn;NNN to the M
1b760 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74  M month value, t
1b770 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20  hen.normalizing 
1b780 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68  the result.  ^Th
1b790 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c  us, for example,
1b7a0 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30   the data 2001-0
1b7b0 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79  3-31 modified.by
1b7c0 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74   '+1 month' init
1b7d0 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30  ially yields 200
1b7e0 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72  1-04-31, but Apr
1b7f0 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64  il only has 30 d
1b800 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20  ays.so the date 
1b810 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f  is normalized to
1b820 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41   2001-05-01.  ^A
1b830 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20   similar effect 
1b840 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20  occurs when.the 
1b850 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73  original date is
1b860 20 46 65 62 72 75 61 72 79 20 32 39 20 6f 66 20   February 29 of 
1b870 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74  a leapyear and t
1b880 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26  he modifier is.&
1b890 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77  plusmn;N years w
1b8a0 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20  here N is not a 
1b8b0 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72  multiple of four
1b8c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1b8d0 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69  start of" modifi
1b8e0 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20 39  ers (7 through 9
1b8f0 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74 65  ) shift the date
1b900 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74   backwards .to t
1b910 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1b920 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74  the current mont
1b930 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c  h, year or day.<
1b940 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65  /p>..<p>^The "we
1b950 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20  ekday" modifier 
1b960 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74  advances the dat
1b970 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65  e forward to the
1b980 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65 72   next date .wher
1b990 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75  e the weekday nu
1b9a0 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61  mber is N. Sunda
1b9b0 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69  y is 0, Monday i
1b9c0 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  s 1, and so fort
1b9d0 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  h.</p>..<p>^The 
1b9e0 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
1b9f0 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77  fier (11) only w
1ba00 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64  orks if it immed
1ba10 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a  iately follows .
1ba20 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20  a timestring in 
1ba30 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20 66  the DDDDDDDDDD f
1ba40 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f  ormat. .^This mo
1ba50 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74 68  difier causes th
1ba60 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f 20  e DDDDDDDDDD to 
1ba70 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e  be interpreted n
1ba80 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20  ot .as a Julian 
1ba90 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74  day number as it
1baa0 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20   normally would 
1bab0 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70  be, but as.[http
1bac0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1bad0 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69  org/wiki/Unix_ti
1bae0 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20  me | Unix Time] 
1baf0 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66  - the .number of
1bb00 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1bb10 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e  970.  If the "un
1bb20 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1bb30 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f  r does not.follo
1bb40 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f  w a timestring o
1bb50 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44  f the form DDDDD
1bb60 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70 72  DDDDD which expr
1bb70 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72  esses the number
1bb80 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63  .of seconds sinc
1bb90 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68  e 1970 or if oth
1bba0 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70  er modifiers.sep
1bbb0 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78 65  arate the "unixe
1bbc0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66  poch" modifier f
1bbd0 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44  rom prior DDDDDD
1bbe0 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65  DDDD then the.be
1bbf0 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
1bc00 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63  ned..Due to prec
1bc10 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e  ision limitation
1bc20 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65  s imposed by the
1bc30 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1bc40 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69   use.of 64-bit i
1bc50 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e  ntegers, the "un
1bc60 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1bc70 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  r only works for
1bc80 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20 30  .dates between 0
1bc90 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a  000-01-01 00:00:
1bca0 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30  00 and 5352-11-0
1bcb0 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78  1 10:52:47 (unix
1bcc0 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37   times.of -62167
1bcd0 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20 31  219200 through 1
1bce0 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e  0675199167).</p>
1bcf0 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c  ..<p>^The "local
1bd00 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28  time" modifier (
1bd10 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65 20  12) assumes the 
1bd20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69  time string to i
1bd30 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e  ts left is in.Un
1bd40 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
1bd50 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20 61  ted Time (UTC) a
1bd60 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20 74  nd adjusts the t
1bd70 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68  ime.string so th
1bd80 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c  at it displays l
1bd90 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c  ocaltime.  If "l
1bda0 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77  ocaltime".follow
1bdb0 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69 73  s a time that is
1bdc0 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74   not UTC, then t
1bdd0 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
1bde0 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20  ndefined..^(The 
1bdf0 22 75 74 63 22 20 69 73 20 74 68 65 20 6f 70 70  "utc" is the opp
1be00 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74  osite of "localt
1be10 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61 73 73  ime".  "utc" ass
1be20 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73 74  umes that the st
1be30 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74  ring.to its left
1be40 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c   is in the local
1be50 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64   timezone and ad
1be60 6a 75 73 74 73 20 74 68 61 74 20 73 74 72 69 6e  justs that strin
1be70 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29  g to be in UTC.)
1be80 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73  ^.If the prior s
1be90 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20  tring is not in 
1bea0 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20  localtime, then 
1beb0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75  the result of "u
1bec0 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64  tc" is.undefined
1bed0 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70  .</p>..<h3>Examp
1bee0 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43  les</h3>..^(<p>C
1bef0 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65  ompute the curre
1bf00 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c  nt date.<p>..<bl
1bf10 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
1bf20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c  date('now');</bl
1bf30 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1bf40 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61  p>Compute the la
1bf50 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75  st day of the cu
1bf60 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e  rrent month.</p>
1bf70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1bf80 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
1bf90 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27  'start of month'
1bfa0 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20  ,'+1 month','-1 
1bfb0 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  day');.</blockqu
1bfc0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1bfd0 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
1bfe0 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
1bff0 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
1c000 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c  92941466.</p>..<
1c010 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20  blockquote>.    
1c020 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1c030 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1c040 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63  xepoch');.</bloc
1c050 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1c060 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1c070 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
1c080 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
1c090 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64   1092941466, and
1c0a0 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72   .compensate for
1c0b0 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65   your local time
1c0c0 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  zone.</p>..<bloc
1c0d0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1c0e0 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
1c0f0 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
1c100 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b  ', 'localtime');
1c110 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c120 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c130 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20  he current unix 
1c140 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a  timestamp.</p>..
1c150 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c160 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1c170 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c  %s','now');.</bl
1c180 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c190 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
1c1a0 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
1c1b0 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f  ce the signing o
1c1c0 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61  f the US Declara
1c1d0 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64  tion.of Independ
1c1e0 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ence.</p>..<bloc
1c1f0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1c200 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27   julianday('now'
1c210 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31  ) - julianday('1
1c220 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62  776-07-04');.</b
1c230 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1c240 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
1c250 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
1c260 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75   since a particu
1c270 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30  lar moment in 20
1c280 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  04:</p>..<blockq
1c290 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73  uote>.  SELECT s
1c2a0 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1c2b0 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27  w') - strftime('
1c2c0 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20  %s','2004-01-01 
1c2d0 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c  02:34:56');.</bl
1c2e0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c2f0 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64  p>.Compute the d
1c300 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  ate of the first
1c310 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f   Tuesday in Octo
1c320 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72  ber.for the curr
1c330 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  ent year..</p>..
1c340 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c350 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1c360 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27  ,'start of year'
1c370 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65  ,'+9 months','we
1c380 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f  ekday 2');.</blo
1c390 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1c3a0 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d  >Compute the tim
1c3b0 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78  e since the unix
1c3c0 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64   epoch in second
1c3d0 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d  s .(like strftim
1c3e0 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78  e('%s','now') ex
1c3f0 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72  cept includes fr
1c400 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c  actional part):<
1c410 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1c420 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69  >.  SELECT (juli
1c430 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32  anday('now') - 2
1c440 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e  440587.5)*86400.
1c450 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  0;.</blockquote>
1c460 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20  )^..<h3>Caveats 
1c470 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c  And Bugs</h3>..<
1c480 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  p>The computatio
1c490 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20  n of local time 
1c4a0 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20  depends heavily 
1c4b0 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20  on the whim .of 
1c4c0 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20  politicians and 
1c4d0 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c  is thus difficul
1c4e0 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74  t to get correct
1c4f0 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65   for .all locale
1c500 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c  s. ^In this impl
1c510 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
1c520 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1c530 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63  ry .function loc
1c540 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73  altime_r() is us
1c550 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ed to assist in 
1c560 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20  the calculation 
1c570 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20  of .local time. 
1c580 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d   ^(The .localtim
1c590 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e  e_r() C function
1c5a0 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77   normally only w
1c5b0 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62  orks for years.b
1c5c0 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20  etween 1970 and 
1c5d0 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20  2037. For dates 
1c5e0 6f 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e  outside this ran
1c5f0 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65  ge, SQLite .atte
1c600 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20  mpts to map the 
1c610 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75  year into an equ
1c620 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74  ivalent year wit
1c630 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c  hin .this range,
1c640 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74   do the calculat
1c650 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68  ion, then map th
1c660 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f  e year back.)^</
1c670 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20  p>...<p>^(These 
1c680 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77  functions only w
1c690 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65  ork for dates be
1c6a0 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1c6b0 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39   00:00:00.and 99
1c6c0 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35  99-12-31 23:59:5
1c6d0 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e  9 (julidan day n
1c6e0 75 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e 35  umbers 1721059.5
1c6f0 20 74 68 72 6f 75 67 68 20 35 33 37 33 34 38 34   through 5373484
1c700 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73  .5).)^.For dates
1c710 20 6f 75 74 73 69 64 65 20 74 68 61 74 20 72 61   outside that ra
1c720 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  nge, the results
1c730 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69   of these.functi
1c740 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ons are undefine
1c750 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56  d.</p>..<p>Non-V
1c760 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61  ista Windows pla
1c770 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70  tforms only supp
1c780 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44  ort one set of D
1c790 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61  ST rules. .Vista
1c7a0 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74   only supports t
1c7b0 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f  wo. Therefore, o
1c7c0 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d  n these platform
1c7d0 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44  s, .historical D
1c7e0 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20  ST calculations 
1c7f0 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63  will be incorrec
1c800 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c  t. .For example,
1c810 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32   in the US, in 2
1c820 30 30 37 20 74 68 65 20 44 53 54 20 72 75 6c 65  007 the DST rule
1c830 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d  s changed. .Non-
1c840 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
1c850 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68  atforms apply th
1c860 65 20 6e 65 77 20 32 30 30 37 20 44 53 54 20 72  e new 2007 DST r
1c870 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65  ules .to all pre
1c880 76 69 6f 75 73 20 79 65 61 72 73 20 61 73 20 77  vious years as w
1c890 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20  ell. Vista does 
1c8a0 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a  somewhat better.
1c8b0 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20  getting results 
1c8c0 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20  correct back to 
1c8d0 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72  1986, when the r
1c8e0 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63  ules were also c
1c8f0 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  hanged.</p>..<p>
1c900 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d  All internal com
1c910 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65  putations assume
1c920 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1c930 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1c940 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61  iki/Gregorian_ca
1c950 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69  lendar | Gregori
1c960 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73  an calendar].sys
1c970 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  tem.  It is also
1c980 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76   assumed that ev
1c990 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74  ery.day is exact
1c9a0 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73  ly 86400 seconds
1c9b0 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70   in duration.</p
1c9c0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1c9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca10 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1ca20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74  {Aggregate Funct
1ca30 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a  ions} aggfunc {*
1ca40 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a  aggfunc}.</tcl>.
1ca50 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61  .<p>.The aggrega
1ca60 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  te functions sho
1ca70 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
1ca80 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
1ca90 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61  t.  Additional.a
1caa0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1cab0 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20  ns written in C 
1cac0 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69  may be added usi
1cad0 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33  ng the .[sqlite3
1cae0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1caf0 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e  ()]</a>.API.</p>
1cb00 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67  ..<p>.^In any ag
1cb10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1cb20 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69   that takes a si
1cb30 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74  ngle argument, t
1cb40 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e  hat argument.can
1cb50 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
1cb60 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54  the keyword DIST
1cb70 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20  INCT.  ^In such 
1cb80 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65  cases, duplicate
1cb90 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69  .elements are fi
1cba0 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65  ltered before be
1cbb0 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20  ing passed into 
1cbc0 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
1cbd0 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  nction..^For exa
1cbe0 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69  mple, the functi
1cbf0 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e  on "count(distin
1cc00 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75  ct X)" will retu
1cc10 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  rn the number.of
1cc20 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73   distinct values
1cc30 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73   of column X ins
1cc40 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61  tead of the tota
1cc50 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  l number of non-
1cc60 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63  null.values in c
1cc70 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c  olumn X..</p>..<
1cc80 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
1cc90 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
1cca0 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76  tcl>.funcdef {av
1ccb0 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67  g(X)} {*avg {avg
1ccc0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1ccd0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1cce0 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a   avg() function.
1ccf0 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 76    returns the av
1cd00 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61  erage value of a
1cd10 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58  ll non-NULL <i>X
1cd20 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20  </i> within a.  
1cd30 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20  group.  ^String 
1cd40 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20  and BLOB values 
1cd50 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b  that do not look
1cd60 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72   like numbers ar
1cd70 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64 20  e.  interpreted 
1cd80 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73  as 0..  ^The res
1cd90 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
1cda0 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
1cdb0 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73  g point value as
1cdc0 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68   long as.  at th
1cdd0 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74 20  ere is at least 
1cde0 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70  one non-NULL inp
1cdf0 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20  ut even if all. 
1ce00 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
1ce10 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75  gers.  ^The resu
1ce20 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e  lt of avg() is N
1ce30 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ULL if and only 
1ce40 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e  if.  there are n
1ce50 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
1ce60 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  s.  .}..funcdef 
1ce70 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28  {count(X) count(
1ce80 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75  *)} {*count {cou
1ce90 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  nt() aggregate f
1cea0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1ceb0 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63  he count(X) func
1cec0 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61  tion returns.  a
1ced0 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75   count of the nu
1cee0 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20  mber of times.  
1cef0 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73  that <i>X</i> is
1cf00 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67   not NULL in a g
1cf10 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e  roup.  ^The coun
1cf20 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  t(*) function.  
1cf30 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
1cf40 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  ts) returns the 
1cf50 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1cf60 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
1cf70 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  p..}..funcdef {g
1cf80 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67  roup_concat(X) g
1cf90 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29  roup_concat(X,Y)
1cfa0 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e  } {.  *group_con
1cfb0 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  cat {group_conca
1cfc0 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
1cfd0 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
1cfe0 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  he group_concat(
1cff0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1d000 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68  ns.  a string wh
1d010 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61  ich is the conca
1d020 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c  tenation of.  al
1d030 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
1d040 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20  s of <i>X</i>.  
1d050 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69  ^If parameter <i
1d060 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e  >Y</i> is presen
1d070 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75  t then.  it is u
1d080 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
1d090 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69  ator.  between i
1d0a0 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58  nstances of <i>X
1d0b0 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20  </i>.  ^A comma 
1d0c0 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
1d0d0 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
1d0e0 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
1d0f0 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
1d100 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
1d110 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
1d120 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
1d130 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
1d140 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e  (X)} {*maxAggFun
1d150 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28  c *agg_max {max(
1d160 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1d170 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1d180 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
1d190 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
1d1a0 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  ns the maximum v
1d1b0 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
1d1c0 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1d1d0 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  .  ^The maximum 
1d1e0 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c  value is the val
1d1f0 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ue that would be
1d200 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69   returned last i
1d210 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20  n an.  ORDER BY 
1d220 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75  on the same colu
1d230 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  mn.  ^Aggregate 
1d240 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55  max() returns NU
1d250 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c  LL .  if and onl
1d260 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  y if there are n
1d270 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  o non-NULL value
1d280 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1d290 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
1d2a0 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63  X)} {*minAggFunc
1d2b0 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29   *agg_min {min()
1d2c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1d2d0 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
1d2e0 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
1d2f0 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e  unction.  return
1d300 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f  s the minimum no
1d310 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20  n-NULL value of 
1d320 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
1d330 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20  e group..  ^The 
1d340 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
1d350 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
1d360 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77  ULL value that w
1d370 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e  ould appear.  in
1d380 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20   an ORDER BY of 
1d390 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41  the column..  ^A
1d3a0 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72  ggregate min() r
1d3b0 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61  eturns NULL if a
1d3c0 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
1d3d0 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1d3e0 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  .  values in the
1d3f0 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
1d400 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c  ef {sum(X) total
1d410 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e  (X)} {.  *sumFun
1d420 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20  c *sum *total.  
1d430 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74 65  {sum() aggregate
1d440 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f   function}.  {to
1d450 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20  tal() aggregate 
1d460 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
1d470 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74  ^The sum() and t
1d480 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
1d490 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74   functions.  ret
1d4a0 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e  urn sum of all n
1d4b0 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
1d4c0 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
1d4d0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d4e0 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72  non-NULL input r
1d4f0 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72  ows then sum() r
1d500 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75  eturns.  NULL bu
1d510 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e  t total() return
1d520 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73  s 0.0..  NULL is
1d530 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20   not normally a 
1d540 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66  helpful result f
1d550 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f  or the sum of no
1d560 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20   rows.  but the 
1d570 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71  SQL standard req
1d580 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73  uires it and mos
1d590 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61  t other.  SQL da
1d5a0 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
1d5b0 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74  mplement sum() t
1d5c0 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74  hat way so SQLit
1d5d0 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65  e does it in the
1d5e0 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f  .  same way in o
1d5f0 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61  rder to be compa
1d600 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e  tible.   The non
1d610 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28  -standard total(
1d620 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20  ) function.  is 
1d630 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f  provided as a co
1d640 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20  nvenient way to 
1d650 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73  work around this
1d660 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a   design problem.
1d670 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e    in the SQL lan
1d680 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  guage.</p>..  <p
1d690 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  >^The result of 
1d6a0 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79  total() is alway
1d6b0 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
1d6c0 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  nt value..  ^The
1d6d0 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
1d6e0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
1d6f0 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
1d700 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
1d710 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20  integers..  ^If 
1d720 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d  any input to sum
1d730 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e  () is neither an
1d740 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55   integer or a NU
1d750 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20  LL.  then sum() 
1d760 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
1d770 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20  ng point value. 
1d780 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
1d790 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
1d7a0 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d   to the true sum
1d7b0 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d  .</p>..  <p>^Sum
1d7c0 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e  () will throw an
1d7d0 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c   "integer overfl
1d7e0 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66  ow" exception if
1d7f0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72   all inputs.  ar
1d800 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55  e integers or NU
1d810 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65  LL.  and an inte
1d820 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63  ger overflow occ
1d830 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74  urs at any point
1d840 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70   during the comp
1d850 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61  utation..  ^Tota
1d860 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73  l() never throws
1d870 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
1d880 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  flow..}.</tcl>.<
1d890 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23  /table>..<tcl>.#
1d8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1d8f0 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
1d900 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53  ert {INSERT *INS
1d910 45 52 54 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61  ERTs}..BubbleDia
1d920 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74  gram insert-stmt
1d930 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
1d940 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
1d950 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68 72 65  nt comes in thre
1d960 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20  e basic forms.  
1d970 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68  .<ul>.<li><p>^Th
1d980 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28 77 69  e first form (wi
1d990 74 68 20 74 68 65 20 22 56 41 4c 55 45 53 22 20  th the "VALUES" 
1d9a0 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74 65 73  keyword) creates
1d9b0 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f   a single new ro
1d9c0 77 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67  w in.an existing
1d9d0 20 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63   table. ^If no c
1d9e0 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70  olumn-list is sp
1d9f0 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65  ecified then the
1da00 20 6e 75 6d 62 65 72 20 6f 66 0a 76 61 6c 75 65   number of.value
1da10 73 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  s must be the sa
1da20 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
1da30 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1da40 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68  he table. ^In th
1da50 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73 75  is case.the resu
1da60 6c 74 20 6f 66 20 65 76 61 6c 75 74 69 6e 67 20  lt of evaluting 
1da70 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
1da80 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
1da90 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 0a  VALUES list is .
1daa0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
1dab0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  e left-most colu
1dac0 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  mn of the new ro
1dad0 77 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 5e 49  w, and so on. ^I
1dae0 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20  f a.column-list 
1daf0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
1db00 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
1db10 20 76 61 6c 75 65 73 20 6d 75 73 74 20 6d 61 74   values must mat
1db20 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
1db30 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
1db40 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74 68 65  ns. ^Each of the
1db50 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f   named columns o
1db60 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
1db70 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74 68 20   populated.with 
1db80 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65  the results of e
1db90 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f  valuating the co
1dba0 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55  rresponding VALU
1dbb0 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  ES expression. ^
1dbc0 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68  Table.columns th
1dbd0 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72  at do not appear
1dbe0 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c   in the column l
1dbf0 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61 74 65  ist are populate
1dc00 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61 75  d with the defau
1dc10 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  lt.column value 
1dc20 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61  (specified as pa
1dc30 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
1dc40 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
1dc50 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20  ), or with NULL 
1dc60 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20 76 61  if.no default va
1dc70 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64  lue is specified
1dc80 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 65  ...<li><p>The se
1dc90 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65  cond form of the
1dca0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1dcb0 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53 45 4c  t contains a SEL
1dcc0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 6e  ECT statement.in
1dcd0 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55 45  stead of a VALUE
1dce0 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65 77  S clause. ^A new
1dcf0 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72 74   entry is insert
1dd00 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
1dd10 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20 6f  e for each.row o
1dd20 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  f data returned 
1dd30 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
1dd40 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1dd50 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d  t. ^If a column-
1dd60 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65  list is.specifie
1dd70 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
1dd80 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1dd90 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45  result of the SE
1dda0 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65  LECT must be the
1ddb0 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d   same.as the num
1ddc0 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e 20  ber of items in 
1ddd0 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e  the column-list.
1dde0 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20   ^Otherwise, if 
1ddf0 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69  no column-list i
1de00 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
1de10 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1de20 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
1de30 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d   of the SELECT m
1de40 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a  ust be the same.
1de50 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
1de60 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1de70 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c 45  table. ^Any SELE
1de80 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e  CT statement, in
1de90 63 6c 75 64 69 6e 67 0a 63 6f 6d 70 6f 75 6e 64  cluding.compound
1dea0 20 53 45 4c 45 43 54 73 20 61 6e 64 20 53 45 4c   SELECTs and SEL
1deb0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
1dec0 69 74 68 20 4f 52 44 45 52 20 42 59 20 61 6e 64  ith ORDER BY and
1ded0 2f 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  /or LIMIT clause
1dee0 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20  s, .may be used 
1def0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
1df00 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 66  tement of this f
1df10 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65  orm...<li><p>The
1df20 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61   third form of a
1df30 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
1df40 6e 74 20 69 73 20 77 69 74 68 20 44 45 46 41 55  nt is with DEFAU
1df50 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65  LT VALUES..^(The
1df60 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41   INSERT ... DEFA
1df70 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74 65  ULT VALUES state
1df80 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61 20 73  ment inserts a s
1df90 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e  ingle new row in
1dfa0 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62  to the.named tab
1dfb0 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c 75  le.)^ ^Each colu
1dfc0 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  mn of the new ro
1dfd0 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 77  w is populated w
1dfe0 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74 20  ith its default 
1dff0 76 61 6c 75 65 2c 0a 6f 72 20 77 69 74 68 20 61  value,.or with a
1e000 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61   NULL if no defa
1e010 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65  ult value is spe
1e020 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
1e030 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 64 65 66  f the column.def
1e040 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 43  inition in the C
1e050 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
1e060 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c  ement...</ul>..<
1e070 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
1e080 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
1e090 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
1e0a0 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
1e0b0 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
1e0c0 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
1e0d0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
1e0e0 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
1e0f0 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52  g this one INSER
1e100 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74  T command..See t
1e110 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
1e120 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d.[ON CONFLICT] 
1e130 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1e140 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20  nformation..For 
1e150 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
1e160 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20 70  th MySQL, ^the p
1e170 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65  arser allows the
1e180 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67   use of the.sing
1e190 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72  le keyword <a hr
1e1a0 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65  ef="lang_replace
1e1b0 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f  .html">REPLACE</
1e1c0 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20  a> as an .alias 
1e1d0 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52  for "INSERT OR R
1e1e0 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54  EPLACE"...<p>^(T
1e1f0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e  he optional "<i>
1e200 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
1e210 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69  ><b>.</b>" prefi
1e220 78 20 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62 6c  x on the <i>tabl
1e230 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73 75  e-name</i>.is su
1e240 70 70 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c 65  pport for top-le
1e250 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65  vel INSERT state
1e260 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e  ments only.)^  ^
1e270 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d  The table name m
1e280 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66 69  ust be.unqualifi
1e290 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74  ed for INSERT st
1e2a0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
1e2b0 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45 41  cur within [CREA
1e2c0 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
1e2d0 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72  ements..^Similar
1e2e0 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c 54  ly, the "DEFAULT
1e2f0 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66   VALUES" form of
1e300 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
1e310 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72 74  ement is support
1e320 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c  ed for.top-level
1e330 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1e340 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20  ts only and not 
1e350 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65  for INSERT state
1e360 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72 69  ments within.tri
1e370 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c  ggers..<p>..<tcl
1e380 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
1e390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e3d0 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e  .Section {ON CON
1e3e0 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
1e3f0 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63  nflict {{conflic
1e400 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f  t clause} {ON CO
1e410 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c 65  NFLICT}}..Bubble
1e420 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74  Diagram conflict
1e430 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
1e440 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
1e450 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  CT clause is not
1e460 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 20   a separate SQL 
1e470 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20  command.  It is 
1e480 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  a.non-standard c
1e490 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20 61  lause that can a
1e4a0 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
1e4b0 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
1e4c0 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
1e4d0 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
1e4e0 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
1e4f0 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
1e500 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
1e510 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
1e520 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
1e530 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
1e540 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66  <p>^The syntax f
1e550 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
1e560 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
1e570 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
1e580 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
1e590 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20   command.  ^For 
1e5a0 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55  the INSERT and.U
1e5b0 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20  PDATE commands, 
1e5c0 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e  the keywords "ON
1e5d0 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72   CONFLICT" are r
1e5e0 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 20  eplaced by "OR" 
1e5f0 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e 74  so that.the synt
1e600 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e 61  ax reads more na
1e610 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78  turally.  For ex
1e620 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f  ample, instead o
1e630 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e  f."INSERT ON CON
1e640 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65  FLICT IGNORE" we
1e650 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52   have "INSERT OR
1e660 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65   IGNORE"..The ke
1e670 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75  ywords change bu
1e680 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  t the meaning of
1e690 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20 74   the clause is t
1e6a0 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77  he same.either w
1e6b0 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
1e6c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1e6d0 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 55 4e  se applies to UN
1e6e0 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 2c 20  IQUE, NOT NULL, 
1e6f0 61 6e 64 20 43 48 45 43 4b 0a 63 6f 6e 73 74 72  and CHECK.constr
1e700 61 69 6e 74 73 20 28 61 6e 64 20 74 6f 20 50 52  aints (and to PR
1e710 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
1e720 61 69 6e 74 73 20 77 68 69 63 68 20 66 6f 72 20  aints which for 
1e730 74 68 65 20 70 75 72 70 6f 73 65 73 20 0a 6f 66  the purposes .of
1e740 20 74 68 69 73 20 73 65 63 74 69 6f 6e 20 61 72   this section ar
1e750 65 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  e the same thing
1e760 20 61 73 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   as UNIQUE const
1e770 72 61 69 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20  raints)..The ON 
1e780 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
1e790 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c  hm does not.appl
1e7a0 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45  y to [FOREIGN KE
1e7b0 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a  Y constraints]..
1e7c0 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63  There are five c
1e7d0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
1e7e0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f  on algorithm cho
1e7f0 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20  ices:.ROLLBACK, 
1e800 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e  ABORT, FAIL, IGN
1e810 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
1e820 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
1e830 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
1e840 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
1e850 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20  ABORT.  This.is 
1e860 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c  what they mean:<
1e870 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62  /p>..<dl>.<dt><b
1e880 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64  >ROLLBACK</b></d
1e890 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
1e8a0 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
1e8b0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1e8c0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
1e8d0 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74  ROLLBACK.resolut
1e8e0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
1e8f0 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
1e900 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
1e910 69 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ith.an SQLITE_CO
1e920 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61  NSTRAINT error a
1e930 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68  nd rolls back th
1e940 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
1e950 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72  ction..^If no tr
1e960 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74  ansaction is.act
1e970 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20  ive (other than 
1e980 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e  the implied tran
1e990 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20  saction that is 
1e9a0 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79  created on every
1e9b0 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74  .command) then t
1e9c0 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f  he ROLLBACK reso
1e9d0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1e9e0 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1e9f0 61 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67  as the.ABORT alg
1ea00 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e  orithm.</p></dd>
1ea10 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f  ..<dt><b>ABORT</
1ea20 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1ea30 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1ea40 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1ea50 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1ea60 20 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c   the ABORT.resol
1ea70 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1ea80 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  aborts the curre
1ea90 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
1eaa0 0a 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f  .with an SQLITE_
1eab0 43 4f 4e 53 54 52 41 49 54 20 65 72 72 6f 72 20  CONSTRAIT error 
1eac0 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e  and backs out an
1ead0 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62  y changes.made b
1eae0 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  y the current SQ
1eaf0 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74  L statement; but
1eb00 20 63 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a   changes caused.
1eb10 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61  by prior SQL sta
1eb20 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1eb30 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he same transact
1eb40 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76 65  ion are preserve
1eb50 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61  d and the.transa
1eb60 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
1eb70 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68  tive..This is th
1eb80 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
1eb90 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68 61 76  or and the behav
1eba0 69 6f 72 20 70 72 6f 73 63 72 69 62 65 64 20 74  ior proscribed t
1ebb0 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e  he SQL.standard.
1ebc0 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1ebd0 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a  b>FAIL</b></dt>.
1ebe0 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
1ebf0 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
1ec00 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1ec10 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49   occurs, the FAI
1ec20 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  L.resolution alg
1ec30 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
1ec40 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
1ec50 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a  atement with an.
1ec60 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1ec70 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74  T error.  ^But t
1ec80 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69  he FAIL resoluti
1ec90 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b  on does not.back
1eca0 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67   out prior chang
1ecb0 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  es of the SQL st
1ecc0 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69  atement that fai
1ecd0 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20  led nor does.it 
1ece0 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74  end the transact
1ecf0 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
1ed00 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a  e, if an UPDATE.
1ed10 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e  statement encoun
1ed20 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69  tered a constrai
1ed30 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20  nt violation on 
1ed40 74 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68  the 100th row th
1ed50 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74  at.it attempts t
1ed60 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74  o update, then t
1ed70 68 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20  he first 99 row 
1ed80 63 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73  changes are pres
1ed90 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65  erved.but change
1eda0 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e  s to rows 100 an
1edb0 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f  d beyond never o
1edc0 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ccur.</p></dd>..
1edd0 28 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f  (<dt><b>IGNORE</
1ede0 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1edf0 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1ee00 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1ee10 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1ee20 20 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73   .the IGNORE res
1ee30 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1ee40 6d 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20  m skips the one 
1ee50 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  row that contain
1ee60 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  s.the constraint
1ee70 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63   violation and c
1ee80 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73  ontinues process
1ee90 69 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20 72  ing subsequent r
1eea0 6f 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73  ows.of the SQL s
1eeb0 74 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e  tatement as if n
1eec0 6f 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e  othing went wron
1eed0 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65  g..Other rows be
1eee0 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74  fore and after t
1eef0 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74  he row that.cont
1ef00 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72  ained the constr
1ef10 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
1ef20 72 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75  re inserted or u
1ef30 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e  pdated.normally.
1ef40 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65   ^No error is re
1ef50 74 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20  turned when the 
1ef60 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20  IGNORE conflict 
1ef70 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72  resolution.algor
1ef80 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
1ef90 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52  ></dd>..<dt><b>R
1efa0 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  EPLACE</b></dt>.
1efb0 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20  <dd><p> ^When a 
1efc0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
1efd0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1efe0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
1eff0 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65  algorithm.delete
1f000 73 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72  s pre-existing r
1f010 6f 77 73 20 74 68 61 74 20 61 72 65 20 63 61 75  ows that are cau
1f020 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61  sing the constra
1f030 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72  int violation.pr
1f040 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67  ior to inserting
1f050 20 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65   or updating the
1f060 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64   current row and
1f070 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e   the command con
1f080 74 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e  tinues .executin
1f090 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20  g normally..^If 
1f0a0 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
1f0b0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1f0c0 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
1f0d0 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73  ACE conflict.res
1f0e0 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73  olution replaces
1f0f0 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
1f100 77 69 74 68 0a 68 65 20 64 65 66 61 75 6c 74 20  with.he default 
1f110 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63  value for that c
1f120 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65  olumn, or if the
1f130 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64   column has no d
1f140 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68  efault.value, th
1f150 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  en the ABORT alg
1f160 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a  orithm is used..
1f170 5e 49 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73  ^If a CHECK cons
1f180 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1f190 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1f1a0 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
1f1b0 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
1f1c0 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20  hm always works 
1f1d0 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a  like ABORT.</p>.
1f1e0 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45  .<p>^When the RE
1f1f0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
1f200 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
1f210 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
1f220 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
1f230 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
1f240 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
1f250 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
1f260 65 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64  ers] fire if and
1f270 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73   only if.[recurs
1f280 69 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61  ive_triggers pra
1f290 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20  gma | recursive 
1f2a0 74 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e  triggers] are en
1f2b0 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abled.</p>..<p>^
1f2c0 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64  The [sqlite3_upd
1f2d0 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74  ate_hook | updat
1f2e0 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69  e hook] is not i
1f2f0 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20  nvoked for rows 
1f300 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64  that.are deleted
1f310 20 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20   by the REPLACE 
1f320 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1f330 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e  ion strategy.  ^
1f340 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45  Nor does.REPLACE
1f350 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b   increment the [
1f360 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
1f370 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  | change counter
1f380 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e  ]..The exception
1f390 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66  al behaviors def
1f3a0 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72  ined in this par
1f3b0 61 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61  agraph might cha
1f3c0 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65  nge .in a future
1f3d0 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
1f3e0 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67  dl>..<p>^The alg
1f3f0 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
1f400 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73   in the OR claus
1f410 65 20 6f 66 20 61 20 49 4e 53 45 52 54 20 6f 72  e of a INSERT or
1f420 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65   UPDATE.override
1f430 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20  s any algorithm 
1f440 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43  specified in a C
1f450 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66  REATE TABLE..^If
1f460 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73   no algorithm is
1f470 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68   specified anywh
1f480 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61  ere, the ABORT a
1f490 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
1f4a0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
1f4b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f4d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f4f0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1f500 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e  ion REINDEX rein
1f510 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 42 75 62  dex REINDEX..Bub
1f520 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64  bleDiagram reind
1f530 65 78 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  ex-stmt 1.</tcl>
1f540 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45  ..<p>^The REINDE
1f550 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  X command is use
1f560 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20  d to delete and 
1f570 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  recreate indices
1f580 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54   from scratch..T
1f590 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68  his is useful wh
1f5a0 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  en the definitio
1f5b0 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  n of a collation
1f5c0 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68   sequence has ch
1f5d0 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  anged..</p>..<p>
1f5e0 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
1f5f0 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66  keyword is not f
1f600 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
1f610 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
1f620 6f 72 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a  or database .obj
1f630 65 63 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20  ect identifier, 
1f640 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
1f650 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
1f660 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72   databases are r
1f670 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20  ebuilt...<p>^If 
1f680 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77  the REINDEX keyw
1f690 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ord is followed 
1f6a0 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
1f6b0 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68  equence name, th
1f6c0 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en.all indices i
1f6d0 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
1f6e0 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
1f6f0 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
1f700 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a  ation sequences.
1f710 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a  are recreated. .
1f720 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20  .<p>^Or, if the 
1f730 61 72 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65  argument attache
1f740 64 20 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58  d to the REINDEX
1f750 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
1f760 65 63 69 66 69 63 20 0a 64 61 74 61 62 61 73 65  ecific .database
1f770 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c   table, then all
1f780 20 69 6e 64 69 63 65 73 20 61 74 74 61 63 68 65   indices attache
1f790 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
1f7a0 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75  e table are rebu
1f7b0 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65  ilt. .^If it ide
1f7c0 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66  ntifies a specif
1f7d0 69 63 20 64 61 74 61 62 61 73 65 20 69 6e 64 65  ic database inde
1f7e0 78 2c 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61  x, then just tha
1f7f0 74 20 69 6e 64 65 78 20 69 73 20 72 65 63 72 65  t index is recre
1f800 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f  ated...<p>^If no
1f810 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
1f820 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69  e</i> is specifi
1f830 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69  ed and there exi
1f840 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65  sts both a table
1f850 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20   or.index and a 
1f860 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1f870 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ce of the specif
1f880 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65  ied name, SQLite
1f890 20 69 6e 74 65 72 70 72 65 74 73 0a 74 68 69 73   interprets.this
1f8a0 20 61 73 20 61 20 72 65 71 75 65 73 74 20 74 6f   as a request to
1f8b0 20 72 65 62 75 69 6c 64 20 74 68 65 20 69 6e 64   rebuild the ind
1f8c0 69 63 65 73 20 74 68 61 74 20 75 73 65 20 74 68  ices that use th
1f8d0 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f  e named collatio
1f8e0 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54 68 69 73  n sequence..This
1f8f0 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68   ambiguity in th
1f900 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20  e syntax may be 
1f910 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79  avoided by alway
1f920 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c  s specifying a.<
1f930 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
1f940 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78  /i> when reindex
1f950 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20 74  ing a specific t
1f960 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a  able or index...
1f970 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1f980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9c0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45  #####.Section RE
1f9d0 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52 45  PLACE replace RE
1f9e0 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c  PLACE..</tcl>..<
1f9f0 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63  p>^The REPLACE c
1fa00 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69  ommand is an ali
1fa10 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20  as for the "[ON 
1fa20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52  CONFLICT | INSER
1fa30 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76  T OR REPLACE]".v
1fa40 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49  ariant of the [I
1fa50 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20  NSERT] command. 
1fa60 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20   .This alias is 
1fa70 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d  provided for com
1fa80 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72  patibility other
1fa90 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1faa0 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20  gines.  See the 
1fab0 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e  .[INSERT] comman
1fac0 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  d documentation 
1fad0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1fae0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20  nformation.</p> 
1faf0 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
1fb00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb40 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1fb50 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b   SELECT select {
1fb60 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 42  SELECT query}..B
1fb70 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c  ubbleDiagram sel
1fb80 65 63 74 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c  ect-stmt 1.Bubbl
1fb90 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
1fba0 63 6f 72 65 0a 42 75 62 62 6c 65 44 69 61 67 72  core.BubbleDiagr
1fbb0 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  am result-column
1fbc0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a  .BubbleDiagram j
1fbd0 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c  oin-source.Bubbl
1fbe0 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d  eDiagram single-
1fbf0 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61  source.BubbleDia
1fc00 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62  gram join-op.Bub
1fc10 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d  bleDiagram join-
1fc20 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c  constraint.Bubbl
1fc30 65 44 69 61 67 72 61 6d 20 6f 72 64 65 72 69 6e  eDiagram orderin
1fc40 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65 44 69 61  g-term.BubbleDia
1fc50 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70  gram compound-op
1fc60 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a  erator.</tcl>...
1fc70 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
1fc80 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
1fc90 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
1fca0 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
1fcb0 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
1fcc0 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
1fcd0 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
1fce0 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
1fcf0 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
1fd00 20 63 6f 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e   columns.  ..<p>
1fd10 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
1fd20 6d 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74  ment is the most
1fd30 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d   complicated com
1fd40 6d 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20  mand in the SQL 
1fd50 6c 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b  language..To mak
1fd60 65 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f  e the descriptio
1fd70 6e 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c  n easier to foll
1fd80 6f 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  ow, some of the 
1fd90 70 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64  passages below d
1fda0 65 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20  escribe.the way 
1fdb0 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
1fdc0 64 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74  d by a SELECT st
1fdd0 61 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72  atement is deter
1fde0 6d 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65  mined as a serie
1fdf0 73 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69  s of.steps. It i
1fe00 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b  s important to k
1fe10 65 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74  eep in mind that
1fe20 20 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20   this is purely 
1fe30 69 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69  illustrative -.i
1fe40 6e 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68  n practice neith
1fe50 65 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e  er SQLite nor an
1fe60 79 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69  y other SQL engi
1fe70 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
1fe80 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f  o follow .this o
1fe90 72 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63  r any other spec
1fea0 69 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c  ific process...<
1feb0 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74  h3>Simple Select
1fec0 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e   Processing</h3>
1fed0 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20  ..<p>The syntax 
1fee0 66 6f 72 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  for a simple SEL
1fef0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
1ff00 20 64 65 70 69 63 74 65 64 20 69 6e 20 74 68 65   depicted in the
1ff10 20 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 20 73   .[select-core s
1ff20 79 6e 74 61 78 20 64 69 61 67 72 61 6d 5d 2e 20  yntax diagram]. 
1ff30 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72  Generating the r
1ff40 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70  esults of a simp
1ff50 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  le SELECT.statem
1ff60 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64  ent is presented
1ff70 20 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20   as a four step 
1ff80 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64  process in the d
1ff90 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77  escription below
1ffa0 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c  :..<ol>.  <li> <
1ffb0 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20  p>[FROM clause] 
1ffc0 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20  processing: The 
1ffd0 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74  input data for t
1ffe0 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
1fff0 20 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72   is.       deter
20000 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74  mined. The input
20010 20 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20   data is either 
20020 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e  implicitly a sin
20030 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20  gle row with 0. 
20040 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69        columns (i
20050 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52  f there is no FR
20060 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73  OM clause) or is
20070 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
20080 6e 61 6c 79 7a 69 6e 67 20 74 68 65 0a 20 20 20  nalyzing the.   
20090 20 20 20 20 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65      [join-source
200a0 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 7c   syntax diagram|
200b0 6a 6f 69 6e 2d 73 6f 75 72 63 65 5d 20 73 70 65  join-source] spe
200c0 63 69 66 69 63 61 74 69 6f 6e 20 74 68 61 74 20  cification that 
200d0 66 6f 6c 6c 6f 77 73 20 0a 20 20 20 20 20 20 20  follows .       
200e0 61 6e 20 65 78 70 6c 69 63 69 74 20 46 52 4f 4d  an explicit FROM
200f0 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20   clause..  <li> 
20100 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65  <p>[WHERE clause
20110 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68  ] processing: Th
20120 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20  e input data is 
20130 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74  filtered using t
20140 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20 20  he WHERE.       
20150 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
20160 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  n.  .  <li> <p>[
20170 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42  GROUP BY|GROUP B
20180 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65  Y, HAVING and re
20190 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72  sult-column expr
201a0 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69  ession] processi
201b0 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20  ng: .       The 
201c0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
201d0 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ws is computed b
201e0 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74 68  y aggregating th
201f0 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67  e data according
20200 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47   to.       any G
20210 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61  ROUP BY clause a
20220 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74  nd calculating t
20230 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78  he result-set ex
20240 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68  pressions for th
20250 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66  e.       rows of
20260 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e   the filtered in
20270 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20  put dataset.  . 
20280 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e   <li> <p>[DISTIN
20290 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20  CT|DISTINCT/ALL 
202a0 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73  keyword] process
202b0 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65 72  ing: If the quer
202c0 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20  y is a "SELECT. 
202d0 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20        DISTINCT" 
202e0 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65  query, duplicate
202f0 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
20300 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d from the set o
20310 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c  f result rows..<
20320 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  /ol>..<p>There a
20330 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20  re two types of 
20340 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
20350 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67  atement - aggreg
20360 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67  ate and .non-agg
20370 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 20  regate queries. 
20380 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ^A simple SELECT
20390 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e   statement is an
203a0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
203b0 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20   if.it contains 
203c0 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20 42  either a GROUP B
203d0 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20  Y clause or one 
203e0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
203f0 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74  e functions.in t
20400 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e  he result-set. ^
20410 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61 20  Otherwise, if a 
20420 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f  simple SELECT co
20430 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67  ntains no aggreg
20440 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72  ate.functions or
20450 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
20460 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d  se, it is a non-
20470 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2e  aggregate query.
20480 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72  ..<p><b>1. Deter
20490 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75  mination of inpu
204a0 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61  t data (FROM cla
204b0 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e  use processing).
204c0 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
204d0 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65  gment fromclause
204e0 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
204f0 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c  eywords {FROM cl
20500 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause}</tcl>..<p>
20510 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75  The input data u
20520 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  sed by a simple 
20530 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73 20  SELECT query is 
20540 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69  a set of <i>N</i
20550 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e  > rows .each <i>
20560 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69  M</i> columns wi
20570 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  de...<p>^(If the
20580 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
20590 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73  omitted from a s
205a0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
205b0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  tement, then the
205c0 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73 20   .input data is 
205d0 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e  implicitly a sin
205e0 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c  gle row zero col
205f0 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65  umns wide)^ (i.e
20600 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64  . <i>N</i>=1 and
20610 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c  .<i>M</i>=0)...<
20620 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75  p>If a FROM clau
20630 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
20640 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69   the data on whi
20650 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  ch a simple SELE
20660 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65  CT query.operate
20670 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  s comes from the
20680 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   one or more tab
20690 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
206a0 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d  s (SELECT statem
206b0 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65  ents.in parenthe
206c0 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20 66  sis) specified f
206d0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f  ollowing the FRO
206e0 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75  M keyword. ^A su
206f0 62 2d 73 65 6c 65 63 74 20 73 70 65 63 69 66 69  b-select specifi
20700 65 64 0a 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73  ed.in the join-s
20710 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ource following 
20720 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20730 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  in a simple SELE
20740 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a  CT statement is.
20750 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69 74  handled as if it
20760 20 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e   was a table con
20770 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61  taining the data
20780 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65   returned by exe
20790 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62 2d 73  cuting the.sub-s
207a0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 2e  elect statement.
207b0 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
207c0 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
207d0 64 61 74 61 73 65 74 20 69 6e 68 65 72 69 74 73  dataset inherits
207e0 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c   the.[collation|
207f0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
20800 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74  ce] and [affinit
20810 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  y] of the corres
20820 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69  ponding expressi
20830 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 2d 73 65  on.in the sub-se
20840 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a  lect statement..
20850 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73  .<p>^If there is
20860 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74   only a single t
20870 61 62 6c 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e  able in the join
20880 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e  -source followin
20890 67 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73  g the FROM.claus
208a0 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75  e, then the inpu
208b0 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20 74  t data used by t
208c0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
208d0 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65  ent is the conte
208e0 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64  nts of the.named
208f0 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72   table. ^If ther
20900 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  e is more than o
20910 6e 65 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  ne table specifi
20920 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
20930 65 0a 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f  e.join-source fo
20940 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d  llowing the FROM
20950 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74   keyword, then t
20960 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65  he contents of e
20970 61 63 68 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a  ach named table.
20980 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20  are joined into 
20990 61 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74  a single dataset
209a0 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
209b0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
209c0 20 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a   to operate on..
209d0 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20  Exactly how the 
209e0 64 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64  data is combined
209f0 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20   depends on the 
20a00 73 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f  specific [join-o
20a10 70 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e  p] and.[join-con
20a20 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f  straint] used to
20a30 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62   connect the tab
20a40 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
20a50 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e  s together...<p>
20a60 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c  All joins in SQL
20a70 69 74 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e  ite are based on
20a80 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
20a90 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65  roduct of the le
20aa0 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e  ft and.right-han
20ab0 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65  d datasets. ^The
20ac0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
20ad0 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
20ae0 74 20 64 61 74 61 73 65 74 20 61 72 65 2c 20 69  t dataset are, i
20af0 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68  n .order, all th
20b00 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
20b10 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73   left-hand datas
20b20 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  et followed by a
20b30 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f  ll the columns.o
20b40 66 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  f the right-hand
20b50 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65   dataset. ^There
20b60 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65   is a row in the
20b70 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
20b80 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65  ct dataset.forme
20b90 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65  d by combining e
20ba0 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  ach unique combi
20bb0 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20  nation of a row 
20bc0 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61  from the left-ha
20bd0 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61  nd .and right-ha
20be0 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49  nd datasets. ^(I
20bf0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
20c00 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  f the left-hand 
20c10 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73  dataset consists
20c20 20 6f 66 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20   of.<i>Nlhs</i> 
20c30 72 6f 77 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c  rows of <i>Mlhs<
20c40 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64  /i> columns, and
20c50 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
20c60 64 61 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72  dataset of.<i>Nr
20c70 68 73 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c  hs</i> rows of <
20c80 69 3e 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d  i>Mrhs</i> colum
20c90 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72  ns, then the car
20ca0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69  tesian product i
20cb0 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 3c  s a.dataset of <
20cc0 69 3e 4e 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20  i>Nlhs.Nrhs</i> 
20cd0 72 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61  rows, each conta
20ce0 69 6e 69 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72  ining <i>Mlhs+Mr
20cf0 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29  hs</i> columns.)
20d00 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f  ^..<p>^If the jo
20d10 69 6e 2d 6f 70 20 69 73 20 22 43 52 4f 53 53 20  in-op is "CROSS 
20d20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f  JOIN", "INNER JO
20d30 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61  IN", "JOIN" or a
20d40 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64   comma.(",") and
20d50 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20   there is no ON 
20d60 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c  or USING clause,
20d70 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
20d80 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a   of the join is.
20d90 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74 65  simply the carte
20da0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20  sian product of 
20db0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
20dc0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
20dd0 2e 20 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20  . .^There is no 
20de0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
20df0 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f  en the "INNER JO
20e00 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20  IN", "JOIN" and 
20e10 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f  "," join.operato
20e20 72 73 2e 20 5e 28 54 68 65 20 22 43 52 4f 53 53  rs. ^(The "CROSS
20e30 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72   JOIN" join oper
20e40 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68  ator produces th
20e50 65 20 73 61 6d 65 20 64 61 74 61 20 61 73 20 74  e same data as t
20e60 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  he ."INNER JOIN"
20e70 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
20e80 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75   operators)^, bu
20e90 74 20 69 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70  t is .<a href=op
20ea0 74 6f 76 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d  toverview.html#m
20eb0 61 6e 63 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73  anctrl>handled s
20ec0 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e  lightly differen
20ed0 74 6c 79 20 62 79 20 74 68 65 20 71 75 65 72 79  tly by the query
20ee0 0a 6f 70 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20  .optimizer</a>. 
20ef0 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  Otherwise, it is
20f00 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
20f10 72 6f 64 75 63 74 20 6d 6f 64 69 66 69 65 64 20  roduct modified 
20f20 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e  .according to on
20f30 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  e or more of the
20f40 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65   following bulle
20f50 74 20 70 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e  t points: ..<ul>
20f60 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
20f70 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63  there is an ON c
20f80 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 64 2c  lause specified,
20f90 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70   then the ON exp
20fa0 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20  ression is.     
20fb0 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20    evaluated for 
20fc0 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
20fd0 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
20fe0 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b  t as a .       [
20ff0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
21000 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f  on]. All rows fo
21010 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70 72  r which the expr
21020 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
21030 20 74 6f 20 0a 20 20 20 20 20 20 20 66 61 6c 73   to .       fals
21040 65 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66  e are excluded f
21050 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e  rom the dataset.
21060 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49  )^..  <li> <p>^I
21070 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53 49  f there is a USI
21080 4e 47 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  NG clause specif
21090 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
210a0 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69  he join-constrai
210b0 6e 74 2c 0a 20 20 20 20 20 20 20 74 68 65 6e 20  nt,.       then 
210c0 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75  each of the colu
210d0 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69  mn names specifi
210e0 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
210f0 20 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f   the datasets to
21100 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68   .       both th
21110 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
21120 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 2e   of the join-op.
21130 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69 72   ^(For each pair
21140 20 6f 66 20 6e 61 6d 65 73 61 6b 65 0a 20 20 20   of namesake.   
21150 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65      columns, the
21160 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73   expression "lhs
21170 2e 58 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65  .X = rhs.X" is e
21180 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
21190 68 20 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20  h row of.       
211a0 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
211b0 6f 64 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c  oduct as a [bool
211c0 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
211d0 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68   All rows for wh
211e0 69 63 68 20 6f 6e 65 0a 20 20 20 20 20 20 20 6f  ich one.       o
211f0 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 65 78  r more of the ex
21200 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
21210 74 65 73 20 74 6f 20 66 61 6c 73 65 20 61 72 65  tes to false are
21220 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   excluded from t
21230 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74  he.       result
21240 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f   set.)^ ^When co
21250 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61  mparing values a
21260 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20  s a result of a 
21270 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
21280 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20  e.       normal 
21290 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69  rules for handli
212a0 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63  ng affinities, c
212b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
212c0 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20  es and NULL.    
212d0 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d     values in com
212e0 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20  parisons apply. 
212f0 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ^The column from
21300 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20   the dataset on 
21310 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d  the.       left-
21320 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
21330 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 69   join operator i
21340 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
21350 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  be on the left-h
21360 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20  and.       side 
21370 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
21380 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66  n operator (=) f
21390 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
213a0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  of collation .  
213b0 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e       sequence an
213c0 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65  d affinity prece
213d0 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c  dence...       <
213e0 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72  p>^For each pair
213f0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e   of columns iden
21400 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e  tified by a USIN
21410 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f  G clause, the co
21420 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d  lumn.       from
21430 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
21440 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74  dataset is omitt
21450 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e  ed from the join
21460 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69  ed dataset. ^Thi
21470 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65  s .       is the
21480 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
21490 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47   between a USING
214a0 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20   clause and its 
214b0 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20  equivalent ON.  
214c0 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e       constraint.
214d0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
214e0 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
214f0 77 6f 72 64 20 69 73 20 61 64 64 65 64 20 74 6f  word is added to
21500 20 61 6e 79 20 6f 66 20 74 68 65 20 6a 6f 69 6e   any of the join
21510 2d 6f 70 73 2c 20 74 68 65 6e 20 61 6e 0a 20 20  -ops, then an.  
21520 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53       implicit US
21530 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64  ING clause is ad
21540 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d  ded to the join-
21550 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65  constraints. The
21560 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20   implicit.      
21570 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f   USING clause co
21580 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74  ntains each of t
21590 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
215a0 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62  that appear in b
215b0 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c  oth.       the l
215c0 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61  eft and right-ha
215d0 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  nd input dataset
215e0 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66  s.)^ ^If the lef
215f0 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
21600 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61  .       input da
21610 74 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e  tasets feature n
21620 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20  o common column 
21630 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20  names, then the 
21640 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a  NATURAL keyword.
21650 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66         has no ef
21660 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75  fect on the resu
21670 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e  lts of the join.
21680 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20   ^A USING or ON 
21690 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20  clause may.     
216a0 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74    not be added t
216b0 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70  o a join that sp
216c0 65 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55  ecifies the NATU
216d0 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20  RAL keyword...  
216e0 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
216f0 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 61 20 22 4c   join-op is a "L
21700 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45  EFT JOIN" or "LE
21710 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20  FT OUTER JOIN", 
21720 74 68 65 6e 20 61 66 74 65 72 0a 20 20 20 20 20  then after.     
21730 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e    the ON or USIN
21740 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c 61 75  G filtering clau
21750 73 65 73 20 68 61 76 65 20 62 65 65 6e 20 61 70  ses have been ap
21760 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72 61 20  plied, an extra 
21770 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20 20 61  row is .       a
21780 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75 74 70  dded to the outp
21790 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ut for each row 
217a0 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
217b0 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75 74 20  left-hand input 
217c0 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
217d0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
217e0 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20 61   to no rows at a
217f0 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73  ll in the compos
21800 69 74 65 0a 20 20 20 20 20 20 20 64 61 74 61 73  ite.       datas
21810 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e  et (if any).)^ ^
21820 54 68 65 20 61 64 64 65 64 20 72 6f 77 73 20 63  The added rows c
21830 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75  ontain NULL valu
21840 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  es in the column
21850 73 0a 20 20 20 20 20 20 20 74 68 61 74 20 77 6f  s.       that wo
21860 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e  uld normally con
21870 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f 70 69  tain values copi
21880 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68  ed from the righ
21890 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20 20 20  t-hand input.   
218a0 20 20 20 20 64 61 74 61 73 65 74 2e 20 20 0a 3c      dataset.  .<
218b0 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  /ul>..<p>^(When 
218c0 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 74 61  more than two ta
218d0 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65 64 20  bles are joined 
218e0 74 6f 67 65 74 68 65 72 20 61 73 20 70 61 72 74  together as part
218f0 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73   of a FROM claus
21900 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72  e,.the join oper
21910 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 63 65  ations are proce
21920 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20 66 72  ssed in order fr
21930 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
21940 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64  . In other .word
21950 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  s, the FROM clau
21960 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20  se (A join-op-1 
21970 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69  B join-op-2 C) i
21980 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20 0a 28  s computed as .(
21990 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20  (A join-op-1 B) 
219a0 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a  join-op-2 C).)^.
219b0 20 20 20 20 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32         ..<p><b>2
219c0 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  . WHERE clause f
219d0 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74  iltering.</b>.<t
219e0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
219f0 68 65 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e  hereclause</tcl>
21a00 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
21a10 73 20 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d  s {WHERE clause}
21a20 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 49 66 20  </tcl>..<p>^(If 
21a30 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
21a40 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
21a50 20 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f   WHERE expressio
21a60 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  n is evaluated f
21a70 6f 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20  or .each row in 
21a80 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61  the input data a
21a90 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
21aa0 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f  ression]. All ro
21ab0 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
21ac0 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
21ad0 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
21ae0 65 73 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20  es to false are 
21af0 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  excluded from th
21b00 65 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65  e dataset before
21b10 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a  .continuing.)^..
21b20 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74  <p><b>3. Generat
21b30 69 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f  ion of the set o
21b40 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f  f result rows.</
21b50 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
21b60 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74  ent resultset</t
21b70 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
21b80 6f 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74  ords {result-set
21b90 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47   expressions} {G
21ba0 52 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a  ROUP BY}</tcl>..
21bb0 3c 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75  <p>Once the inpu
21bc0 74 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  t data from the 
21bd0 46 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20  FROM clause has 
21be0 62 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79  been filtered by
21bf0 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
21c00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66  e expression (if
21c10 20 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f   any), the set o
21c20 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f  f result rows fo
21c30 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45  r the simple .SE
21c40 4c 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61  LECT are calcula
21c50 74 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77  ted. Exactly how
21c60 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65   this is done de
21c70 70 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72  pends on whether
21c80 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
21c90 45 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67  ECT is an aggreg
21ca0 61 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65  ate or non-aggre
21cb0 67 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20  gate query, and 
21cc0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
21cd0 20 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65   GROUP.BY clause
21ce0 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a   was specified..
21cf0 0a 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66  .<p> The list of
21d00 20 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74   expressions bet
21d10 77 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20  ween the SELECT 
21d20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  and FROM keyword
21d30 73 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68  s is known as.th
21d40 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
21d50 69 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61  ion list.  ^If a
21d60 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
21d70 6f 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61  on is the specia
21d80 6c 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22  l expression."*"
21d90 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
21da0 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64  s in the input d
21db0 61 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75  ata are substitu
21dc0 74 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65  ted for that one
21dd0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49   expression..^(I
21de0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
21df0 20 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66   is the alias of
21e00 20 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71   a table or subq
21e10 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
21e20 20 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64   clause.followed
21e30 20 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c   by ".*" then al
21e40 6c 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74  l columns from t
21e50 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f  he named table o
21e60 72 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73  r subquery are.s
21e70 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74  ubstituted for t
21e80 68 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73  he single expres
21e90 73 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20  sion.)^ ^(It is 
21ea0 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
21eb0 61 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e  a "*" or."alias.
21ec0 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
21ed0 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68   any context oth
21ee0 65 72 20 74 68 61 6e 20 74 68 61 6e 20 61 20 72  er than than a r
21ef0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
21f00 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73   list.)^.^(It is
21f10 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74   also an error t
21f20 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22  o use a "*" or "
21f30 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
21f40 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20  ion in a simple 
21f50 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61  SELECT.query tha
21f60 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
21f70 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e  a FROM clause.)^
21f80 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62  ..<p> ^(The numb
21f90 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
21fa0 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e   the rows return
21fb0 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53  ed by a simple S
21fc0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
21fd0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  is equal to the 
21fe0 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  number of expres
21ff0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
22000 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
22010 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74 69  ist after.substi
22020 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20  tution of * and 
22030 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69  alias.* expressi
22040 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75  ons.)^ Each resu
22050 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c  lt row is calcul
22060 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69  ated by.evaluati
22070 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ng the expressio
22080 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
22090 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
220a0 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
220b0 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a.single row of
220c0 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20   input data or, 
220d0 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71 75  for aggregate qu
220e0 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73 70  eries, with resp
220f0 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f  ect to a group.o
22100 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20  f rows...<ul>.  
22110 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
22120 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
22130 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72  is <b>a non-aggr
22140 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c  egate query</b>,
22150 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20   then .    each 
22160 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
22170 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
22180 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c  ion list is eval
22190 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
221a0 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61  ow in.    the da
221b0 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20 62  taset filtered b
221c0 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  y the WHERE clau
221d0 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  se...  <li><p>^I
221e0 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
221f0 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20  tement is <b>an 
22200 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
22210 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a  without a GROUP.
22220 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73      BY</b> claus
22230 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67 67  e, then each agg
22240 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
22250 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
22260 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c  set is .    eval
22270 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73  uated once acros
22280 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  s the entire dat
22290 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d  aset. ^Each non-
222a0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
222b0 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20  sion.    in the 
222c0 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76  result-set is ev
222d0 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
222e0 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20   an arbitrarily 
222f0 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a  selected row of.
22300 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e      the dataset.
22310 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69 74   ^The same arbit
22320 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20  rarily selected 
22330 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  row is used for 
22340 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67  each.    non-agg
22350 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
22360 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64  n. ^Or, if the d
22370 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ataset contains 
22380 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20  zero rows, then 
22390 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67  .    each non-ag
223a0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
223b0 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
223c0 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f  against a row co
223d0 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74  nsisting.    ent
223e0 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61  irely of NULL va
223f0 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68  lues...   <p>^Th
22400 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  e single row of 
22410 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20  result-set data 
22420 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c 75  created by evalu
22430 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65 67  ating the aggreg
22440 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d  ate.    and non-
22450 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
22460 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
22470 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68  ult-set forms th
22480 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20  e result of an. 
22490 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75 65     aggregate que
224a0 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
224b0 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41  UP BY clause. ^A
224c0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
224d0 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20  y without a.    
224e0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
224f0 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65  always returns e
22500 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f  xactly one row o
22510 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20  f data, even if 
22520 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65  there are.    ze
22530 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74  ro rows of input
22540 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70   data...  <li><p
22550 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43 54  >^(If the SELECT
22560 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
22570 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75  >an aggregate qu
22580 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
22590 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
225a0 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66  se, then each of
225b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
225c0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
225d0 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52  rt of the.    GR
225e0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69 73  OUP BY clause is
225f0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
22600 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64  ach row of the d
22610 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77  ataset. Each row
22620 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73 73  .    is then ass
22630 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75  igned to a "grou
22640 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  p" based on the 
22650 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f  results; rows fo
22660 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65 20  r which.    the 
22670 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75  results of evalu
22680 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20  ating the GROUP 
22690 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  BY expressions a
226a0 72 65 20 74 68 65 20 73 61 6d 65 20 61 72 65 0a  re the same are.
226b0 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20      assigned to 
226c0 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29  the same group.)
226d0 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  ^ ^For the purpo
226e0 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20  ses of grouping 
226f0 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20  rows, NULL .    
22700 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
22710 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68  dered equal. ^Th
22720 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f  e usual rules fo
22730 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c  r [collation|sel
22740 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c  ecting a.    col
22750 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
22760 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63   with which to c
22770 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75  ompare text valu
22780 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76  es apply when ev
22790 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70  aluating.    exp
227a0 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52  ressions in a GR
227b0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20  OUP BY clause.  
227c0 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  ^The expressions
227d0 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59   in the GROUP BY
227e0 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c   clause.    do <
227f0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65  em>not</em> have
22800 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f   to be expressio
22810 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  ns that appear i
22820 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54  n the result. ^T
22830 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  he.    expressio
22840 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
22850 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20   clause may not 
22860 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70  be aggregate exp
22870 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c  ressions...    <
22880 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20  p>^(If a HAVING 
22890 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
228a0 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ied, it is evalu
228b0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
228c0 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66  ch group .    of
228d0 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c   rows as a [bool
228e0 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
228f0 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   If the result o
22900 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
22910 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75  .    HAVING clau
22920 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  se is false, the
22930 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61 72   group is discar
22940 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48  ded.)^ ^If the H
22950 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a  AVING clause is.
22960 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74 65      an aggregate
22970 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
22980 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63 72  is evaluated acr
22990 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
229a0 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20  the group. ^If. 
229b0 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75     a HAVING clau
229c0 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72  se is a non-aggr
229d0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
229e0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
229f0 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a 20  d with respect. 
22a00 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61     to an arbitra
22a10 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
22a20 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70  w from the group
22a30 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65  .  ^The HAVING e
22a40 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20  xpression may.  
22a50 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65    refer to value
22a60 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74  s, even aggregat
22a70 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61  e functions, tha
22a80 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65  t are not in the
22a90 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20   result.</p>..  
22aa0 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65    <p>^Each expre
22ab0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
22ac0 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20  ult-set is then 
22ad0 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
22ae0 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75  or each.    grou
22af0 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74  p of rows. ^If t
22b00 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
22b10 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
22b20 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
22b30 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61  .    evaluated a
22b40 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69  cross all rows i
22b50 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74  n the group. ^Ot
22b60 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65  herwise, it is e
22b70 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
22b80 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72  .    a single ar
22b90 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e  bitrarily chosen
22ba0 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e   row from within
22bb0 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20   the group. ^If 
22bc0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20  there is more.  
22bd0 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61    than one non-a
22be0 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
22bf0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
22c00 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20  t-set, then all 
22c10 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73  such.    express
22c20 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
22c30 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ed for the same 
22c40 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61  row...    <p>^Ea
22c50 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75  ch group of inpu
22c60 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63  t dataset rows c
22c70 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e  ontributes a sin
22c80 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a  gle row to the .
22c90 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c      set of resul
22ca0 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74  t rows. ^Subject
22cb0 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73   to filtering as
22cc0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
22cd0 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b  e DISTINCT.    k
22ce0 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62  eyword, the numb
22cf0 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72  er of rows retur
22d00 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67  ned by an aggreg
22d10 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61  ate query with a
22d20 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c   GROUP.    BY cl
22d30 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
22d40 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
22d50 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73  f groups of rows
22d60 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70   produced by app
22d70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52  lying.    the GR
22d80 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e  OUP BY and HAVIN
22d90 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65  G clauses to the
22da0 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
22db0 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a  dataset..</ul>..
22dc0 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c  <p><b>4. Removal
22dd0 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f   of duplicate ro
22de0 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f  ws (DISTINCT pro
22df0 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74  cessing).</b>.<t
22e00 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64  cl>hd_fragment d
22e10 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74  istinct</tcl>.<t
22e20 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
22e30 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a  DISTINCT}</tcl>.
22e40 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20  .<p>^One of the 
22e50 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20  ALL or DISTINCT 
22e60 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c  keywords may fol
22e70 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b  low the SELECT k
22e80 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d  eyword in a .sim
22e90 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
22ea0 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69  ment. ^If the si
22eb0 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
22ec0 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65   SELECT ALL, the
22ed0 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74  n the.entire set
22ee0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
22ef0 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  are returned by 
22f00 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20  the SELECT. ^If 
22f10 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44  neither ALL or.D
22f20 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65 73  ISTINCT are pres
22f30 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65  ent, then the be
22f40 68 61 76 69 6f 75 72 20 69 73 20 61 73 20 69 66  haviour is as if
22f50 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66   ALL were specif
22f60 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69  ied. .^If the si
22f70 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
22f80 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
22f90 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65  , then duplicate
22fa0 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
22fb0 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d.from the set o
22fc0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65  f result rows be
22fd0 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72  fore it is retur
22fe0 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  ned. ^For the pu
22ff0 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74  rposes of.detect
23000 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
23010 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c  ws, two NULL val
23020 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
23030 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20  ed to be equal. 
23040 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65  ^The.normal rule
23050 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20  s for selecting 
23060 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
23070 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20  ence to compare 
23080 74 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68  text values with
23090 0a 61 70 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d  .apply...<h3>Com
230a0 70 6f 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61  pound Select Sta
230b0 74 65 6d 65 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f  tements.<tcl>hd_
230c0 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e  fragment compoun
230d0 64 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  d</tcl>.<tcl>hd_
230e0 6b 65 79 77 6f 72 64 73 20 7b 63 6f 6d 70 6f 75  keywords {compou
230f0 6e 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70  nd select} {comp
23100 6f 75 6e 64 20 71 75 65 72 79 7d 3c 2f 74 63 6c  ound query}</tcl
23110 3e 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20  >.</h3>..<p>Two 
23120 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53  or more simple S
23130 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
23140 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65   may be connecte
23150 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f  d together to fo
23160 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  rm.a compound SE
23170 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55  LECT using the U
23180 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c  NION, UNION ALL,
23190 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58   INTERSECT or EX
231a0 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2e 0a 5e  CEPT operator..^
231b0 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  In a compound SE
231c0 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f  LECT, all the co
231d0 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
231e0 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68  s must return th
231f0 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f  e same .number o
23200 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  f result columns
23210 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e  . ^As the compon
23220 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75  ents of a compou
23230 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62  nd SELECT must.b
23240 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
23250 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79  statements, they
23260 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
23270 20 4f 52 44 45 52 20 42 59 20 6f 72 20 4c 49 4d   ORDER BY or LIM
23280 49 54 20 63 6c 61 75 73 65 73 2e 0a 5e 4f 52 44  IT clauses..^ORD
23290 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
232a0 63 6c 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79  clauses may only
232b0 20 6f 63 63 75 72 20 61 74 20 74 68 65 20 65 6e   occur at the en
232c0 64 20 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20  d of the entire 
232d0 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2e  compound.SELECT.
232e0 20 20 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75    ..<p>^A compou
232f0 6e 64 20 53 45 4c 45 43 54 20 63 72 65 61 74 65  nd SELECT create
23300 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c  d using UNION AL
23310 4c 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72  L operator retur
23320 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a  ns all the rows.
23330 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20  from the SELECT 
23340 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74  to the left of t
23350 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65  he UNION ALL ope
23360 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74  rator, and all t
23370 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65  he rows.from the
23380 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72   SELECT to the r
23390 69 67 68 74 20 6f 66 20 69 74 2e 20 5e 54 68 65  ight of it. ^The
233a0 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20   UNION operator 
233b0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77  works the same w
233c0 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c  ay as.UNION ALL,
233d0 20 65 78 63 65 70 74 20 74 68 61 74 20 64 75 70   except that dup
233e0 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
233f0 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
23400 20 66 69 6e 61 6c 20 72 65 73 75 6c 74 20 73 65   final result se
23410 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43  t..^The INTERSEC
23420 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72  T operator retur
23430 6e 73 20 74 68 65 20 69 6e 74 65 72 73 65 63 74  ns the intersect
23440 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ion of the resul
23450 74 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ts of the left a
23460 6e 64 0a 72 69 67 68 74 20 53 45 4c 45 43 54 73  nd.right SELECTs
23470 2e 20 20 5e 54 68 65 20 45 58 43 45 50 54 20 6f  .  ^The EXCEPT o
23480 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
23490 74 68 65 20 73 75 62 73 65 74 20 6f 66 20 72 6f  the subset of ro
234a0 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
234b0 68 65 0a 6c 65 66 74 20 53 45 4c 45 43 54 20 74  he.left SELECT t
234c0 68 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f  hat are not also
234d0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
234e0 20 72 69 67 68 74 2d 68 61 6e 64 20 53 45 4c 45   right-hand SELE
234f0 43 54 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a 72  CT. ^Duplicate.r
23500 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ows are removed 
23510 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73  from the results
23520 20 6f 66 20 49 4e 54 45 52 53 45 43 54 20 61 6e   of INTERSECT an
23530 64 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f  d EXCEPT operato
23540 72 73 20 62 65 66 6f 72 65 20 74 68 65 0a 72 65  rs before the.re
23550 73 75 6c 74 20 73 65 74 20 69 73 20 72 65 74 75  sult set is retu
23560 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74  rned...<p>^For t
23570 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
23580 65 74 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69  etermining dupli
23590 63 61 74 65 20 72 6f 77 73 20 66 6f 72 20 74 68  cate rows for th
235a0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d  e results of com
235b0 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65  pound.SELECT ope
235c0 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c  rators, NULL val
235d0 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
235e0 65 64 20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65  ed equal to othe
235f0 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e  r NULL values an
23600 64 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  d.distinct from 
23610 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
23620 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74  ues. ^The collat
23630 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65  ion sequence use
23640 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77  d to compare .tw
23650 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73  o text values is
23660 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 69   determined as i
23670 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  f the columns of
23680 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
23690 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20  ght-hand.SELECT 
236a0 73 74 61 74 65 6d 65 6e 74 73 20 77 65 72 65 20  statements were 
236b0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
236c0 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73  ht-hand operands
236d0 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 28   of the equals (
236e0 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78 63  =).operator, exc
236f0 65 70 74 20 74 68 61 74 20 67 72 65 61 74 65 72  ept that greater
23700 20 70 72 65 63 65 64 65 6e 63 65 20 69 73 20 6e   precedence is n
23710 6f 74 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61  ot assigned to a
23720 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75   collation .sequ
23730 65 6e 63 65 20 73 70 65 63 69 66 69 65 64 20 77  ence specified w
23740 69 74 68 20 74 68 65 20 70 6f 73 74 66 69 78 20  ith the postfix 
23750 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
23760 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74  . ^No affinity.t
23770 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61  ransformations a
23780 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e  re applied to an
23790 79 20 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f  y values when co
237a0 6d 70 61 72 69 6e 67 20 72 6f 77 73 20 61 73 20  mparing rows as 
237b0 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75  part of a.compou
237c0 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e  nd SELECT. ..<p>
237d0 5e 28 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20  ^(When three or 
237e0 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  more simple SELE
237f0 43 54 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65  CTs are connecte
23800 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e  d into a compoun
23810 64 20 53 45 4c 45 43 54 2c 0a 74 68 65 79 20 67  d SELECT,.they g
23820 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74  roup from left t
23830 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65  o right. In othe
23840 72 20 77 6f 72 64 73 2c 20 69 66 20 22 41 22 2c  r words, if "A",
23850 20 22 42 22 20 61 6e 64 20 22 43 22 20 61 72 65   "B" and "C" are
23860 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45   all.simple SELE
23870 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 28  CT statements, (
23880 41 20 6f 70 20 42 20 6f 70 20 43 29 20 69 73 20  A op B op C) is 
23890 70 72 6f 63 65 73 73 65 64 20 61 73 20 28 28 41  processed as ((A
238a0 20 6f 70 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a   op B) op C).)^.
238b0 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
238c0 72 61 67 6d 65 6e 74 20 6f 72 64 65 72 62 79 20  ragment orderby 
238d0 7b 6f 72 64 65 72 20 62 79 7d 3c 2f 74 63 6c 3e  {order by}</tcl>
238e0 0a 3c 68 33 3e 4f 52 44 45 52 20 42 59 20 61 6e  .<h3>ORDER BY an
238f0 64 20 4c 49 4d 49 54 2f 4f 46 46 53 45 54 20 43  d LIMIT/OFFSET C
23900 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  lauses</h3>..<p>
23910 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  If a SELECT stat
23920 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75 72  ement that retur
23930 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  ns more than one
23940 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61   row does not ha
23950 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63  ve an.ORDER BY c
23960 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72  lause, the order
23970 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f   in which the ro
23980 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws are returned 
23990 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72  is undefined..Or
239a0 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73 74  , if a SELECT st
239b0 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76  atement does hav
239c0 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  e an ORDER BY cl
239d0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c  ause, then the l
239e0 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f  ist of.expressio
239f0 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  ns attached to t
23a00 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74 65  he ORDER BY dete
23a10 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20  rmine the order 
23a20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72  in which rows.ar
23a30 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  e returned to th
23a40 65 20 75 73 65 72 2e 20 5e 52 6f 77 73 20 61 72  e user. ^Rows ar
23a50 65 20 66 69 72 73 74 20 73 6f 72 74 65 64 20 62  e first sorted b
23a60 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
23a70 6c 74 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e  lts of.evaluatin
23a80 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
23a90 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
23aa0 65 20 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c  e ORDER BY list,
23ab0 20 74 68 65 6e 20 74 69 65 73 20 61 72 65 20 62   then ties are b
23ac0 72 6f 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74  roken.by evaluat
23ad0 69 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c  ing the second l
23ae0 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
23af0 69 6f 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54  ion and so on. T
23b00 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
23b10 68 0a 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77  h.two rows for w
23b20 68 69 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42  hich all ORDER B
23b30 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  Y expressions ev
23b40 61 6c 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20  aluate to equal 
23b50 76 61 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72  values are.retur
23b60 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
23b70 2e 20 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59  . ^Each ORDER BY
23b80 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
23b90 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
23ba0 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66  llowed.by one of
23bb0 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53   the keywords AS
23bc0 43 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  C (smaller value
23bd0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
23be0 69 72 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c  irst) or DESC (l
23bf0 61 72 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65  arger.values are
23c00 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
23c10 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53  . ^If neither AS
23c20 43 20 6f 72 20 44 45 53 43 20 61 72 65 20 73 70  C or DESC are sp
23c30 65 63 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72  ecified, rows.ar
23c40 65 20 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65  e sorted in asce
23c50 6e 64 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76  nding (smaller v
23c60 61 6c 75 65 73 20 66 69 72 73 74 29 20 6f 72 64  alues first) ord
23c70 65 72 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a  er by default...
23c80 3c 70 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59  <p>Each ORDER BY
23c90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70   expression is p
23ca0 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c  rocessed as foll
23cb0 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
23cc0 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
23cd0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
23ce0 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  n is a constant 
23cf0 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74  integer K then t
23d00 68 65 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he.expression is
23d10 20 63 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61   considered an a
23d20 6c 69 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74  lias for the K-t
23d30 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
23d40 72 65 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75  result set.(colu
23d50 6d 6e 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64  mns are numbered
23d60 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
23d70 67 68 74 20 73 74 61 72 74 69 6e 67 20 77 69 74  ght starting wit
23d80 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49  h 1)...<li><p>^I
23d90 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
23da0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
23db0 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
23dc0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74  corresponds to.t
23dd0 68 65 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20  he alias of one 
23de0 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f  of the output co
23df0 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  lumns, then the 
23e00 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
23e10 6e 73 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61  nsidered.an alia
23e20 73 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  s for that colum
23e30 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  n...<li><p>^Othe
23e40 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
23e50 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
23e60 6e 20 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65  n is any other e
23e70 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69  xpression, it .i
23e80 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  s evaluated and 
23e90 74 68 65 20 74 68 65 20 72 65 74 75 72 6e 65 64  the the returned
23ea0 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 6f   value used to o
23eb0 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74 20  rder the output 
23ec0 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53 45  rows. ^If.the SE
23ed0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
23ee0 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  s a simple SELEC
23ef0 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45 52  T, then an ORDER
23f00 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20   BY may contain 
23f10 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65 78  any.arbitrary ex
23f20 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77 65  pressions. ^Howe
23f30 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ver, if the SELE
23f40 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64  CT is a compound
23f50 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f 52   SELECT, then.OR
23f60 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
23f70 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
23f80 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70 75  aliases to outpu
23f90 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20 62  t columns must b
23fa0 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73 61  e exactly.the sa
23fb0 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73 73  me as an express
23fc0 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20 6f  ion used as an o
23fd0 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f  utput column..</
23fe0 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ol>..<p>^For the
23ff0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f 72   purposes of sor
24000 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75 65  ting rows, value
24010 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  s are compared i
24020 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 61  n the same way.a
24030 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73 6f  s for [compariso
24040 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e 20  n expressions]. 
24050 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
24060 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63  quence used to c
24070 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74 20  ompare.two text 
24080 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
24090 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ined as follows:
240a0 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ol>.  <li><p>
240b0 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
240c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
240d0 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
240e0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
240f0 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69 78  ng.  the postfix
24100 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74   [COLLATE operat
24110 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73 70  or], then the sp
24120 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69 6f  ecified collatio
24130 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20 20  n sequence is.  
24140 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  used..  <li><p>^
24150 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
24160 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
24170 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69 61  ssion is an alia
24180 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69  s to an expressi
24190 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62 65  on.  that has be
241a0 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f  en assigned a co
241b0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
241c0 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74 66   using the postf
241d0 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20 6f  ix .  [COLLATE o
241e0 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
241f0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
24200 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20 74  uence assigned t
24210 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20 20  o the aliased.  
24220 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
24230 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74  ed..  <li><p>^Ot
24240 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20  herwise, if the 
24250 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
24260 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  ion is a column 
24270 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a 20  or an alias of. 
24280 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
24290 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e 2c  hat is a column,
242a0 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
242b0 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
242c0 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20 63  ence for.  the c
242d0 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20 0a  olumn is used. .
242e0 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
242f0 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52 59  ise, the [BINARY
24300 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  ] collation sequ
24310 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c 2f  ence is used..</
24320 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d  ol>..<p>In a com
24330 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61  pound SELECT sta
24340 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44 45  tement, all ORDE
24350 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73  R BY expressions
24360 20 61 72 65 20 68 61 6e 64 6c 65 64 0a 61 73 20   are handled.as 
24370 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 6e 65 20  aliases for one 
24380 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
24390 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f 6d  lumns of the com
243a0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 0a 5e 28  pound SELECT..^(
243b0 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  If an ORDER BY e
243c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74  xpression is not
243d0 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61   an integer alia
243e0 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  s, then SQLite s
243f0 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74  earches.the left
24400 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20  -most SELECT in 
24410 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72  the compound for
24420 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
24430 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 69   that matches ei
24440 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20  ther.the second 
24450 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20 61  or third rules a
24460 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68  bove. If a match
24470 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
24480 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a  earch stops and.
24490 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
244a0 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20  s handled as an 
244b0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 65  alias for the re
244c0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
244d0 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74   it has been.mat
244e0 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74  ched against. Ot
244f0 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78  herwise, the nex
24500 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
24510 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c 20  right is tried, 
24520 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66  and so on.)^.^If
24530 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70   no matching exp
24540 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66  ression can be f
24550 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75  ound in the resu
24560 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  lt columns of an
24570 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  y.constituent SE
24580 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65  LECT, it is an e
24590 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d  rror. ^Each term
245a0 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
245b0 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65   clause is.proce
245c0 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20  ssed separately 
245d0 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68  and may be match
245e0 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c  ed against resul
245f0 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64  t columns from d
24600 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20  ifferent.SELECT 
24610 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
24620 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  e compound.</p>.
24630 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c  .<p>The LIMIT cl
24640 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20  ause is used to 
24650 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62  place an upper b
24660 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
24670 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72  er of rows.retur
24680 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54 20  ned by a SELECT 
24690 73 74 61 74 65 6d 65 6e 74 2e 20 5e 41 6e 79 20  statement. ^Any 
246a0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
246b0 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  n may be used in
246c0 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75   the .LIMIT clau
246d0 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69  se, so long as i
246e0 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  t evaluates to a
246f0 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76  n integer or a v
24700 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
24710 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
24720 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
24730 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ger. ^If the exp
24740 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
24750 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c  s to a NULL .val
24760 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  ue or any other 
24770 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
24780 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
24790 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
247a0 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f  integer, an.erro
247b0 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  r is returned. ^
247c0 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  If the LIMIT exp
247d0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
247e0 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
247f0 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72  value,.then ther
24800 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f  e is no upper bo
24810 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
24820 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
24830 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  ed. ^Otherwise, 
24840 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72  the.SELECT retur
24850 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72  ns the first N r
24860 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c  ows of its resul
24870 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72  t set only, wher
24880 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65  e N is the value
24890 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20  .that the LIMIT 
248a0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
248b0 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66  ates to. ^Or, if
248c0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
248d0 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75  ement would.retu
248e0 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72  rn less than N r
248f0 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49  ows without a LI
24900 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
24910 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75   the entire resu
24920 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e  lt set is.return
24930 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78  ed. ..<p>^The ex
24940 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65  pression attache
24950 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61  d to the optiona
24960 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  l OFFSET clause 
24970 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20  that may follow 
24980 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  a.LIMIT clause m
24990 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74  ust also evaluat
249a0 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  e to an integer,
249b0 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74   or a value that
249c0 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73   can be.lossless
249d0 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
249e0 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20  an integer. ^If 
249f0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61  an expression ha
24a00 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
24a10 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72  se,.then the fir
24a20 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d  st M rows are om
24a30 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72  itted from the r
24a40 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e  esult set return
24a50 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
24a60 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74  .statement and t
24a70 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61  he next N rows a
24a80 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65  re returned, whe
24a90 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74  re M and N are t
24aa0 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74  he values that.t
24ab0 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49  he OFFSET and LI
24ac0 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c  MIT clauses eval
24ad0 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74  uate to, respect
24ae0 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74  ively. ^Or, if t
24af0 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20  he SELECT.would 
24b00 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
24b10 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20   M+N rows if it 
24b20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c  did not have a L
24b30 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
24b40 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f  n the.first M ro
24b50 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61  ws are skipped a
24b60 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  nd the remaining
24b70 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61   rows (if any) a
24b80 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66  re returned. ^If
24b90 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75   the.OFFSET clau
24ba0 73 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  se evaluates to 
24bb0 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
24bc0 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72  , the results ar
24bd0 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66  e the same as if
24be0 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65   it.had evaluate
24bf0 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e  d to zero...<p>^
24c00 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70  Instead of a sep
24c10 61 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61  arate OFFSET cla
24c20 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63  use, the LIMIT c
24c30 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66  lause may specif
24c40 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70  y two.scalar exp
24c50 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74  ressions separat
24c60 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e  ed by a comma. ^
24c70 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
24c80 65 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69  e first expressi
24c90 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68  on.is used as th
24ca0 65 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  e OFFSET express
24cb0 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f  ion and the seco
24cc0 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20  nd as the LIMIT 
24cd0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73  expression..This
24ce0 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75   is counter-intu
24cf0 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75  itive, as when u
24d00 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  sing the OFFSET 
24d10 63 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e  clause the secon
24d20 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70  d of.the two exp
24d30 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20  ressions is the 
24d40 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66  OFFSET and the f
24d50 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20  irst the LIMIT. 
24d60 54 68 69 73 20 69 73 20 69 6e 74 65 6e 74 69 6f  This is intentio
24d70 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69 7a  nal.- it maximiz
24d80 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  es compatibility
24d90 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c 20   with other SQL 
24da0 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73  database systems
24db0 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
24dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24e00 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
24e10 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55  UPDATE update {U
24e20 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a  PDATE *UPDATEs}.
24e30 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  .BubbleDiagram u
24e40 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75 62  pdate-stmt 1.Bub
24e50 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
24e60 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
24e70 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55  </tcl>..<p>^An U
24e80 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
24e90 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66  is used to modif
24ea0 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68  y a subset of th
24eb0 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
24ec0 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  in .zero or more
24ed0 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74   rows of the dat
24ee0 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e  abase table iden
24ef0 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 3c  tified by the .<
24f00 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  i>qualified-tabl
24f10 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69  e-name</i> speci
24f20 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
24f30 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
24f40 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ment...<p>^If th
24f50 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
24f60 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  nt does not have
24f70 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
24f80 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
24f90 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69 66  .table are modif
24fa0 69 65 64 20 62 79 20 74 68 65 20 55 50 44 41 54  ied by the UPDAT
24fb0 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  E. ^Otherwise, t
24fc0 68 65 20 55 50 44 41 54 45 20 61 66 66 65 63 74  he UPDATE affect
24fd0 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77  s only those.row
24fe0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
24ff0 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
25000 74 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63  ting the WHERE c
25010 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
25020 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e 20   as a .[boolean 
25030 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65  expression|boole
25040 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
25050 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e   true]. ^It is n
25060 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ot an error if t
25070 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
25080 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74  does not evaluat
25090 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e  e to true for an
250a0 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62  y row in the tab
250b0 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d  le - this just.m
250c0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55 50  eans that the UP
250d0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
250e0 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73  ffects zero rows
250f0 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69  ...<p>The modifi
25100 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20  cations made to 
25110 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74 65  each row affecte
25120 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20 73  d by an UPDATE s
25130 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74  tatement are.det
25140 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c  ermined by the l
25150 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
25160 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
25170 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61   SET keyword. Ea
25180 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70  ch.assignment sp
25190 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75 6d 6e  ecifies a column
251a0 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66   name to the lef
251b0 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  t of the equals 
251c0 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61  sign and a.scala
251d0 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  r expression to 
251e0 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72 20  the right. ^For 
251f0 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f  each affected ro
25200 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  w, the named col
25210 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20  umns.are set to 
25220 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64  the values found
25230 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
25240 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
25250 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73   scalar .express
25260 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67  ions. ^If a sing
25270 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61  le column-name a
25280 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e  ppears more than
25290 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73   once in the lis
252a0 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20  t of.assignment 
252b0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c  expressions, all
252c0 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f   but the rightmo
252d0 73 74 20 6f 63 63 75 72 65 6e 63 65 20 69 73 20  st occurence is 
252e0 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e  ignored. ^Column
252f0 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  s.that do not ap
25300 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73 74  pear in the list
25310 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20   of assignments 
25320 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69 66  are left unmodif
25330 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61 72  ied. ^The scalar
25340 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79  .expressions may
25350 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e   refer to column
25360 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69  s of the row bei
25370 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e 20  ng updated. ^In 
25380 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73 63  this case all.sc
25390 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73  alar expressions
253a0 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62   are evaluated b
253b0 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e  efore any assign
253c0 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a  ments are made..
253d0 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61  .<p>^The optiona
253e0 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
253f0 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  e allows the use
25400 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20  r to nominate a 
25410 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61  specific.constra
25420 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
25430 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
25440 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
25450 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20  this one UPDATE 
25460 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74  command..Refer t
25470 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e  o the section en
25480 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  titled [ON CONFL
25490 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
254a0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
254b0 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f  ..<h3>Restrictio
254c0 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61  ns on UPDATE Sta
254d0 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43  tements Within C
254e0 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68  REATE TRIGGER</h
254f0 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f  3>..<p>The follo
25500 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20  wing additional 
25510 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69  syntax restricti
25520 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44  ons apply to UPD
25530 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ATE statements t
25540 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e  hat.occur within
25550 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b   the body of a [
25560 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
25570 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75  statement.  ..<u
25580 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  l>.  <li><p>^The
25590 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
255a0 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
255b0 70 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54  part of an UPDAT
255c0 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
255d0 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67  in.      a trigg
255e0 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20  er body must be 
255f0 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49  unqualified. ^(I
25600 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25610 68 65 0a 20 20 20 20 20 20 3c 69 3e 64 61 74 61  he.      <i>data
25620 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
25630 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20  .</b> prefix on 
25640 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f  the table name o
25650 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73 0a  f the UPDATE is.
25660 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65        not allowe
25670 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  d within trigger
25680 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65  s.)^ ^Unless the
25690 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20   table to which 
256a0 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
256b0 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73    is attached is
256c0 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74   in the TEMP dat
256d0 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65  abase, the table
256e0 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 62   being updated b
256f0 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69 67  y the.      trig
25700 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  ger program must
25710 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 73   reside in the s
25720 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
25730 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
25740 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63 68  e.      to which
25750 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
25760 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74  attached is in t
25770 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
25780 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20  , then the.     
25790 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
257a0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
257b0 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73 20  eing updated is 
257c0 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
257d0 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61  same way.      a
257e0 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f  s it is for a to
257f0 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
25800 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20  t (by searching 
25810 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64  first the TEMP d
25820 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74  atabase,.      t
25830 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74  hen the main dat
25840 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
25850 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
25860 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
25870 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74 74  y were.      att
25880 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c  ached)...  <li><
25890 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
258a0 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
258b0 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
258c0 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44  t allowed on UPD
258d0 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d  ATE.      statem
258e0 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
258f0 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
25900 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
25910 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
25920 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20 61  ses for UPDATE a
25930 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77  re unsupported w
25940 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67  ithin.      trig
25950 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  gers, regardless
25960 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74   of the compilat
25970 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64  ion options used
25980 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
25990 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74  ..</ul>..<h3>Opt
259a0 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20  ional LIMIT and 
259b0 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65 73  ORDER BY Clauses
259c0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53  </h3>..<p>^(If S
259d0 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77  QLite is built w
259e0 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
259f0 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
25a00 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
25a10 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
25a20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
25a30 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
25a40 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e  atement is exten
25a50 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61  ded.with optiona
25a60 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  l ORDER BY and L
25a70 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61  IMIT clauses)^ a
25a80 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
25a90 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
25aa0 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c  am update-stmt-l
25ab0 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70  imited</tcl>..<p
25ac0 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
25ad0 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c  tatement has a L
25ae0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
25af0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
25b00 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c  of rows that.wil
25b10 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73 20  l be updated is 
25b20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
25b30 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e  ing the accompan
25b40 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  ying expression 
25b50 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74  and casting.it t
25b60 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
25b70 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20  ue. ^A negative 
25b80 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72  value is interpr
25b90 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69  eted as "no limi
25ba0 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  t"...<p>^If the 
25bb0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
25bc0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f   evaluates to no
25bd0 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
25be0 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68   <i>N</i> and th
25bf0 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e.UPDATE stateme
25c00 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20  nt has an ORDER 
25c10 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
25c20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f  all rows that wo
25c30 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69  uld be updated i
25c40 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n.the absence of
25c50 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
25c60 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63 63  e are sorted acc
25c70 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52  ording to the OR
25c80 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66  DER BY and the.f
25c90 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70  irst <i>N</i> up
25ca0 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20  dated. ^(If the 
25cb0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
25cc0 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46   also has an OFF
25cd0 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
25ce0 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
25cf0 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
25d00 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ast to an intege
25d10 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20  r value. If the 
25d20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f  OFFSET.expressio
25d30 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
25d40 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
25d50 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68  lue <i>M</i>, th
25d60 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e  en the first <i>
25d70 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73  M</i>.rows are s
25d80 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 66  kipped and the f
25d90 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69  ollowing <i>N</i
25da0 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20 69  > rows updated i
25db0 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49  nstead.)^..<p>^I
25dc0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
25dd0 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
25de0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
25df0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
25e00 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t.would be updat
25e10 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
25e20 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
25e30 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
25e40 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
25e50 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
25e60 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
25e70 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
25e80 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
25e90 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20 61  ine .which are a
25ea0 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e  ctually updated.
25eb0 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52  ..<p>^(The ORDER
25ec0 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e   BY clause on an
25ed0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
25ee0 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74  t is used only t
25ef0 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
25f00 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68  h.rows fall with
25f10 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68  in the LIMIT. Th
25f20 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
25f30 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69   rows are modifi
25f40 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
25f50 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
25f60 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
25f70 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
25f80 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
25f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25fd0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41  #####.Section VA
25fe0 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55  CUUM vacuum VACU
25ff0 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  UM..BubbleDiagra
26000 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 20 31 0a  m vacuum-stmt 1.
26010 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68  </tcl>..<p>.  Th
26020 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
26030 20 72 65 62 75 69 6c 64 73 20 74 68 65 20 65 6e   rebuilds the en
26040 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 54  tire database. T
26050 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c  here are several
26060 20 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e 20 61   .  reasons an a
26070 70 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68 74  pplication might
26080 20 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a   do this:..<ul>.
26090 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65    <li> <p> ^Unle
260a0 73 73 20 53 51 4c 69 74 65 20 69 73 20 72 75 6e  ss SQLite is run
260b0 6e 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76 61  ning in "auto_va
260c0 63 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c  cuum=FULL" mode,
260d0 20 77 68 65 6e 20 61 20 6c 61 72 67 65 0a 20 20   when a large.  
260e0 20 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74     amount of dat
260f0 61 20 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f  a is deleted fro
26100 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
26110 69 6c 65 20 69 74 20 6c 65 61 76 65 73 20 62 65  ile it leaves be
26120 68 69 6e 64 20 65 6d 70 74 79 0a 20 20 20 20 20  hind empty.     
26130 73 70 61 63 65 2c 20 6f 72 20 22 66 72 65 65 22  space, or "free"
26140 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73 2e   database pages.
26150 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   This means the 
26160 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69  database file mi
26170 67 68 74 0a 20 20 20 20 20 62 65 20 6c 61 72 67  ght.     be larg
26180 65 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79  er than strictly
26190 20 6e 65 63 65 73 73 61 72 79 2e 20 5e 52 75 6e   necessary. ^Run
261a0 6e 69 6e 67 20 56 41 43 55 55 4d 20 74 6f 20 72  ning VACUUM to r
261b0 65 62 75 69 6c 64 20 74 68 65 20 0a 20 20 20 20  ebuild the .    
261c0 20 64 61 74 61 62 61 73 65 20 72 65 63 6c 61 69   database reclai
261d0 6d 73 20 74 68 69 73 20 73 70 61 63 65 20 61 6e  ms this space an
261e0 64 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  d reduces the si
261f0 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
26200 73 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  se file...  <li>
26210 20 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74 20 69   <p> ^Frequent i
26220 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c  nserts, updates,
26230 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e   and deletes can
26240 20 63 61 75 73 65 20 74 68 65 20 64 61 74 61 62   cause the datab
26250 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20 74 6f  ase file.     to
26260 20 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e 74   become fragment
26270 65 64 20 2d 20 77 68 65 72 65 20 64 61 74 61 20  ed - where data 
26280 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 61 62  for a single tab
26290 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 73  le or index is s
262a0 63 61 74 74 65 72 65 64 20 0a 20 20 20 20 20 61  cattered .     a
262b0 72 6f 75 6e 64 20 74 68 65 20 64 61 74 61 62 61  round the databa
262c0 73 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e  se file. ^Runnin
262d0 67 20 56 41 43 55 55 4d 20 65 6e 73 75 72 65 73  g VACUUM ensures
262e0 20 74 68 61 74 20 65 61 63 68 20 74 61 62 6c 65   that each table
262f0 20 61 6e 64 0a 20 20 20 20 20 69 6e 64 65 78 20   and.     index 
26300 69 73 20 6c 61 72 67 65 6c 79 20 73 74 6f 72 65  is largely store
26310 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20 77  d contiguously w
26320 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
26330 73 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d  se file. ^In som
26340 65 0a 20 20 20 20 20 63 61 73 65 73 2c 20 56 41  e.     cases, VA
26350 43 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72 65  CUUM may also re
26360 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
26370 6f 66 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c  of partially fil
26380 6c 65 64 20 70 61 67 65 73 20 69 6e 0a 20 20 20  led pages in.   
26390 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20    the database, 
263a0 72 65 64 75 63 69 6e 67 20 74 68 65 20 73 69 7a  reducing the siz
263b0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
263c0 65 20 66 69 6c 65 20 66 75 72 74 68 65 72 2e 0a  e file further..
263d0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72  .  <li> <p> ^Nor
263e0 6d 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62  mally, the datab
263f0 61 73 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20  ase [page_size] 
26400 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
26410 6f 74 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ot the database.
26420 20 20 20 20 20 73 75 70 70 6f 72 74 73 20 5b 61       supports [a
26430 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74  uto_vacuum] must
26440 20 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20 62   be configured b
26450 65 66 6f 72 65 20 74 68 65 20 64 61 74 61 62 61  efore the databa
26460 73 65 20 66 69 6c 65 20 69 73 0a 20 20 20 20 20  se file is.     
26470 61 63 74 75 61 6c 6c 79 20 63 72 65 61 74 65 64  actually created
26480 2e 20 5e 48 6f 77 65 76 65 72 2c 20 77 68 65 6e  . ^However, when
26490 20 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d 61   not in [write-a
264a0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
264b0 74 68 65 20 0a 20 20 20 20 20 5b 70 61 67 65 5f  the .     [page_
264c0 73 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75  size] and/or [au
264d0 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70 65  to_vacuum] prope
264e0 72 74 69 65 73 20 6f 66 20 61 6e 20 65 78 69 73  rties of an exis
264f0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 6d 61  ting database ma
26500 79 20 62 65 0a 20 20 20 20 20 63 68 61 6e 67 65  y be.     change
26510 64 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 5b  d by using the [
26520 70 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  page_size pragma
26530 7c 70 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64  |page_size]  and
26540 2f 6f 72 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f  /or .     [auto_
26550 76 61 63 75 75 6d 7c 70 72 61 67 6d 61 20 61 75  vacuum|pragma au
26560 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d  to_vacuum] pragm
26570 61 73 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65  as and then imme
26580 64 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e  diately VACUUMin
26590 67 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62  g.     the datab
265a0 61 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77  ase. ^When in [w
265b0 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20  rite-ahead log] 
265c0 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b  mode, only the [
265d0 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20  auto_vacuum].   
265e0 20 20 73 75 70 70 6f 72 74 20 70 72 6f 70 65 72    support proper
265f0 74 79 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65  ty can be change
26600 64 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a  d using VACUUM..
26610 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43 55  </ul>..<p>^(VACU
26620 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  UM only works on
26630 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
26640 73 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f  se. It is not po
26650 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d  ssible to VACUUM
26660 20 61 6e 0a 61 74 74 61 63 68 65 64 20 64 61 74   an.attached dat
26670 61 62 61 73 65 20 66 69 6c 65 2e 29 5e 0a 0a 3c  abase file.)^..<
26680 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  p>^The VACUUM co
26690 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 63  mmand works by c
266a0 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  opying the conte
266b0 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
266c0 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f  ase into.a tempo
266d0 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  rary database fi
266e0 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65 72  le and then over
266f0 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67  writing the orig
26700 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a 63  inal with the .c
26710 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 74  ontents of the t
26720 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e  emporary file. ^
26730 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67  When overwriting
26740 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61   the original, a
26750 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61   rollback.journa
26760 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65 61  l or [write-ahea
26770 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20  d log] WAL file 
26780 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73 20  is used just as 
26790 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 20  it would be for 
267a0 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62 61  any.other databa
267b0 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  se transaction. 
267c0 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74  ^This means that
267d0 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67 20   when VACUUMing 
267e0 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73 20  a database, .as 
267f0 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74 68  much as twice th
26800 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 72  e size of the or
26810 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20  iginal database 
26820 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  file is required
26830 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73 70   in free.disk sp
26840 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41  ace...<p>^The VA
26850 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79  CUUM command may
26860 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f 57   change the [ROW
26870 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20  ID | ROWIDs] of 
26880 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a 74  entries in any.t
26890 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  ables that do no
268a0 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63  t have an explic
268b0 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  it [INTEGER PRIM
268c0 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a  ARY KEY]..</p>..
268d0 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69 6c  <p>^A VACUUM wil
268e0 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20  l fail if there 
268f0 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73  is an open trans
26900 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68  action, or if th
26910 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d  ere are one or.m
26920 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c 20 73  ore active SQL s
26930 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20 69  tatements when i
26940 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28  t is run...<p>^(
26950 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72  As of SQLite ver
26960 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74  sion 3.1, an alt
26970 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e  ernative to usin
26980 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  g the VACUUM com
26990 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d 20  mand to.reclaim 
269a0 73 70 61 63 65 20 61 66 74 65 72 20 64 61 74 61  space after data
269b0 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65   has been delete
269c0 64 20 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d  d is auto-vacuum
269d0 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75   mode, enabled u
269e0 73 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f 76  sing.the [auto_v
269f0 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e  acuum] pragma.)^
26a00 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63   ^When [auto_vac
26a10 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20  uum] is enabled 
26a20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 66  for a database.f
26a30 72 65 65 20 70 61 67 65 73 20 6d 61 79 20 62 65  ree pages may be
26a40 20 72 65 63 6c 61 69 6d 65 64 20 61 66 74 65 72   reclaimed after
26a50 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 2c 20   deleting data, 
26a60 63 61 75 73 69 6e 67 20 74 68 65 20 66 69 6c 65  causing the file
26a70 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74 68   to shrink,.with
26a80 6f 75 74 20 72 65 62 75 69 6c 64 69 6e 67 20 74  out rebuilding t
26a90 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
26aa0 73 65 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e  se using VACUUM.
26ab0 20 20 48 6f 77 65 76 65 72 2c 20 75 73 69 6e 67    However, using
26ac0 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63  .[auto_vacuum] c
26ad0 61 6e 20 6c 65 61 64 20 74 6f 20 65 78 74 72 61  an lead to extra
26ae0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
26af0 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 41  ragmentation.  A
26b00 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  nd [auto_vacuum]
26b10 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63  .does not compac
26b20 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c  t partially fill
26b30 65 64 20 70 61 67 65 73 20 6f 66 20 74 68 65 20  ed pages of the 
26b40 64 61 74 61 62 61 73 65 20 61 73 20 56 41 43 55  database as VACU
26b50 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a  UM does...</p>..
26b60 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
26b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26bb0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49  #####.Section {I
26bc0 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78  NDEXED BY} index
26bd0 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20 42  edby {{INDEXED B
26be0 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d  Y} {NOT INDEXED}
26bf0 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  }..</tcl>.<p>^Th
26c00 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72  e INDEXED BY phr
26c10 61 73 65 20 69 73 20 61 20 53 51 4c 20 65 78 74  ase is a SQL ext
26c20 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e 6c  ension found onl
26c30 79 20 69 6e 20 53 51 4c 69 74 65 20 77 68 69 63  y in SQLite whic
26c40 68 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74 6f  h can.be used to
26c50 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
26c60 20 63 6f 72 72 65 63 74 20 69 6e 64 69 63 65 73   correct indices
26c70 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 20   are being used 
26c80 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b  on a [DELETE],.[
26c90 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44  SELECT], or [UPD
26ca0 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ATE] statement..
26cb0 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
26cc0 70 68 72 61 73 65 20 61 6c 77 61 79 73 20 66 6f  phrase always fo
26cd0 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65 20 6f  llows the name o
26ce0 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 53  f a table that S
26cf0 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20 72 65  QLite will.be re
26d00 61 64 69 6e 67 2e 20 20 54 68 65 20 49 4e 44 45  ading.  The INDE
26d10 58 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61  XED BY phrase ca
26d20 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65  n be seen in the
26d30 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61   following synta
26d40 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a  x.diagrams:</p>.
26d50 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44 69 61  .<tcl>.BubbleDia
26d60 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
26d70 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  able-name.Bubble
26d80 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73  Diagram single-s
26d90 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ource.</tcl>..<p
26da0 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42  >^The "INDEXED B
26db0 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 63 6c  Y index-name" cl
26dc0 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
26dd0 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e  hat the named in
26de0 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64  dex.must be used
26df0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f   in order to loo
26e00 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74  k up values on t
26e10 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
26e20 6c 65 2e 0a 5e 49 66 20 69 6e 64 65 78 2d 6e 61  le..^If index-na
26e30 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  me does not exis
26e40 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75  t or cannot be u
26e50 73 65 64 20 66 6f 72 20 74 68 65 20 71 75 65 72  sed for the quer
26e60 79 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70  y, then.the prep
26e70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53  aration of the S
26e80 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69  QL statement fai
26e90 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49  ls..^(The "NOT I
26ea0 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65 20 73  NDEXED" clause s
26eb0 70 65 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f  pecifies that no
26ec0 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20   index shall be 
26ed0 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73  used when.access
26ee0 69 6e 67 20 74 68 65 20 70 72 65 63 65 64 69 6e  ing the precedin
26ef0 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69  g table, includi
26f00 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63  ng implied indic
26f10 65 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49  es create by.UNI
26f20 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
26f30 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  KEY constraints.
26f40 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49    However, the I
26f50 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
26f60 45 59 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20  EY.can still be 
26f70 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  used to look up 
26f80 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77 68 65  entries even whe
26f90 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  n "NOT INDEXED" 
26fa0 69 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 3c  is specified.)^<
26fb0 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c  /p>..<p>Some SQL
26fc0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
26fd0 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74  s provide non-st
26fe0 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65  andard "hint" me
26ff0 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63  chanisms which.c
27000 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 67 69  an be used to gi
27010 76 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  ve the query opt
27020 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f  imizer clues abo
27030 75 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20  ut what indices 
27040 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f  it should.use fo
27050 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 73  r a particular s
27060 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49  tatement.  The I
27070 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f  NDEX BY clause o
27080 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d  f SQLite is .<em
27090 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74  >not</em> a hint
270a0 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e  ing mechanism an
270b0 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20  d it should not 
270c0 62 65 20 75 73 65 64 20 61 73 20 73 75 63 68 2e  be used as such.
270d0 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  .^The INDEXED BY
270e0 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74   clause does not
270f0 20 67 69 76 65 20 74 68 65 20 6f 70 74 69 6d 69   give the optimi
27100 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75 74 20  zer hints about 
27110 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f 20 75  which index.to u
27120 73 65 3b 20 69 74 20 67 69 76 65 73 20 74 68 65  se; it gives the
27130 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72 65 71   optimizer a req
27140 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68 69 63  uirement of whic
27150 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a  h index to use..
27160 5e 49 66 20 74 68 65 20 71 75 65 72 79 20 6f 70  ^If the query op
27170 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c  timizer is unabl
27180 65 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64  e to use the ind
27190 65 78 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ex specified by 
271a0 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61  the.INDEX BY cla
271b0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75  use, then the qu
271c0 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ery will fail wi
271d0 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
271e0 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44  ..<p>The INDEXED
271f0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65   BY clause is <e
27200 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e  m>not</em> inten
27210 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74  ded for use in t
27220 75 6e 69 6e 67 0a 74 68 65 20 70 65 72 66 6f 72  uning.the perfor
27230 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79  mance of a query
27240 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66  .  The intent of
27250 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   the INDEXED BY 
27260 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69  clause is.to rai
27270 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72  se a run-time er
27280 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d 61 20  ror if a schema 
27290 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20  change, such as 
272a0 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61  dropping or.crea
272b0 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63  ting an index, c
272c0 61 75 73 65 73 20 74 68 65 20 71 75 65 72 79 20  auses the query 
272d0 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d  plan for a time-
272e0 73 65 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a  sensitive query.
272f0 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20  to change.  The 
27300 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
27310 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
27320 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64   help detect.und
27330 65 73 69 72 61 62 6c 65 20 71 75 65 72 79 20 70  esirable query p
27340 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69  lan changes duri
27350 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ng regression te
27360 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72  sting..Developer
27370 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64  s are admonished
27380 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65   to omit all use
27390 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64   of INDEXED BY d
273a0 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f  uring.applicatio
273b0 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d  n design, implem
273c0 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e  entation, testin
273d0 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20  g, and tuning.  
273e0 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73  If.INDEXED BY is
273f0 20 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61   to be used at a
27400 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65  ll, it should be
27410 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
27420 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65   very.end of the
27430 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f   development pro
27440 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69  cess when "locki
27450 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67  ng down" a desig
27460 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20  n.</p>..<h3>See 
27470 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  Also:</h3>..<p>T
27480 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
27490 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b  _status()] C/C++
274a0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74   interface toget
274b0 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51  her with the.[SQ
274c0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
274d0 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61  FULLSCAN_STEP] a
274e0 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  nd [SQLITE_STMTS
274f0 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62  TATUS_SORT] verb
27500 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s.can be used to
27510 20 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74   detect at run-t
27520 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20  ime when an SQL 
27530 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
27540 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76  .making effectiv
27550 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73  e use of indices
27560 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74  .  Many applicat
27570 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20  ions may prefer 
27580 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69  to.use the [sqli
27590 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
275a0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  )] interface to 
275b0 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73  detect index mis
275c0 75 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20  use.rather than 
275d0 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  the INDEXED BY p
275e0 68 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20  hrase described 
275f0 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  here.</p>..<tcl>
27600 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
27610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
27650 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
27660 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
27670 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
27680 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
27690 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
276a0 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
276b0 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
276c0 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a  sort {.   ABORT.
276d0 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44     ACTION.   ADD
276e0 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c  .   AFTER.   ALL
276f0 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41  .   ALTER.   ANA
27700 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41  LYZE.   AND.   A
27710 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41  S.   ASC.   ATTA
27720 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d  CH.   AUTOINCREM
27730 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20  ENT.   BEFORE.  
27740 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45   BEGIN.   BETWEE
27750 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41  N.   BY.   CASCA
27760 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41  DE.   CASE.   CA
27770 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  ST.   CHECK.   C
27780 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e  OLLATE.   COLUMN
27790 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f  .   COMMIT.   CO
277a0 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52  NFLICT.   CONSTR
277b0 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
277c0 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
277d0 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45  NT_DATE.   CURRE
277e0 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45  NT_TIME.   CURRE
277f0 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20  NT_TIMESTAMP.   
27800 44 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41  DATABASE.   DEFA
27810 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a  ULT.   DEFERRED.
27820 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20     DEFERRABLE.  
27830 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a   DELETE.   DESC.
27840 20 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53     DETACH.   DIS
27850 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
27860 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20   END.   EACH.   
27870 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20  ELSE.   ESCAPE. 
27880 20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c    EXCEPT.   EXCL
27890 55 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a  USIVE.   EXISTS.
278a0 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41     EXPLAIN.   FA
278b0 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52  IL.   FOR.   FOR
278c0 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20  EIGN.   FROM.   
278d0 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20  FULL.   GLOB.   
278e0 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a  GROUP.   HAVING.
278f0 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a     IF.   IGNORE.
27900 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20     IMMEDIATE.   
27910 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49  IN.   INDEX.   I
27920 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41  NDEXED.   INITIA
27930 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20  LLY.   INNER.   
27940 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41  INSERT.   INSTEA
27950 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20  D.   INTERSECT. 
27960 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20    INTO.   IS.   
27970 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20  ISNULL.   JOIN. 
27980 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20    KEY.   LEFT.  
27990 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20   LIKE.   LIMIT. 
279a0 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52    MATCH.   NATUR
279b0 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a  AL.   NO.   NOT.
279c0 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55     NOTNULL.   NU
279d0 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53  LL.   OF.   OFFS
279e0 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20  ET.   ON.   OR. 
279f0 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52    ORDER.   OUTER
27a00 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47  .   PLAN.   PRAG
27a10 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20  MA.   PRIMARY.  
27a20 20 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a   QUERY.   RAISE.
27a30 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
27a40 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44   REGEXP.   REIND
27a50 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20  EX.   RELEASE.  
27a60 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41   RENAME.   REPLA
27a70 43 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20  CE.   RESTRICT. 
27a80 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42    RIGHT.   ROLLB
27a90 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 53 41  ACK.   ROW.   SA
27aa0 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43  VEPOINT.   SELEC
27ab0 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c  T.   SET.   TABL
27ac0 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54 45 4d  E.   TEMP.   TEM
27ad0 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e 0a 20  PORARY.   THEN. 
27ae0 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54    TO.   TRANSACT
27af0 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 0a 20  ION.   TRIGGER. 
27b00 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55    UNION.   UNIQU
27b10 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55  E.   UPDATE.   U
27b20 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 0a 20  SING.   VACUUM. 
27b30 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57    VALUES.   VIEW
27b40 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20 20 57  .   VIRTUAL.   W
27b50 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a  HEN.   WHERE.}].
27b60 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63  .hd_puts {<DIV c
27b70 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f  lass="pdf_sectio
27b80 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51  n">}.Section {SQ
27b90 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b  Lite Keywords} k
27ba0 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b  eywords {{*SQL k
27bb0 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79  eyword} {SQL key
27bc0 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20  words}}.hd_puts 
27bd0 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a  {</DIV>}.</tcl>.
27be0 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e  .<p>The SQL stan
27bf0 64 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61  dard specifies a
27c00 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   huge number of 
27c10 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d  keywords which m
27c20 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61  ay not.be used a
27c30 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s the names of t
27c40 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20  ables, indices, 
27c50 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73  columns, databas
27c60 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64  es, user-defined
27c70 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c  .functions, coll
27c80 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20  ations, virtual 
27c90 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f  table modules, o
27ca0 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65  r any other name
27cb0 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69  d object..The li
27cc0 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69  st of keywords i
27cd0 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66  s so long that f
27ce0 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65  ew people can re
27cf0 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e  member them all.
27d00 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f  .For most SQL co
27d10 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20  de, your safest 
27d20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20  bet is to never 
27d30 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20  use any English 
27d40 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73  language.word as
27d50 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75   the name of a u
27d60 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  ser-defined obje
27d70 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79  ct.</p>..<p>If y
27d80 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61  ou want to use a
27d90 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61   keyword as a na
27da0 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20  me, you need to 
27db0 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65  quote it.  There
27dc0 0a 61 72 65 20 74 68 72 65 65 20 77 61 79 73 20  .are three ways 
27dd0 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f  of quoting keywo
27de0 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f  rds in SQLite:</
27df0 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75  p>..<p>.<blockqu
27e00 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
27e10 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
27e20 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c  p"><b>'keyword'<
27e30 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /b></td><td widt
27e40 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74  h="20"></td>..<t
27e50 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
27e60 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73  single quotes is
27e70 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
27e80 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  l.</td></tr>..<t
27e90 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
27ea0 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22  op"><b>"keyword"
27eb0 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
27ec0 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
27ed0 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  rd in double-quo
27ee0 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69  tes is an identi
27ef0 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  fier.</td></tr>.
27f00 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
27f10 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b  ="top"><b>&#91;k
27f20 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c  eyword&#93;</b><
27f30 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
27f40 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e  td>^A keyword en
27f50 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65  closed in square
27f60 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20   brackets is .  
27f70 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
27f80 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
27f90 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
27fa0 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
27fb0 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
27fc0 69 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63  is used by MS Ac
27fd0 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72  cess and SQL Ser
27fe0 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75  ver and is inclu
27ff0 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f  ded in SQLite fo
28000 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74  r.        compat
28010 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74  ibility.</td></t
28020 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
28030 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39  ign="top"><b>&#9
28040 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f  6;keyword&#96;</
28050 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
28060 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
28070 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61   enclosed in gra
28080 76 65 20 61 63 63 65 6e 74 73 20 28 41 53 43 49  ve accents (ASCI
28090 49 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20  I code 96) is . 
280a0 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69         an identi
280b0 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e  fier.  This is n
280c0 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
280d0 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d    This quoting m
280e0 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20  echanism.       
280f0 20 69 73 20 75 73 65 64 20 62 79 20 4d 79 53 51   is used by MySQ
28100 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65  L and is include
28110 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a  d in SQLite for.
28120 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62          compatib
28130 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ility.</td></tr>
28140 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
28150 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70  kquote>.</p>..<p
28160 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20  >For resilience 
28170 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20  when confronted 
28180 77 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20  with historical 
28190 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  SQL statements, 
281a0 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65  SQLite.will some
281b0 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71  times bend the q
281c0 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f  uoting rules abo
281d0 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ve:</p>..<ul>.<l
281e0 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f  i><p>^If a keywo
281f0 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f  rd in single.quo
28200 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79  tes (ex: <b>'key
28210 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f  '</b> or <b>'glo
28220 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20  b'</b>) is used 
28230 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
28240 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72  re.an identifier
28250 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20   is allowed but 
28260 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c  where a string l
28270 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c  iteral is not al
28280 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20  lowed, then.the 
28290 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
282a0 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65  ood to be an ide
282b0 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61 64 20  ntifier instead 
282c0 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  of a string lite
282d0 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  ral..</p></li>..
282e0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79  <li><p>^If a key
282f0 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71  word in double.q
28300 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b  uotes (ex: <b>"k
28310 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67  ey"</b> or <b>"g
28320 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65  lob"</b>) is use
28330 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77  d in a context w
28340 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62  here.it cannot b
28350 65 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e  e resolved to an
28360 20 69 64 65 6e 74 69 66 69 65 72 20 62 75 74 20   identifier but 
28370 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c  where a string l
28380 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65  iteral.is allowe
28390 64 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65  d, then the toke
283a0 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20  n is understood 
283b0 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c  to be a string l
283c0 69 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f  iteral instead.o
283d0 66 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e  f an identifier.
283e0 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a  </p></li>.</ul>.
283f0 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20  .<p>Programmers 
28400 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f  are cautioned no
28410 74 20 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f  t to use the two
28420 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63   exceptions desc
28430 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65  ribed in.the pre
28440 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20  vious bullets.  
28450 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61  We emphasize tha
28460 74 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c  t they exist onl
28470 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e  y so that old.an
28480 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c  d ill-formed SQL
28490 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c   statements will
284a0 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20   run correctly. 
284b0 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
284c0 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74   of.SQLite might
284d0 20 63 68 61 6e 67 65 20 74 6f 20 72 61 69 73 65   change to raise
284e0 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20   errors instead 
284f0 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65  of accepting the
28500 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65   malformed.state
28510 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79  ments covered by
28520 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
28530 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  above.</p>..<p>.
28540 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
28550 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69  keywords from ti
28560 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20  me to time when 
28570 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20  it takes on new 
28580 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20  features..So to 
28590 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64  prevent your cod
285a0 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f  e from being bro
285b0 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e  ken by future en
285c0 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20  hancements, you 
285d0 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20  should.normally 
285e0 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69  quote any identi
285f0 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20  fier that is an 
28600 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
28610 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79   word, even if.y
28620 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74  ou do not have t
28630 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  o..</p>..<p>.The
28640 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77   list below show
28650 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b  s all possible k
28660 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20  eywords used by 
28670 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c  any build of.SQL
28680 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ite regardless o
28690 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  f [compile-time 
286a0 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74  options].  .Most
286b0 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66   reasonable conf
286c0 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d  igurations use m
286d0 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ost or all of th
286e0 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75  ese keywords,.bu
286f0 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20  t some keywords 
28700 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77  may be omitted w
28710 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  hen SQL language
28720 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69   features are.di
28730 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64  sabled..^(Regard
28740 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
28750 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
28760 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e  ration, any iden
28770 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e  tifier that is n
28780 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77  ot on.the follow
28790 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73  ing <tcl>hd_puts
287a0 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
287b0 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65  rd_list]</tcl> e
287c0 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e  lement.list is n
287d0 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20  ot a keyword to 
287e0 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69  the SQL parser i
287f0 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a  n SQLite:.</p>..
28800 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
28810 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22  ble width="100%"
28820 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  ><tr>.<td align=
28830 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74  "left" valign="t
28840 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e  op" width="20%">
28850 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c  .<tcl>.set n [ll
28860 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c  ength $keyword_l
28870 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a  ist].set nCol 5.
28880 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b  set nRow [expr {
28890 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43  ($n+$nCol-1)/$nC
288a0 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72  ol}].set i 0.for
288b0 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f  each word $keywo
288c0 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b  rd_list {.  if {
288d0 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20  $i==$nRow} {.   
288e0 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c   hd_puts "</td><
288f0 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
28900 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22  " align=\"left\"
28910 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22   width=\"20%\">"
28920 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d  .    set i 1.  }
28930 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72   else {.    incr
28940 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73   i.  }.  hd_puts
28950 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d   "$word<br>\n".}
28960 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74  .</tcl>.</td></t
28970 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  r></table></bloc
28980 6b 71 75 6f 74 65 3e 29 5e 0a                    kquote>)^.