Mit welchem Befehl kann man sich das Schema von foods.db im CLI (Command Line Interface) ausgeben (auf der System-Shell, also nicht auf der SQLite Sub-Shell).
sqlite3 foods.db .schema
Wie lautet der Primärschlüssel der Tabelle foods_episodes? Geben Sie Ihre Antwort in runden Klammern ein (…).
Der Primärschlüssel der Verbindungstabelle foods.episodes ist das Paar (food_id, episode_id). So können Speisen aus foods den Episoden in episodes eindeutig zugeordnet werden.
Wofür braucht man Primärschlüssel (PK) und Fremdschlüssel (FK) nützlich, wenn Daten über mehrere Tabellen verteilt sind?
Um einen JOIN durchzuführen: PK und FK werden hierbei aufeinander abgebildet (bspw. mit ON).
Wie können Sie eine Datenbank (z.b. foods.db) öffnen, ohne die SQLite Sub-Shell zu verlassen?
Wie kann ich herausfinden, welche Optionen das Programm sqlite3 hat?
In SQLite: .help. Auf der System-Shell: sqlite3 --help
Sie haben sqlite3 ohne zusätzliche Optionen oder Dateien aufgerufen und eine Tabelle my_table erzeugt. Wenn Sie jetzt SQLite mit .quit verlassen, wo befindet sich my_table dann?
Antwort: in der in-memory Datenbank, die aber beim Verlassen von SQLite gelöscht wurde - d.h. die Tabelle ist verloren (befindet sich “nirgendwo”).
Wie können Sie in SQLite herausfinden, wo Ihre Ergebnisse ausgegeben werden?
#+beginsrc sql sqlite> .show #+endsrc.output
Sie haben in SQLite eine Tabelle namens my_table erzeugt, aber vergessen, vorher eine Datenbank zum permanenten Speichern zu öffnen. Wie bekommen Sie die Tabelle jetzt in eine Datenbank my_dbank.db, so dass Sie beim nächsten Aufruf von SQLite direkt laden können, OHNE dass Sie die SQLite sub-shell verlassen müssen?
sqlite> CREATE TABLE my_table (id INTEGER);
sqlite> .schema my_table
CREATE TABLE my_table (id INTEGER);
sqlite> .output my_table.sql
sqlite> .dump my_table
sqlite> .output stdout
sqlite> .shell sqlite3 my_dbank.db < my_table.sql
sqlite> .open my_dbank.db
sqlite> .tables
my_table
sqlite> .schema my_table
CREATE TABLE my_table (id INTEGER);
Sie wollen zur Tabelle my_table eine Spalte namens Name hinzufügen, die Namen enthalten soll. Wie lautet der entsprechende (DDL) SQLite-Befehl, um das zu tun?
sqlite> ALTER TABLE my_table ADD COLUMN Name TEXT;
sqlite> .schema
CREATE TABLE my_table (id INTEGER, Name TEXT);
Sie haben eine Beispieltabelle erzeugt, die aussieht wie im Bild gezeigt: weil Sie vergessen haben, die Spalte id als Primary Key zu kennzeichnen, enthält diese Spalte jetzt nur NULL Werte. Frage: mit welchen (DML) Befehlen können Sie die Spalteneinträge für alle drei Zeilen aktualisieren?
sqlite> UPDATE my_table SET id=1 WHERE Name='Mueller';
sqlite> UPDATE my_table SET id=2 WHERE Name='Meier';
sqlite> UPDATE my_table SET id=3 WHERE Name='Schmidt';
sqlite> SELECT * FROM my_table;
id Name
---------- ----------
1 Mueller
2 Meier
3 Schmidt
Sie haben eine Beispieltabelle my_tbl, die aussieht, wie im Bild gezeigt. Wie können Sie die letzten beiden Zeilen mit einem Befehl löschen?
sqlite> DELETE FROM my_table WHERE id >=2;
sqlite> SELECT * FROM my_table;
id Name
---------- ----------
1 Mueller
Sie haben eine CSV-Tabelle test.csv erstellt, die so aussieht:
1,Joe 2,Jim 3,Jane
Sie können die Tabelle mit .import in eine neue Tabelle csv_test importieren:
sqlite> .import test.csv csv_test
Das Ergebnis sieht aber so aus:
sqlite> SELECT * FROM csv_test;
1,Joe
----------
2,Jim
3,Jane
Oder, wenn Sie .header OFF" setzen:
sqlite> .header off
sqlite> SELECT * FROM csv_test;
2,Jim
3,Janep
D.h. die erste Zeile der CSV-Datei wurde irgendwie geschluckt. Wie kann man das Problem lösen?
Tip: schlagen Sie den Befehl .import nach.
Antwort: eine entsprechend formatierte Tabelle muss vorliegen, denn .import füllt die Werte nur ein, und erzeugt kein Tabellen-Schema. Damit die Spalten erkannt werden, muss außerdem der .separator auf , gestellt werden:
sqlite> CREATE TABLE csv_test_1 (id INTEGER, name TEXT);
sqlite> .separator ,
sqlite> .import test.csv csv_test_1
sqlite> SELECT * FROM csv_test_1;
1 Joe
2 Jim
3 Jane