SQL Flashcards

1
Q

relasjonsterminologi

A
relasjon/tabell
relasjonsnavn
relasjonsskjema
attributt
instans / forkomst / tuppel
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

lage en tabell

A
create table R
(A1 D1 [S1],
...
An Dn [Sn],
[liste av skranker]
);

R er navnet på relasjonen/tabellen Ai er et atributt
Dj er et domene
Sk er en skranke

[ ] betyr at dette leddet er en valgfri del av setningen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

datatyper i PostgreSQL

A
int(eger)
real
char(n)
varchar(n)
numeric(n, d)
boolean
date
time
timestamp
bit(n)
bit varying(n)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

vanlige skranker

A

NOT NULL
UNIQUE
PRIMARY KEY
CHECK (v = … OR v = …)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

legge inn data i tabeller

A

INSERT INTO R(A1, A2, …, Ak)
VALUES (v1, v2, …, vk)

Attributtlisten kan sløyfes hvis den dekker samtlige attributter i R og følger attributtenes default rekkefølge

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

hente data fra tabeller

A
SELECT [DISTINCT] 
FROM 
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY  [ASC | DESC]
[ [ASC | DESC] ] ... ];
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hva slags samling av tupler bruker select?

A

bag

Altså kan samme tuppel forekomme flere ganger.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

join-betingelse

A

kobler sammen forekomster i ulike tabeller forutsatt at verdiene i de gitte attributtene er like

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

lovlige uttrykk/relasjoner i where-betingelser

A

=
<> (not equal)

=
LIKE (ved tekststreng)
BETWEEN

IS (NOT) NULL
(NOT) EXISTS
(NOT) IN
ALL
ANY

date ‘yyyy-mm-dd’
time ‘hh:mm:ss+hh’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

wildcards ved bruk av LIKE

A

% - vilkårlig sekvens (null eller flere)

_ - ett vilkårlig tegn

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

fremmednøkkel i SQL

A

navn CHAR(20) REFERENCES Person(navn)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

verdiskranke i SQL

A

kjonn CHAR(1) NOT NULL CHECK(kjonn IN (‘M’, ‘F’))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

enkeltrolleskranker som bare går mellom gruppererroller, blir til forekomstrestirksjoner som ser på ___

A

NULL

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

dobbeltrolleskranker hvor gruppererrollene sammenliknes, blir til forekomstrestriksjoner som ser på ___

A

verdiene i attributtene

CHECK( (gren_blir_saget IS NULL) or
gren_blir_sittet_på IS NULL) or
(gren_blir_saget <> gren_blir_sittet_på)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hvordan håndheves fremmednøkler?

A
  • Ved INSERT på A må vi sjekke om fremmednøkkelen har en lovlig verdi (peker på en forkomst av B)
  • Ved DELETE av en B må vi sjekke at ingen A har en fremmednøkkel til denne forekomsten av B
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Hvilke referanserelasjoner kan fjernes (undertrykkes) fra relasjonsdatabaseskjemaet?

A

Tabeller som kommer fra referansebegreper, altså begreper som ikke spiller noen andre gruppererroller enn de som inngår i den utvalgte referansemåten, og som spiller minst én referanserolle.

17
Q

Finn navn på de ansatte som er ansatt etter 2003

A

SELECT navn
FROM Ansatt
WHERE AnsattDato > date ‘2003-12-31’

18
Q

Eksempel på en seleksjonsbetingelse?

A

WHERE navn = ‘GET’

19
Q

Eksempel på en join-betingelse?

A

WHERE p.id = k.id

20
Q

oppdater data

A

UPDATE R
SET A1 = E1, …, Ak = Ek
[WHERE C];

21
Q

slett data

A

DELETE FROM R

[WHERE C];

22
Q

aggregeringsfunksjoner

A

count, min, max, sum, avg

23
Q

count(*)

A

gir antall tupler i tabellen

24
Q

count(gender)

A

gir antall tupler i tabellen der attributtet gender ikke er null

25
Q

gir antall forskjellige verdier i attributtet firstname

A

count(distinct firstname)

26
Q

Gitt tabellen Ansatt(anr, navn, lonn).

Finn den største lønnsforskjellen

A
SELECT max(lonn) - min(lonn)
FROM Ansatt
27
Q

Gitt tabellen Ansatt(anr, navn, lonn),

finn sum lønnsutgifter og gjennomsnittslønn.

A
SELECT sum(lonn), avg(lonn)
FROM Ansatt

HUSK! nil-verdier regnes ikke med

28
Q

Hvordan beregnes resultatet av grupperinger (GROUP BY)?

A
  1. Bregen SELECT * FROM … WHERE …
  2. Lag grupper av de tuplene som er like i alle grupperingsattributtene
  3. Utfør aggregeringsfunksjonene lokalt i hver gruppe
  4. Presenter én resultatlinje for hver gruppe
29
Q

Hva må man passe på ved GROUP BY-spørringer?

A

Alle attributter som ikke er grupperingsattributter, må være funksjonelt avhengige av grupperingsattributtene.

En god regel er å inkludere alle grupperingsattributtene i resultatattributt-listen.

30
Q

Finn antall ansatte i hver avdeling og gjennomsnittlig lønn for disse.

Ansatt(anr, navn, lonn, avd)
Avdeling(avdnr, avdelingsnavn, leder)
Prosjektplan(pnr, anr, timer)

A

SELECT avd, count(*), avg(lonn)
FROM Ansatt
GROUP BY avd

31
Q

WHERE vs. HAVING

A
  • WHERE-betingelsen velger ut de tuplene som skal
    danne datagrunnlaget for grupperingen
  • HAVING-betingelsen plukker ut de tuplene fra det ferdig-grupperte resultatet som skal med i det endelige svaret
  • HAVING-betingelsen kan inneholde aggregatfunksjoner
32
Q

en tenkt relasjon som vi bruker som mellomresultat i kompliserte SQL-beregninger

A
CREATE VIEW Innsats[(A1, ...)] as (
     SELECT ...
)
UNION
(
    SELECT ...
)
33
Q

relasjonssammenlikninger

A
EXISTS R
NOT EXISTS R
IN R
NOT IN R
ANY R
ALL R
34
Q

Finn navn på ansatte som skal arbeide mer enn 10 timer på samtlige av sine prosjekter

Ansatt(anr, navn, lonn, avd)
Avdeling(avdnr, avdelingsnavn, leder)
Prosjektplan(pnr, anr, timer)

A
SELEC navn
FROM Ansatt
WHERE NOT EXISTS (
    SELECT *
    FROM Prosjektplan
    WHERE Ansatt.anr = Prosjektplan.anr
    AND Prosjektplan.timer <= 10
)
35
Q

hengetuppel

A

Når vi joiner to tabeller, kaller vi et tuppel som ikke har en match i den andre relasjonen, et hengetuppel

36
Q

join-varianter

A

Generelt: FROM tbl1 JOIN tbl2 ON tbl1.a1 = tbl2.a1

(INNER) JOIN
NATURAL JOIN
FULL OUTER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN