<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Andmebaasid_2023_sql_n%C3%A4ide</id>
	<title>Andmebaasid 2023 sql näide - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Andmebaasid_2023_sql_n%C3%A4ide"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Andmebaasid_2023_sql_n%C3%A4ide&amp;action=history"/>
	<updated>2026-11-07T08:08:28Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Andmebaasid_2023_sql_n%C3%A4ide&amp;diff=20811&amp;oldid=prev</id>
		<title>Tammet: Uus lehekülg: &#039;&lt;pre&gt; /*Kood PostgreSQL (ver 16) jaoks. Iga amet on seotud null või rohkem töötajaga. Iga töötaja töötab täpselt ühes ametis.*/  createdb tootajad /*Andmebaasi loomine....&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Andmebaasid_2023_sql_n%C3%A4ide&amp;diff=20811&amp;oldid=prev"/>
		<updated>2023-10-27T07:11:21Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&amp;lt;pre&amp;gt; &lt;span class=&quot;autocomment&quot;&gt;Kood PostgreSQL (ver 16) jaoks. Iga amet on seotud null või rohkem töötajaga. Iga töötaja töötab täpselt ühes ametis.: &lt;/span&gt;  createdb tootajad /*Andmebaasi loomine....&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/*Kood PostgreSQL (ver 16) jaoks.&lt;br /&gt;
Iga amet on seotud null või rohkem töötajaga.&lt;br /&gt;
Iga töötaja töötab täpselt ühes ametis.*/&lt;br /&gt;
&lt;br /&gt;
createdb tootajad&lt;br /&gt;
/*Andmebaasi loomine.&lt;br /&gt;
&lt;br /&gt;
Alternatiivina serveris andmebaasi loomisele saaks seda koodi prooviks käivitada siin:&lt;br /&gt;
https://www.db-fiddle.com/&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE Amet (amet_kood SMALLINT NOT NULL,&lt;br /&gt;
nimetus VARCHAR(100) NOT NULL,&lt;br /&gt;
palk DECIMAL(10,2) NOT NULL,&lt;br /&gt;
CONSTRAINT pk_amet PRIMARY KEY (amet_kood),&lt;br /&gt;
CONSTRAINT ak_amet_nimetus UNIQUE (nimetus),&lt;br /&gt;
CONSTRAINT chk_amet_palk CHECK (palk&amp;gt;0));&lt;br /&gt;
/*Luuakse baastabel e tabel. See on nimega tabel, mis EI OLE defineeritud teiste &lt;br /&gt;
tabelite põhjal. Tabeli loomisel deklareeritakse piirangud e kitsendused andmetele&lt;br /&gt;
ja andmeid kontrollitakse nende kitsenduste vastu kohe kirjutamisel - andmemuudatused,&lt;br /&gt;
mis üritavad andmebaasi lisada kitsendustele mittevastavaid andmeid, ebaõnnestuvad.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Amet (amet_kood, nimetus, palk) &lt;br /&gt;
VALUES (1, &amp;#039;Juhataja&amp;#039;, 3000), (2, &amp;#039;Raamatupidaja&amp;#039;, 2800), (3, &amp;#039;Koristaja&amp;#039;, 2000);&lt;br /&gt;
/*Korraga saab tabelisse lisada mitu rida.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Amet (amet_kood, nimetus, palk) &lt;br /&gt;
VALUES (300000, &amp;#039;IT-administraator&amp;#039;, 1500);&lt;br /&gt;
/*Ebaõnnestub, sest väärtus 300000 ei kuulu tüüpi SMALLINT.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Amet (amet_kood, nimetus, palk) &lt;br /&gt;
VALUES (3, &amp;#039;IT-administraator&amp;#039;, 2500);&lt;br /&gt;
/*Ebaõnnestub, sest selline amet_kood on juba registreeritud.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Amet (amet_kood, nimetus, palk) &lt;br /&gt;
VALUES (4, &amp;#039;Koristaja&amp;#039;, 2500);&lt;br /&gt;
/*Ebaõnnestub, sest sellise nimetusega amet on juba registreeritud.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Amet (amet_kood, nimetus) &lt;br /&gt;
VALUES (4, &amp;#039;IT-administraator&amp;#039;);&lt;br /&gt;
/*Ebaõnnestub, sest palk puudub.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Amet (amet_kood, nimetus, palk) &lt;br /&gt;
VALUES (4, &amp;#039;IT-administraator&amp;#039;, -5);&lt;br /&gt;
/*Ebaõnnestub, sest palk on negatiivne.*/&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE Tootaja (tootaja_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,&lt;br /&gt;
e_meil VARCHAR(254) NOT NULL,&lt;br /&gt;
eesnimi VARCHAR(50),&lt;br /&gt;
perenimi VARCHAR (50),&lt;br /&gt;
amet_kood SMALLINT NOT NULL DEFAULT 2,&lt;br /&gt;
CONSTRAINT pk_tootaja PRIMARY KEY (tootaja_id),&lt;br /&gt;
CONSTRAINT chk_tootaja_eesnimi_perenimi CHECK (eesnimi IS NOT NULL OR perenimi IS NOT NULL),&lt;br /&gt;
CONSTRAINT chk_tootaja_e_meil CHECK (e_meil LIKE &amp;#039;%@%&amp;#039;),&lt;br /&gt;
CONSTRAINT fk_tootaja_amet FOREIGN KEY (amet_kood) &lt;br /&gt;
REFERENCES Amet(amet_kood) ON UPDATE CASCADE);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Nimed võivad olla pikad: https://en.wikipedia.org/wiki/Hubert_Blaine_Wolfeschlegelsteinhausenbergerdorff_Sr.&lt;br /&gt;
Nime osad võivad puududa: https://digikogu.taltech.ee/et/Item/ab7e8f7e-ce28-4cc1-bb78-40c624d19bf6&lt;br /&gt;
Meiliaadress võib olla kuni 254 märki: https://blog.moonmail.io/what-is-the-maximum-length-of-a-valid-email-address-f712c6c4bc93&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/*Meiliaadress peab olema tõstutundetult unikaalne.&lt;br /&gt;
Näide, et SQL-andmebaasisüsteemid võivad pakkuda võimalusi, mida &lt;br /&gt;
SQL standard ette ei näe.*/&lt;br /&gt;
ALTER TABLE Tootaja ADD CONSTRAINT&lt;br /&gt;
ak_tootaja_e_meil EXCLUDE&lt;br /&gt;
(Upper(e_meil) WITH =);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Tootaja (e_meil, eesnimi, perenimi, amet_kood)&lt;br /&gt;
VALUES (&amp;#039;karl.kask@online.ee&amp;#039;,&amp;#039;Karl&amp;#039;,&amp;#039;Kask&amp;#039;,1),&lt;br /&gt;
(&amp;#039;karin.kadakas@mail.ee&amp;#039;,&amp;#039;Karin&amp;#039;,&amp;#039;Kadakas&amp;#039;,2),&lt;br /&gt;
(&amp;#039;liis.lehis@mail.ee&amp;#039;,&amp;#039;Liis&amp;#039;,&amp;#039;Lehis&amp;#039;,2)&lt;br /&gt;
RETURNING tootaja_id, e_meil;&lt;br /&gt;
/*Lasen tagastada genereeritud identifikaatorid.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Tootaja (e_meil, eesnimi, perenimi, amet_kood)&lt;br /&gt;
VALUES (&amp;#039;Karl.Kask@online.ee&amp;#039;,&amp;#039;Karl&amp;#039;,&amp;#039;Kask&amp;#039;,1);&lt;br /&gt;
/*Lisamine ebaõnnestub, sest tõstundetult vaadates on selline meiliaadress juba registreeritud.*/&lt;br /&gt;
&lt;br /&gt;
INSERT INTO Tootaja (e_meil, eesnimi, perenimi, amet_kood)&lt;br /&gt;
VALUES (&amp;#039;toomas.tuisk@hot.ee&amp;#039;,&amp;#039;Toomas&amp;#039;,&amp;#039;Tuisk&amp;#039;,100);&lt;br /&gt;
/*Lisamine ebaõnnestub, sest sellise koodiga ametit pole registreeritud.&lt;br /&gt;
Andmebaasisüsteem kontrollib viidete terviklikkuse reeglit - referential integrity rule.*/&lt;br /&gt;
&lt;br /&gt;
UPDATE Amet SET amet_kood=100 WHERE amet_kood=1;&lt;br /&gt;
/*Muudatus õnnestub, muudetakse ameti koode ka tabelis Tootaja.*/&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM Tootaja;&lt;br /&gt;
&lt;br /&gt;
DELETE FROM Amet WHERE amet_kood=2;&lt;br /&gt;
/*Kustutamine ebaõnnestub, sest sellise koodiga ametis töötab vähemalt üks töötaja.*/&lt;br /&gt;
&lt;br /&gt;
DELETE FROM Amet WHERE amet_kood=4;&lt;br /&gt;
/*Kustutamine õnnestub, sest sellise koodiga ametis ei tööta ühtegi töötajat.*/&lt;br /&gt;
&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM Tootaja &lt;br /&gt;
WHERE perenimi LIKE &amp;#039;K%&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
WITH tootajad_k AS (SELECT *&lt;br /&gt;
FROM Tootaja &lt;br /&gt;
WHERE perenimi LIKE &amp;#039;K%&amp;#039;)&lt;br /&gt;
SELECT Count(*) AS arv&lt;br /&gt;
FROM tootajad_k;&lt;br /&gt;
&lt;br /&gt;
/*SQL defineerib hulga lugemisoperaatoreid, mis võimaldavad olemasolevate tabelite põhjal tuletada uusi tabeleid.&lt;br /&gt;
Olemasolevatest faktidest tuletatakse uusi.&lt;br /&gt;
Iga sellise operatsiooni sisendiks on üks või mitu tabelit ning tulemuseks samuti tabel, &lt;br /&gt;
mis võib omakorda olla sisendiks järgnevale operatsioonile.&lt;br /&gt;
Eelnevad SELECT laused annavad tulemuseks NIMETU tabeli -&lt;br /&gt;
vastandina NIMEGA tabelile, mis tekib näiteks CREATE TABLE lause tulemusena.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
START TRANSACTION;&lt;br /&gt;
DELETE FROM Tootaja;&lt;br /&gt;
DELETE FROM Amet;&lt;br /&gt;
SELECT * FROM Tootaja;&lt;br /&gt;
SELECT * FROM Amet;&lt;br /&gt;
ROLLBACK;&lt;br /&gt;
SELECT * FROM Tootaja;&lt;br /&gt;
/*Andmebaasikeele lauseid saab koondada ühte loogilisse tervikusse e transaktsiooni&lt;br /&gt;
e tehingusse. Tähendab, et need laused täidetakse kas kõik või&lt;br /&gt;
jäetakse kõik täitmata.*/&lt;br /&gt;
&lt;br /&gt;
SELECT amet_kood, nimetus AS amet_nimetus, palk, e_meil, eesnimi, perenimi&lt;br /&gt;
FROM Tootaja INNER JOIN Amet USING (amet_kood)&lt;br /&gt;
ORDER BY amet_kood, e_meil;&lt;br /&gt;
/*Leia töötajate ja nende ametite andmed.*/&lt;br /&gt;
&lt;br /&gt;
SELECT amet_kood, nimetus&lt;br /&gt;
FROM Amet&lt;br /&gt;
WHERE NOT EXISTS (SELECT * &lt;br /&gt;
FROM Tootaja&lt;br /&gt;
WHERE Tootaja.amet_kood=Amet.amet_kood);&lt;br /&gt;
&lt;br /&gt;
SELECT amet_kood, nimetus&lt;br /&gt;
FROM Amet&lt;br /&gt;
WHERE amet_kood NOT IN (SELECT amet_kood&lt;br /&gt;
FROM Tootaja);&lt;br /&gt;
/*Leia ametid, kus ei tööta ühtki töötajat.&lt;br /&gt;
NOT IN päring täidetakse suurte andmehulkade korral PostgreSQLis palju aeglasemalt kui NOT EXISTS päring.&lt;br /&gt;
Näide sellest, kuidas &amp;quot;abstraktsioon tilgub läbi&amp;quot; e süsteemi hingeelu probleemid mõjutavad&lt;br /&gt;
selle kasutamist.*/&lt;br /&gt;
&lt;br /&gt;
ANALYZE;&lt;br /&gt;
/*Värskenda andmebaasi statistikat.*/&lt;br /&gt;
&lt;br /&gt;
EXPLAIN ANALYZE SELECT amet_kood, nimetus&lt;br /&gt;
FROM Amet&lt;br /&gt;
WHERE amet_kood NOT IN (SELECT amet_kood&lt;br /&gt;
FROM Tootaja);&lt;br /&gt;
/*SELECT lause on deklaratiivne - öeldaks, mida on vaja leida.&lt;br /&gt;
Selle alusel koostab andmebaasisüsteem enda sisestest operatsioonidest (näiteks loe indeksit, loe tabeli plokke, eemalda kordused räsiväärtuste &lt;br /&gt;
leidmise kaudu) koosneva protseduuri - sammude jada. Seda protseduuri nimetatakse täitmisplaaniks.&lt;br /&gt;
Andmebaasisüsteem üritab koostada võimalikult optimaalse täitmisplaani.&lt;br /&gt;
Selle lausega saab vaadata lause täitmise plaani ja täitmise aega.*/&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE VIEW tootajateta_amet WITH (security_barrier) AS&lt;br /&gt;
SELECT amet_kood, nimetus&lt;br /&gt;
FROM Amet&lt;br /&gt;
WHERE NOT EXISTS (SELECT * &lt;br /&gt;
FROM Tootaja&lt;br /&gt;
WHERE Tootaja.amet_kood=Amet.amet_kood);&lt;br /&gt;
/*Luuakse virtuaalne tabel e vaade. See on nimega tabel, mis ON defineeritud teiste &lt;br /&gt;
tabelite põhjal (antud juhul Amet ja Tootaja).*/&lt;br /&gt;
&lt;br /&gt;
SELECT *&lt;br /&gt;
FROM tootajateta_amet;&lt;br /&gt;
/*Vaate põhjal saab teha päringuid e SELECT lauseid ning&lt;br /&gt;
läbi lihtsamate vaadete ka muuta andmeid baastabelites.*/&lt;br /&gt;
&lt;br /&gt;
DROP TABLE Tootaja CASCADE;&lt;br /&gt;
DROP TABLE Amet CASCADE;&lt;br /&gt;
/*Tabelite kustutamine.&lt;br /&gt;
CASCADE tähendab, et kustutatakse ka sõltuvad andmebaasiobjektid -&lt;br /&gt;
antud juhul vaade.*/&lt;br /&gt;
&lt;br /&gt;
dropdb tootajad&lt;br /&gt;
/*Andmebaasi kustutamine.*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>