Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Datenbanken

k22:k22.6:k22.6.1:start

22.6.1 Exkurs – Arbeit mit dem Datenbank-Client sqlite3

Damit Sie alle vorgestellten Beispiele nachvollziehen können, sollten Sie für Ihr DBMS SQLite3 eine Datenbank `test` mit einer DB-Tabelle `test` anlegen.

SQL‐Befehle und Steuerbefehle

SQLite unterscheidet zwischen den SQL‐Befehlen und den SQLite‐Steuerbefehlen. Die Steuerbefehle wie .databases oder .quit beginnen immer mit einem Punkt. SQL‐Befehle besitzen keinen Punkt als erstes Zeichen, werden aber stets mit einem Semikolon (;) beendet wie in SELECT * FROM test; . Schlüsselworte wie SELECT werden im Kapitel immer groß geschrieben. Das ist keine Vorschrift, erhöht aber die Lesbarkeit bei längeren SQL-Anweisungen wie

CREATE TABLE IF NOT EXISTS 
  tutors 
    (
      tutor_id    INTEGER PRIMARY KEY AUTOINCREMENT, 
      lastname    TEXT NOT NULL 
    )
;
.schema tutor

Die letzte Anweisung innerhalb der runden Klammern wird nicht mit einem Komma abgeschlossen!

22.6.1.1 Anlegen der Datenbank `test`

Das Anlegen einer Datenbank ist schnell erledigt. Starten Sie als System-Benutzer den DB-Monitor sqlite3 in einer Konsole, um eine Verbindung zum DBMS herzustellen. Wenn Sie den Namen einer Datenbank als Option angeben, dann wird sofort zur Datenbank verbunden oder bei nicht existierender Datenbank diese angelegt und sofort zur neuen Datenbank verbunden. Die Extension können Sie frei vergeben – hier wurde der Standard 'sqlite' verwendet:

hans@mint20:~$ sqlite3 test.sqlite
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite>

Mit dem Kommando .databases wird eine Übersicht aller Datenbanken mit den Datei-Pfaden ausgegeben:

sqlite> .databases
main: /home/hans/test.sqlite

Die Ausgabe des Kommandos .tables ist leer – was Sie nicht überraschen wird:

sqlite> .tables
sqlite>

22.6.1.2 Anlegen der Tabelle `test` in der Datenbank `test`

Die weitere Arbeit beginnt damit, dass Sie als System-Benutzer

  • zuerst eine neue DB-Tabelle `test` anlegen,
  • danach Daten in diese Tabelle einfügen und
  • abschließend Daten aus der DB-Tabelle von bestimmten DB-Feldern auslesen.

Für das Anlegen einer Tabelle verwenden Sie die folgende SQL-Anweisung:

CREATE TABLE 
  test 
    (
      id        INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      vorname   TEXT NOT NULL, 
      nachname  TEXT NOT NULL, 
      wohnort   TEXT NOT NULL, 
      plz       TEXT, 
      strasse   TEXT, 
      gebdatum  DATE, -- Geburtstag. Das DB-Speicherformat ist:  yyyy-mm-dd.
      tfestnetz TEXT, 
      tmobil    TEXT, 
      email     TEXT
    )
;

So erhalten Sie stets eine Beschreibung der DB-Felder einer DB-Tabelle:

sqlite> .schema test
CREATE TABLE test 
    (
      id        INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      vorname   TEXT NOT NULL, 
      nachname  TEXT NOT NULL, 
      wohnort   TEXT NOT NULL, 
      plz       TEXT, 
      strasse   TEXT, 
      gebdatum  DATE, -- Geburtstag. Das DB-Speicherformat ist:  yyyy-mm-dd.
      tfestnetz TEXT, 
      tmobil    TEXT, 
      email     TEXT
    );
sqlite> 

22.6.1.3 Daten in die Tabelle `test` in der Datenbank `test` einfügen

Tragen Sie 45 Datensätze in die DB-Tabelle `test` ein. Markieren Sie die komplette u.a. SQL-Anweisung, wechseln in die Konsole mit dem DB-Monitor und geben mit <CTRL>+<SHIFT>+V die SQL-Anweisung ein:

INSERT INTO test (vorname,nachname,wohnort,plz,strasse,gebdatum,tfestnetz,tmobil,email) 
  VALUES
    ('Arno','Adler','Arneburg','39606','Am Hafen 3','1981-12-08','03937864322','1715749482','arno.adler@arneburg.de'),
    ('Bruno','Bär','Berlin','10404','Bode-Strasse 1','1986-12-06','03094157777','1716771528','bruno.baer@freenet.de'),
    ('Gerda','Geier','Gera','07997','Gartenweg 23','1980-09-12','03657788989','1714472473','gerda.geier@gera.de'),
    ('Lutz','Lama','Leipzig','04103','Lessing-Allee 5','1989-02-25','0641432222','1717346836','lutz.lama@wwleipzig.de'),
    ('Maria','Meise','München','80805','Malergasse 10','1980-07-20','0867554324','1716821096','maria.meise@mawa.com'),
    ('Emil','Elch','Erfurt','99033','Eggert-Strasse 3c','1989-04-18','0361334455','1714287196','emil.elch@erfurt.de'),
    ('Detlef','de Hirsch','Dresden','01067','Deichweg 8','1984-01-28','0351876544','1716271745','detlef.dehirsch@dresden.de'),
    ('Hans-Helmut','Huhn','Hamburg','22111','Hafengasse 90','1988-01-26','04067554008','1716360418','hhhuhn@arcor.com'),
    ('Friedrich','Fledermaus','Frankfurt a.M.','60308','Flusenweg 12','1983-01-01','06101666664','1715209075','fledermaus74@web.de'),
    ('Norbert','Natter','Nürnberg','90402','Nord-Strasse 6a','1980-04-05','091155224324','1713545289','norbert.natter@web.de'),
    ('Clara','Chamäleon','Celle','29229','Claus-Kurt-Weg 1','1990-05-28','05141554678','1717398273','clara.camae@leon.de'),
    ('Ingelore','Igel','Immenstadt i.A.','87509','Imm-Reute 3','1988-12-10','08328552233','1715500891','ingelore.igel@web.de'),
    ('Stephanie','Storch','Stendal','39596','Strohgasse 55b','1989-05-10','039312232366','1716249744','stephanie.storch@reiseland.de'),
    ('Kurt','Kater','Köln','29229','Kanalstrasse 107','1985-05-11','0221767878789','1716968271','kurt.kater@koeln-nord.de'),
    ('Susanne','Sperling','Stuttgart','70173','Strasse der Einheit 3','1988-11-28','05141554678','1713955401','susanne.sperling@aol.com'),
    ('Doreen','Delphin','Dessau-Roßlau','06842','Drosselweg 2','1983-08-01','03455662271','1714171247','ddelphin@arcor.net'),
    ('Andreas','Ameise','Aachen','52064','An der Mauer 4','1982-04-19','02419854332','1715571201','andreas.ameise@aachen.de'),
    ('Fred','Fliege','Fürstenfeldbruck','82276','Feldrain 2','1985-06-23','08148642278','1717564483','fred.fliege@web.de'),
    ('Brunhilde','Bussard','Berlin','10405','Berg-Strasse 44c','1987-11-12','03066422783','1714613147','brunhilde.bussard@web.de'),
    ('Karl-Heinz','Kranich','Kleve','82276','Kurze Strasse 9','1985-02-11','028216666774','1715671343','khkranich@kranich.net'),
    ('Ziri','Zebra','Zittau','02763','Zur Post 33e','1983-06-08','035853376223','1716739494','ziri.zebra@zittauerland.de'),
    ('Paul','Pferd','Pinneberg','25421','Paradegasse 5','1990-03-01','041015555577','1714546720','paul.pferd@rennbahn.de'),
    ('Quirina','Qualle','Querfurt','06268','Quartz-Steg 33','1985-04-28','03477123456','1713455231','quirina.qualle@arcor.de'),
    ('Rüdiger','Rüsselkäfer','Rüdesheim','65385','Radweg 23','1980-06-03','067220042278','1714576104','r.kaefer@web.de'),
    ('Victor','Vogelspinne','Vogelsberg','99610','Vor dem Tore 4-5','1980-11-12','03637290887','1714737048','vvspinne@herbarium.de'),
    ('Jens-Peter','Jaguar','Jena','82276','Janusweg 66','1984-09-14','036410815','1716538095','jp.jaguar@juga.de'),
    ('Otto','Otter','Oldenburg i.H.','23779','Oberer Steg 2','1981-06-22','046313423888','1716342612','otto.otter@freenet.de'),
    ('Thomas','Taube','Taubenheim','02689','Tannwald-Strasse 4','1984-10-18','03593650441','1714320997','tom.taube@taubeev.de'),
    ('Ullrich','Uhu','Ulm','89073','Ulmenweg 7','1988-02-07','073181862258','1713517261','ullrich.uhu@ulm.de'),
    ('Walter','Wisent','Wittenberge','19322','Wiesenweg 50','1989-05-14','038771111258','1715563424','walter.wisent@web.de'),
    ('Dorothea','Dorsch','Düsedau','39606','Dammer Weg 123','1982-07-03','03937345222','1715128617','dodo@dorsch.com'),
    ('Ernst','Esel','Erfurt','99033','Eckstrasse 6','1989-01-18','0361337612','1715533977','ernst.esel@aol.com'),
    ('Hannelore','Haifisch','Hamburg','22131','Hochbauamt 2-7','1980-05-18','04012384566','1714506260','halohai@freenet.de'),
    ('Hans','Hundt','Hameln','31785','Hoher Weg 34','1984-10-16','0515176395588','1716869476','hans.hundt@haba.com'),
    ('Nancy','Nasenbär','Naumburg','06618','Neue Strasse 44a','1984-10-15','0344567888','1714332937','nancy.nb@zoo-nb.de'),
    ('Wolfgang','Wolf','Werra','06766','Waldweg 6a','1984-10-14','036922123','1716355311','wolf.wolter@werra-berg.de'),
    ('Erwin','Eule','Erfurt','99099','Erzberg 6','1988-11-11','0361234333','1718885311','eeule@freenet.de'),
    ('Bernd','Bisam','Berlin','10315','Bad-Ring 1c','1990-09-09','0304409999','1527035312','bernd@bisam-park.de'),
    ('Hans','Hase','Hassel','39695','Hain 12','1988-03-05','0393217752','1727775311','hassel.hase@web.de'),
    ('Stefan','Spatz','Stendal','39576','Seeweg 6a','1989-11-11','03931844123','1715454561','spatz89@aol.com'),
    ('Karl','Keiler','Kassel','34117','Kleiner Weg 3','1988-12-12','05618967944','1527022212','karl.k@arcor.de'),
    ('Xenia','Xanter','Xanten','46509','Xyloner See 2','1989-04-03','0280134556','1612345799','x.y.jolle@freenet.de'),
    ('Luise','Laus','Löbau','02708','Langer Kolken 1','1988-06-23','03587622022','1622323239','familia.l@genua.it'),
    ('Zeno','Zander','Zingst','18374','Ziegenhof 4c','1987-04-04','03823299744','1530345888','zeno.zack@web.de'),
    ('Volker','von Viper','Verden','27283','Volksbad 5c','1987-09-03','04231667293','1724522277','von.viper@web.de');

22.6.1.4 Daten aus der Tabelle `test` auslesen und anzeigen

Mit der folgenden SQL-Anweisung können Sie zum Beispiel die Daten aus den Feldern `vorname`, `nachname`, `plz`, `wohnort` sowie das berechnete aktuelle Alter ausgeben – aber nur von den Orten, deren Postleitzahl mit einer 3 beginnen:

SELECT vorname AS "Vorname", nachname AS "Nachname", plz AS "PLZ", wohnort AS "Ort", 
(strftime('%Y','now') - strftime('%Y',gebdatum)) - (strftime('%m%d','now') < strftime('%m%d',gebdatum)) AS "Alter" 
FROM test 
WHERE plz LIKE '3%' ORDER BY nachname DESC;
sqlite> SELECT vorname AS "Vorname", nachname AS "Nachname", plz AS "PLZ", wohnort AS "Ort", 
   ...> (strftime('%Y','now') - strftime('%Y',gebdatum)) - (strftime('%m%d','now') < strftime('%m%d',gebdatum)) AS "Alter" 
   ...> FROM test WHERE plz LIKE '3%' ORDER BY nachname DESC;
Vorname     Nachname    PLZ         Ort         Alter     
----------  ----------  ----------  ----------  ----------
Stephanie   Storch      39596       Stendal     32        
Stefan      Spatz       39576       Stendal     31        
Karl        Keiler      34117       Kassel      32        
Hans        Hundt       31785       Hameln      36        
Hans        Hase        39695       Hassel      33        
Dorothea    Dorsch      39606       Düsedau     38        
Arno        Adler       39606       Arneburg    39            
sqlite> .quit
$ 

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k22/k22.6/k22.6.1/start.txt · Zuletzt geändert: 27.05.2021 von honsek

Seiten-Werkzeuge