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||
operatordatabase/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’, ...)