There is a list of features that SQLite does *not* support at http://www.sqlite.org/omitted.html. If you find additional features that SQLite does not support, you may want to list them below. ---- *: SQL92 Character sets, collations, coercibility. *: Inserting blob using X'AABBCCDD' syntax. *: Stored Procedures *: Rollup and Cube - _Who can tell me what this means?_ _::: I don't know much about it myself, but a quick google on the subject gives me... http:// www.winnetmag.com/SQLServer/Article/ArticleID/5104/5104.html and http://databases.about.com/ library/weekly/aa070101a.htm _::: both of these imply that the CUBE operator causes new rows to be generated to give a wildcard value to non-numeric columns and summing the numeric columns which match those wildcards. The potential for generating a huge amount of data with cube is implicit, I think - hence its name. ROLLUP appears to be related but removes some of the wildcards; I couldn't determine what from the limited information in the articles. I could not find, on brief examination any more definitive reference. Anyone got something more definitive than those articles ? It seems to me that you can do with sum() everything you can do with CUBE. *: INSERT INTO with multiple rows (ie. INSERT INTO table VALUES (...), (...). etc) *: CREATE DATABASE, DROP DATABASE - _Does not seem meaningful for an embedded database engine like SQLite. To create a new database, just do sqlite_open(). To drop a database, delete the file._ *: ALTER VIEW, ALTER TRIGGER, ALTER TABLE *: Schemas - _Who can tell me what this means?_ _::: The idea is that multiple users using the same database can cleanly separate their tables, views (stored procs, etc) by prefixing them with their login, so jack's jack.importantTable is distinct from jill's jill.importantTable. There are administrative benefits ('Jack left and we don't like his work; can we kill everything he did?' Ans: 'Yes, let me just drop his schema..', with aliases, jill.importantTable can be made available to everybody as 'importantTable', permissions can be hung off schemas). The common notation (jill.importantTable) would map to databasename.tablename in the current sqlite arrangement. *: TRUNCATE (MySQL, Postgresql and Oracle have it... but I dont know if this is a standard command) - _SQLite does this automatically when you do a DELETE without a WHERE clause._ *: ORDER BY myfield ASC NULLS LAST (Oracle) *: CREATE TRIGGER [BEFORE | AFTER | INSTEAD OF] (Oracle) *: UPDATE with a FROM clause (not sure if this is standard, Sybase and Microsoft have it). *: Multi-column IN clause (ie. SELECT * FROM tab WHERE (key1, key2) IN (SELECT...) *: CURRENT-Functions like CURRENT_DATE, CURRENT_TIME are missing *: INSERTing less values than columns does not fill the missing columns with the default values; if less values than columns in the table are supplied, all columns filled have to be named before the keyword values *: rename table command (mysql has) *: ESCAPE clause for LIKE *: DISTINCT ON (expr,...) - this is from Postgres, where expr,... must be the leftmost expressions from the ORDER BY clause *: MEDIAN and standard deviation... are they standard? Useful for sqlite standalone (for shell script users) *: enum column type (mysql does) *: join syntax (+) (-) like oracle has - _SQLite used to have this but it was removed because it is not standard SQL._ *: name columns in views (i.e. CREATE VIEW (foo, bar) AS SELECT qux, quo FROM baz;) *:FLOOR and CEILING functions, e.g. "SELECT FLOOR(salary) FROM personnel;"