Verschillen SQLite en MySQL#

Het lesmateriaal is oorspronkelijk ontwikkeld voor MySQL, en daarna aangepast voor SQLite. De verschillen tussen beide database-talen zijn niet erg groot, maar niet verwaarloosbaar.

De belangrijkste verschillen zijn:

  • typering

  • “Date” datatype en functies

  • CONCAT functie en || operator

  • database/tabel-schema: DESCRIBE versus raadplegen van schema-tabel

SQLite als library#

Een ander belangrijk verschil is dat SQLite geen “database managment systeem” is, maar een library die je kunt gebruiken in combinatie met andere programmeertalen.

  • een MySQL DBMS benader je meestal via het netwerk; via het netwerk wordt het gedeeld door meerdere programma’s, eventueel op verschillende computers.

  • een SQLite database bestaat uit één enkel bestand; dit is (binair) uitwisselbaar tussen verschillende computers.

  • een SQLite database gebruik je meestal via één programma(?)

CONCAT en ||#

SQLite heeft geen CONCAT functie voor het combineren van meerdere TEXT waarden (strings) tot één TEXT waarde. In plaats daarvan gebruik je de operator || waarmee je twee TEXT-waarden combineert tot één. De || operator kun je ook in MySQL (en andere SQL-DBMS-en) gebruiken.

Data types#

SQLite heeft een ander soort typering dan gebruikelijk in SQL: elke waarde heeft een type; variabelen (velden, kolommen) zijn niet getypeerd. Dit is dezelfde dynamische typering als in Python.

De type-aanwijzingen bij kolommen (in de CREATE TABLE opdracht) worden gebruikt bij het opslaan van waarden in de tabel: deze worden eventueel omgezet naar het type aangegeven voor de kolom in de CREATE opdracht.

SQL gebruikt automatische type-conversie tussen getallen en tekst-waarden.

Bij de conversie van een getal naar een tekst-waarde kun je in principe het formaat van deze tekst-waarde aangeven, bijvoorbeeld het aantal cijfers na de decimale punt

Van getal naar text#

Voor het omzetten van een getalwaarde naar een TEXT-waarde biedt SQLite de format-functie, vroeger printf genoemd. Je geeft aan deze functie een format (string) op en een getal. (Deze functie is vergelijkbaar met de C-functie printf, en gebruikt dezelfde format-notatie. Je kunt in de format-string tekst en getallen combineren. Zie bijvoorbeeld https://alvinalexander.com/programming/printf-format-cheat-sheet/ en https://cplusplus.com/reference/cstdio/printf/)

Enkele voorbeelden:

  • format('%.2f', 3.141596) geeft '3.14'

  • format('%d', 314) geeft '314'

  • format('%d graden, 23) geeft '23 graden'.

Datum waarden en functies#

SQLite heeft geen DATE datatype. In plaats daarvan kun je een datum (of datum/tijd) weergeven als TEXT-waarde (ISO datumnotatie) of als getal. Dat laatste komt overeen met de Unix tijd-notatie: het aantal seconden sinds 1 januari 1970 (UTC).

De date, datatime, en time functies bieden veel mogelijkheden om met datums en tijden te rekenen, met behulp van modifiers. Zie: https://www.sqlitetutorial.net/sqlite-date-functions/sqlite-date-function/

  • datetime('now', '+10 days')

Voor het afsplitsen van de verschillende delen van een datum, bijvoorbeeld het jaar, de maand, of de dag, gebruik je de functie strftime() (zie bijv. https://www.sqlitetutorial.net/sqlite-date-functions/sqlite-strftime-function/):

  • strftime('%Y','2018-10-11') geeft '2018' (year)

  • strftime('%m','2018-10-11') geeft '10' (month)

  • strftime('%d','2018-10-11') geeft '11' (day)

De gebruikelijke datum-functies kun je als volgt uitdrukken:

  • date(...) - strftime(‘%Y-%m-%d’, ...)

  • time(...) - strftime(‘%H:%M:%S’, ...)

  • datetime(...) - strftime(‘%Y-%m-%d %H:%M:%S’, ...)

  • julianday(...) - strftime(‘%J’, ...)

#