SQL Flashcards

(36 cards)

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
gir antall forskjellige verdier i attributtet firstname
count(distinct firstname)
26
Gitt tabellen Ansatt(anr, navn, lonn). | Finn den største lønnsforskjellen
``` SELECT max(lonn) - min(lonn) FROM Ansatt ```
27
Gitt tabellen Ansatt(anr, navn, lonn), | finn sum lønnsutgifter og gjennomsnittslønn.
``` SELECT sum(lonn), avg(lonn) FROM Ansatt ``` HUSK! nil-verdier regnes ikke med
28
Hvordan beregnes resultatet av grupperinger (GROUP BY)?
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
Hva må man passe på ved GROUP BY-spørringer?
Alle attributter som ikke er grupperingsattributter, må være funksjonelt avhengige av grupperingsattributtene. En god regel er å inkludere alle grupperingsattributtene i resultatattributt-listen.
30
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)
SELECT avd, count(*), avg(lonn) FROM Ansatt GROUP BY avd
31
WHERE vs. HAVING
- 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
en tenkt relasjon som vi bruker som mellomresultat i kompliserte SQL-beregninger
``` CREATE VIEW Innsats[(A1, ...)] as ( SELECT ... ) UNION ( SELECT ... ) ```
33
relasjonssammenlikninger
``` EXISTS R NOT EXISTS R IN R NOT IN R ANY R ALL R ```
34
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)
``` SELEC navn FROM Ansatt WHERE NOT EXISTS ( SELECT * FROM Prosjektplan WHERE Ansatt.anr = Prosjektplan.anr AND Prosjektplan.timer <= 10 ) ```
35
hengetuppel
Når vi joiner to tabeller, kaller vi et tuppel som ikke har en match i den andre relasjonen, et hengetuppel
36
join-varianter
Generelt: FROM tbl1 JOIN tbl2 ON tbl1.a1 = tbl2.a1 ``` (INNER) JOIN NATURAL JOIN FULL OUTER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN ```