Skip to content
Snippets Groups Projects
Commit 2c144d0b authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

SQL-Dumps und Screenshots 18.12.2024, Notizen zur Lösung von Aufgabe 1 vom 11.12.2024

parent 6edb9c1d
No related branches found
No related tags found
No related merge requests found
STUD := studierende Person
LEHR := lehrende Person
Zu (a):
STUD kann mehrere Prüfungsleistungen haben,
theoretisch unendlich viele.
--> eigene Tabelle + Verknüpfung
1. STUD-Tabelle
2. Modul-Tabelle
3. Tabelle, die STUD und Module verknüpft
und auch die Prüfungsleistungen enthält
CREATE TABLE stud (
id INTEGER AUTO_INCREMENT PRIMARY KEY, -- ... für MariaDB. PostgreSQL: id SERIAL PRIMARY KEY
name TEXT,
<weitere Daten: Matr.-Nr., ...>
);
CREATE TABLE module (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name TEXT,
<weitere Daten: ECTS-Punkte, ...>
);
CREATE TABLE score (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
stud_id INTEGER FOREIGN KEY REFERENCES stud (id),
module_id INTEGER FOREIGN KEY REFERENCES module (id),
module_score INTEGER,
<weitere Daten: Versuch, Timestamp, ...>
);
Achtung: In Wirklichkeit können sich die ECTS-Punkte für ein Modul auch ändern.
Gilt dann die Zahl für den Zeitpunkt des Bestehens?
(Für diese Aufgabe: ECTS-Punkte als konstant angenommen.)
Um die angefragte Liste zu erhalten, benötigen wir noch einen JOIN-Befehl:
SELECT s.name, m.name, sc.module_score
FROM stud AS s JOIN score AS sc ON s.id = sc.stud_id
JOIN module AS m ON sc.module_id = m.id;
Evtl.: stud AS s LEFT JOIN score ... LEFT JOIN module ...;
--> alle Studierenden anzeigen, auch solche ohne Prüfungsleistungen
Evtl.: CREATE VIEW stud_scores AS SELECT ... <s.o.>;
Zu (b):
2 Tabellen: Lehrende teacher (ähnlich Studierende),
Verknüpfungstabelle subjects: Zuordnung Lehrende <--> Lehrveranstaltungen
(Tabelle "module" gibt es bereits.)
SELECT t.name, m.name FROM teacher AS t LEFT JOIN subjects AS s ON t.id = s.teacher_id
LEFT JOIN module AS m ON s.module_id = m.id;
Zu (c):
SELECT m.name, t.name FROM module AS m LEFT JOIN subjects AS s ON m.id = s.module_id
LEFT JOIN teacher AS t ON s.teacher_id = t.id;
oder:
SELECT m.name, t.name FROM teacher AS t RIGHT JOIN subjects AS s ON t.id = s.teacher_id
RIGHT JOIN module AS m ON s.module_id = m.id;
Schönere Ausgabe:
SELECT m.name AS "Module", t.name AS "LEHR"
FROM teacher AS t RIGHT JOIN subjects AS s ON t.id = s.teacher_id
RIGHT JOIN module AS m ON s.module_id = m.id;
testdb=> SELECT * FROM tier; SELECT sum (id) FROM tier;
name | tierart | id
-----------+-----------+------
Schnubbel | Kaninchen | 42
Hektor | Hund | 7
Esmeralda | Spinne | 94
Arancha | Spinne | 2010
Timmy | Hund | 1990
(5 Zeilen)
sum
------
4143
(1 Zeile)
testdb=> SELECT SUM (id) FROM tier;
sum
------
4143
(1 Zeile)
testdb=> SELECT SUM (id) FROM tier WHERE tierart = 'Spinne';
sum
------
2104
(1 Zeile)
testdb=> SELECT SUM (id) FROM tierart;
FEHLER: Relation »tierart« existiert nicht
ZEILE 1: SELECT SUM (id) FROM tierart;
^
testdb=> SELECT tierart FROM tier;
tierart
-----------
Kaninchen
Hund
Spinne
Spinne
Hund
(5 Zeilen)
testdb=> SELECT tierart FROM tier UN;
testdb=> SELECT tierart FROM tier UNIQUE;
FEHLER: Syntaxfehler bei »UNIQUE«
ZEILE 1: SELECT tierart FROM tier UNIQUE;
^
testdb=> SELECT UNItierart FROM tier;
testdb=> SELECT UNIQUE tierart FROM tier;
FEHLER: Syntaxfehler bei »tierart«
ZEILE 1: SELECT UNIQUE tierart FROM tier;
^
testdb=> SELECT DISTINCT tierart FROM tier;
tierart
-----------
Spinne
Hund
Kaninchen
(3 Zeilen)
testdb=> SELECT SUM (id) FROM tier GROUP BY tierart;
sum
------
2104
1997
42
(3 Zeilen)
testdb=> SELECT tierart, SUM (id) FROM tier GROUP BY tierart;
tierart | sum
-----------+------
Spinne | 2104
Hund | 1997
Kaninchen | 42
(3 Zeilen)
testdb=> SELECT tierart, SUM (id) FROM tier GROUP BY tierart HAVING SUM (id) > 1000;
tierart | sum
---------+------
Spinne | 2104
Hund | 1997
(2 Zeilen)
testdb=> SELECT tierart, SUM (id) FROM tier GROUP BY tierart WHERE id > 1000;
FEHLER: Syntaxfehler bei »WHERE«
ZEILE 1: ...LECT tierart, SUM (id) FROM tier GROUP BY tierart WHERE id >...
^
testdb=> SELECT tierart, SUM (id) FROM tier WHERE id > 1000 GROUP BY tierart;
tierart | sum
---------+------
Spinne | 2010
Hund | 1990
(2 Zeilen)
testdb=>
cassini/home/peter/bo/2024ws/dbs/20241218> psql -h localhost -U dbsadmin -W testdb Passwort:
psql (15.10 (Debian 15.10-0+deb12u1))
SSL-Verbindung (Protokoll: TLSv1.3, Verschlüsselungsmethode: TLS_AES_256_GCM_SHA384, Komprimierung: aus)
Geben Sie »help« für Hilfe ein.
testdb=> \h grant Anweisung: GRANT Beschreibung: definiert Zugriffsprivilegien
Syntax:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] Tabellenname [, ...]
| ALL TABLES IN SCHEMA Schemaname [, ...] }
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( Spaltenname [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( Spaltenname [, ...] ) }
ON [ TABLE ] Tabellenname [, ...]
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
GRANT { { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON { SEQUENCE Sequenzname [, ...]
| ALL SEQUENCES IN SCHEMA Schemaname [, ...] }
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE Datenbankname [, ...]
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN Domänenname [, ...]
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER FDW-Name [, ...]
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER Servername [, ...]
TO Rollenangabe [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY Rollenangabe ]
testdb=> REVOKE select ON lieder FROM dbs;
FEHLER: Relation »lieder« existiert nicht
testdb=> REVOKE select ON lied FROM dbs;
REVOKE
testdb=> \q
cassini/home/peter/bo/2024ws/dbs/20241218> psql -h localhost -U dbsadmin -W testdb < testdb-dump-20241218-02^Cql
cassini/home/peter/bo/2024ws/dbs/20241218> pg_dump --clean -h localhost -U dbs -W testdb > testdb-dump-20241218-02.sql
Passwort:
pg_dump: Fehler: Anfrage fehlgeschlagen: FEHLER: keine Berechtigung für Tabelle lied
pg_dump: Detail: Anfrage war: LOCK TABLE public.lied IN ACCESS SHARE MODE
cassini/home/peter/bo/2024ws/dbs/20241218>
cassini/home/peter/bo/2024ws/dbs/20241218> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 465,8G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 465,3G 0 part
└─sda5_crypt 254:0 0 465,3G 0 crypt
├─cassini--vg-root 254:1 0 464,3G 0 lvm /
└─cassini--vg-swap_1 254:2 0 980M 0 lvm [SWAP]
cassini/home/peter/bo/2024ws/dbs/20241218> mount | grep vg-root
/dev/mapper/cassini--vg-root on / type ext4 (rw,relatime,errors=remount-ro)
cassini/home/peter/bo/2024ws/dbs/20241218>
--
-- PostgreSQL database dump
--
-- Dumped from database version 15.10 (Debian 15.10-0+deb12u1)
-- Dumped by pg_dump version 15.10 (Debian 15.10-0+deb12u1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
ALTER TABLE ONLY public.lied DROP CONSTRAINT lied_fkey;
DROP INDEX public.kuenstler_index;
ALTER TABLE ONLY public.cd DROP CONSTRAINT cd_pkey;
DROP TABLE public.tier;
DROP VIEW public.cd_lieder;
DROP TABLE public.lied;
DROP TABLE public.kuenstler;
DROP TABLE public.cd;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: cd; Type: TABLE; Schema: public; Owner: dbsadmin
--
CREATE TABLE public.cd (
id integer NOT NULL,
albumtitel text,
interpret integer,
erscheinungsjahr integer
);
ALTER TABLE public.cd OWNER TO dbsadmin;
--
-- Name: kuenstler; Type: TABLE; Schema: public; Owner: dbsadmin
--
CREATE TABLE public.kuenstler (
id integer,
interpret text,
gruendungsjahr integer
);
ALTER TABLE public.kuenstler OWNER TO dbsadmin;
--
-- Name: lied; Type: TABLE; Schema: public; Owner: dbsadmin
--
CREATE TABLE public.lied (
id integer,
track integer,
titel text
);
ALTER TABLE public.lied OWNER TO dbsadmin;
--
-- Name: cd_lieder; Type: VIEW; Schema: public; Owner: dbsadmin
--
CREATE VIEW public.cd_lieder AS
SELECT c.id,
c.albumtitel,
k.gruendungsjahr,
c.erscheinungsjahr,
l.track,
l.titel
FROM ((public.cd c
JOIN public.kuenstler k ON ((c.interpret = k.id)))
JOIN public.lied l ON ((c.id = l.id)));
ALTER TABLE public.cd_lieder OWNER TO dbsadmin;
--
-- Name: tier; Type: TABLE; Schema: public; Owner: dbsadmin
--
CREATE TABLE public.tier (
name text,
tierart text,
id integer
);
ALTER TABLE public.tier OWNER TO dbsadmin;
--
-- Data for Name: cd; Type: TABLE DATA; Schema: public; Owner: dbsadmin
--
COPY public.cd (id, albumtitel, interpret, erscheinungsjahr) FROM stdin;
4712 Wish You Were Here 312 1975
4713 Freak of Nature 311 2001
4711 Not That Kind 311 2000
4714 leere CD 313 2024
\.
--
-- Data for Name: kuenstler; Type: TABLE DATA; Schema: public; Owner: dbsadmin
--
COPY public.kuenstler (id, interpret, gruendungsjahr) FROM stdin;
311 Anastacia 1999
312 Pink Floyd 1965
314 Beethoven 1770
\.
--
-- Data for Name: lied; Type: TABLE DATA; Schema: public; Owner: dbsadmin
--
COPY public.lied (id, track, titel) FROM stdin;
4711 1 Not That Kind
4712 1 Shine On You Crazy Diamond
4713 1 Paid my Dues
4711 3 Cowboys & Kisses
4711 2 I'm Outta Love
\N 0 Alle meine Entchen
\.
--
-- Data for Name: tier; Type: TABLE DATA; Schema: public; Owner: dbsadmin
--
COPY public.tier (name, tierart, id) FROM stdin;
Schnubbel Kaninchen 42
Hektor Hund 7
Esmeralda Spinne 94
Arancha Spinne 2010
Timmy Hund 1990
\.
--
-- Name: cd cd_pkey; Type: CONSTRAINT; Schema: public; Owner: dbsadmin
--
ALTER TABLE ONLY public.cd
ADD CONSTRAINT cd_pkey PRIMARY KEY (id);
--
-- Name: kuenstler_index; Type: INDEX; Schema: public; Owner: dbsadmin
--
CREATE INDEX kuenstler_index ON public.kuenstler USING btree (interpret);
--
-- Name: lied lied_fkey; Type: FK CONSTRAINT; Schema: public; Owner: dbsadmin
--
ALTER TABLE ONLY public.lied
ADD CONSTRAINT lied_fkey FOREIGN KEY (id) REFERENCES public.cd(id) ON DELETE CASCADE;
--
-- Name: TABLE cd; Type: ACL; Schema: public; Owner: dbsadmin
--
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE public.cd TO dbs;
--
-- Name: TABLE kuenstler; Type: ACL; Schema: public; Owner: dbsadmin
--
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE public.kuenstler TO dbs;
--
-- Name: TABLE lied; Type: ACL; Schema: public; Owner: dbsadmin
--
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE public.lied TO dbs;
--
-- Name: TABLE cd_lieder; Type: ACL; Schema: public; Owner: dbsadmin
--
GRANT SELECT ON TABLE public.cd_lieder TO dbs;
--
-- Name: TABLE tier; Type: ACL; Schema: public; Owner: dbsadmin
--
GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE public.tier TO dbs;
--
-- PostgreSQL database dump complete
--
testdb=> SELECT * FROM tier; SELECT sum (id) FROM tier;
name | tierart | id
-----------+-----------+------
Schnubbel | Kaninchen | 42
Hektor | Hund | 7
Esmeralda | Spinne | 94
Arancha | Spinne | 2010
Timmy | Hund | 1990
(5 Zeilen)
sum
------
4143
(1 Zeile)
testdb=> SELECT SUM (id) FROM tier;
sum
------
4143
(1 Zeile)
testdb=> SELECT SUM (id) FROM tier WHERE tierart = 'Spinne';
sum
------
2104
(1 Zeile)
testdb=> SELECT SUM (id) FROM tierart;
FEHLER: Relation »tierart« existiert nicht
ZEILE 1: SELECT SUM (id) FROM tierart;
^
testdb=> SELECT tierart FROM tier;
tierart
-----------
Kaninchen
Hund
Spinne
Spinne
Hund
(5 Zeilen)
testdb=> SELECT tierart FROM tier UN;
testdb=> SELECT tierart FROM tier UNIQUE;
FEHLER: Syntaxfehler bei »UNIQUE«
ZEILE 1: SELECT tierart FROM tier UNIQUE;
^
testdb=> SELECT UNItierart FROM tier;
testdb=> SELECT UNIQUE tierart FROM tier;
FEHLER: Syntaxfehler bei »tierart«
ZEILE 1: SELECT UNIQUE tierart FROM tier;
^
testdb=> SELECT DISTINCT tierart FROM tier;
tierart
-----------
Spinne
Hund
Kaninchen
(3 Zeilen)
testdb=> SELECT SUM (id) FROM tier GROUP BY tierart;
sum
------
2104
1997
42
(3 Zeilen)
testdb=> SELECT tierart, SUM (id) FROM tier GROUP BY tierart;
tierart | sum
-----------+------
Spinne | 2104
Hund | 1997
Kaninchen | 42
(3 Zeilen)
testdb=> SELECT tierart, SUM (id) FROM tier GROUP BY tierart HAVING SUM (id) > 1000;
tierart | sum
---------+------
Spinne | 2104
Hund | 1997
(2 Zeilen)
testdb=> SELECT tierart, SUM (id) FROM tier GROUP BY tierart WHERE id > 1000;
FEHLER: Syntaxfehler bei »WHERE«
ZEILE 1: ...LECT tierart, SUM (id) FROM tier GROUP BY tierart WHERE id >...
^
testdb=> SELECT tierart, SUM (id) FROM tier WHERE id > 1000 GROUP BY tierart;
tierart | sum
---------+------
Spinne | 2010
Hund | 1990
(2 Zeilen)
testdb=>
cassini/home/peter/bo/2024ws/dbs/20241218> psql -h localhost -U dbs -W testdb
Passwort:
psql (15.10 (Debian 15.10-0+deb12u1))
SSL-Verbindung (Protokoll: TLSv1.3, Verschlüsselungsmethode: TLS_AES_256_GCM_SHA384, Komprimierung: aus)
Geben Sie »help« für Hilfe ein.
testdb=> SELECT * FROM tier;
name | tierart | id
-----------+-----------+------
Schnubbel | Kaninchen | 42
Hektor | Hund | 7
Esmeralda | Spinne | 94
Arancha | Spinne | 2010
Timmy | Hund | 1990
(5 Zeilen)
testdb=> SELECT * FROM tier;
name | tierart | id
-----------+-----------+------
Schnubbel | Kaninchen | 42
Hektor | Hund | 7
Esmeralda | Spinne | 94
Arancha | Spinne | 2000
Timmy | Hund | 2000
(5 Zeilen)
testdb=>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment