* Enkel innføring i SQL


Dette er ment som en hjelp for alle i høgskolen som kommer bort i SQL. Det vil kunne skje blant annet i forbindelse med bruk av databasesystemet Oracle. Oracle er den standard som både universitetene og høgskolene har lagt seg på.
Oversikt over SQL komandoer

Innhold:

Hva er SQL ?

Navnet SQL hva betyr det ?

SQL er forkortelse for Structured Query Language eller som vi ville si på norsk "strukturert spørrespråk". På engelsk blir det ofte uttalt "sequel", mens vi på norsk ofte bare uttaler bokstavene: "ess-ku-ell".

Historikk

SQL ble først definert av IBM Research i 1967. I 1979 ble det introdusert kommersielt av Oracle Corporation.

En komite ved ANSI (American National Standards Institute) har nå godkjent SQL som standard språket for RDBMS (relational database management systems), relasjonsdatabase systemer.

I dag er SQL i bruk over hele verden på alle mulige plattformer fra stormaskiner, minimaskiner, arbeidsstasjoner og til vanlige PC'er.

I gode gamle dBase er det bygget inn SQL. Den nyere databasen til Microsoft, Access bruker SQL, men her er det skjult for den vanlige bruker av grafiske funksjoner.

Hva kan du gjøre med SQL ?

Med SQL har du et komplett sett av funksjoner både for å manipulere data, men også for å definer data. Du kan: Forskjellen på SQL og andre data manipuleringsspråk er at SQL ikke er prosedyre-orientert. Det betyr at du kan si hva som skal utføres i stedet for hvordan. Du kan for eksempel med en enkel kommando i SQL oppdatere en rekke tabellrader i databasen uten å tenke på hvor data er lagret eller hvordan de lagres. Disse systemopplysningene blir tatt hånd om av selve databasesystemet og du kan konsentrere deg om dataene.

Nå er selvfølgelig ikke alle lenger nødt til å lære SQL fordi de nye grafiske systemene skjuler det, jfr. MS Access.

Hvordan bruke SQL

Nå følger en enkel demonstrasjon på hvordan du bruker SQL i praksis. Vi vil i rekkefølge se på følgende kommandoer:

Men først må vi se litt på strukturen i en database og definere noen begreper.

Tabell

En database består av tabeller. Videre i denne inføringen, vil vi bruke to tabeller som eksempel. Vi kaller disse for AVDELING og ANSATT.

Tabellen AVDELING:

AVDNR   AVDNAVN                             STED          
------- ----------------------------------- ----------------
0       Fellesadministrasjonen              Borre         
1       Avdeling for helsefag               Tønsberg      
2       Avdeling for lærerutdanning         Eik           
3       Avdeling for maritim utdanning      Borre         
10      IT-avdelingen                                     

Tabellen ANSATT:

ANSNR   ENAVN            STILLING               AVDNR     
------- ---------------- ---------------------- --------
100     Refsdal          Direktør               0         
101     Iveland          Studiesjef             0         
102     Nesse            Kontorsjef             1         
103     Aalvik           Rådgiver               2         
201     Røsland          Førstekonsulent        10        
202     Utnes            Prosjektleder          10        

Hver tabell består av rader (horisontalt) og kolonner (vertikalt). Hver rad består av felt og disse feltene kan ha forskjellige typer verdi. Feltet ANSNR har f.eks verdien 100 i et felt og 101 i et annet. Noen felt kan være av teksttype (CHAR) f.eks feltet STILLING, mens andre kan være av typen tall (NUMBER), f.eks ANSNR. I noen felt kan det være krav om unike (UNIQUE) verdier, f.eks. i feltet ANSNR. Det betyr at tallet 100 bare kan forekomme en gang. I andre som feltet ENAVN kan det være tillatt med samme tekst i flere felt. Det er jo f.eks mulig at flere heter Hansen.

Disse to tabellene har forresten en forbindelse som ofte kalles en "hode-linje-klisjee" .

Det vil si at det er en relasjon fra "hode" som her er AVDELING til en eller flere "linjer" i ANSATT. F.eks. har avdeling nr. 10 flere ansatte.

SELECT kommandoen

Å finne data i en database er den vanligste operasjon. I SQL sammenheng kalles dette "query" som vi på norsk kan kalle spørring. Kommandoen for spørring har to deler (clauses):

SELECT (* eller kolonnenavn)
FROM (tabellnavn)

Eksempel 1:

SELECT ENAVN,AVDNR FROM ANSATT;
Gir resultatet:

ENAVN            AVDNR     
---------------- -----
Refsdal          0         
Iveland          0         
Nesse            1         
Aalvik           2         
Røsland          10        
Utnes            10        

Eksempel 2:

SELECT * FROM AVDELING;
SELECT med symbolet * betyr hele tabellen og gir resultatet:

AVDNR   AVDNAVN                             STED          
------- ----------------------------------- ----------
0       Fellesadministrasjonen              Borre         
1       Avdeling for helsefag               Tønsberg      
2       Avdeling for lærerutdanning         Eik           
3       Avdeling for maritim utdanning      Borre         
10      IT-avdelingen                                     

CREATE kommandoen

Før vi kan finne data i en eller flere tabeller må vi ha laget tabellene. Det gjør vi med kommandoen CREATE.

For å lage tabellen AVDELING gjør vi følgende:

CREATE TABLE AVDELING 
  (AVDNR NUMBER(2),
   AVDNAVN CHAR(30),
   STED CHAR(10));

Table created.
Kommandoen er her delt over flere linjer, men det er ikke nødvendig i praksis. Inne i parentesen lister vi opp feltnavn datatype og datalengde.

AVDNR NUMBER(2) betyr at feltet AVDNR skal være et nummerfelt med lengde 2. I feltet AVDNAVN skal vi ha tekst med maksimal lengde 30 tegn.

Dersom vi ønsket at feltet AVDNR alltid skal ha en verdi kunne vi satt opp kommandoen slik:

CREATE TABLE AVDELING 
  (AVDNR NUMBER(2) NOT NULL,
   AVDNAVN CHAR(30),
   STED CHAR(10));
Dersom vi også ville hindre at det ble registrert flere felt AVDNR med samme tall, kunne vi også definere at feltet skulle være unikt med UNIQUE.

INSERT kommandoen

Etter at vi har laget en tabell med CREATE må vi legge inn data for å få noe å spørre på med SELECT. Den heter INSERT. Denne kommandoen vil for en vanlig sluttbruker være skjult av et skjermbilde hvor data kan registreres og lagres. Men bak "kulissene" vil INSERT kommandoen bli utført:

INSERT INTO AVDELING (1, 'Avdeling for helsefag','Tønsberg');

1 Record created.
Tall kan skrives direkte men tekst må markeres med tegnet ' før og etter.

UPDATE kommandoen

Dersom vi ønsker å endre noen data i en tabell kan vi bruke UPDATE. Denne kommandoen kan endre en eller flere rader samtidig. Vi ønsker f.eks å endre tallet 10 i feltet AVDNR i tabellen ANSATT:

UPDATE ANSATT 
SET AVDNR = 11 
WHERE AVDNR = 10;

2 Records updated.

DELETE kommandoen

Dersom vi nå vil slette AVDNR = 10 i AVDELING kan vi bruke kommandoen DELETE:

DELETE FROM AVDELING
WHERE AVDNR = 10;

1 Record deleted.

Litt mer om SELECT

Som allerede vist ovenfor kan vi bruke et ord (clause) som heter WHERE. Dette ordet går ofte igjen i SELECT.

Klausulen WHERE

Med WHERE vi kan filtrere ut spesielle deler av tabellen.

F.eks. dersom vi bare vil ha de ansatte i en bestemt avdeling:

SELECT ENAVN,AVDNR 
FROM ANSATT
WHERE AVDNR = 10;
Gir resultatet:
ENAVN            AVDNR     
---------------- ------
Røsland          10        
Utnes            10        

Klausulen ORDER BY

Med ORDER BY kan vi foreta sortering på et utvalgt felt.

Vi vil f.eks sortere alle ansatte alfabetisk:

SELECT ENAVN
FROM ANSATT
ORDER BY ENAVN;
Gir resultatet:
ENAVN  
---------------          
Aalvik
Iveland
Nesse  
Refsdal
Røsland   
Utnes            

JOIN

Med "join" kan vi foreta spørring på flere tabeller.

Vi vil f.eks finne alle ansatte i avdeling IT:

SELECT ENAVN
FROM ANSATT,AVDELING
WHERE AVDNR = 10
AND ANSATT.AVDNR= AVDELING.AVDNR;
Gir resultatet:
ENAVN           
----------------
Røsland  
Utnes           

Operatorer og funksjoner

Det finnes mange aritmetiske operatorer og streng manipuleringsfunksjoner i SQL.

Klausulen GROUP BY

Klausulen HAVING

Query og subquery

Endre en tabell

ALTER TABLE ADD

ALTER TABLE MODIFY

Prøv ut SQL med dBase, Access eller Oracle SQL*Plus

SQL med dBase

Dersom du har tilgang til f.eks dBase IV kan du bruke den for å prøve ut SQL kommandoer.

Start opp dBase.

Fra prikken skriver du først:

.set index.on
Du får da en ny prompt:

SQL.
Fra den kan du utføre SQL kommandoene. Lag først tabellen AVDELING, sett deretter inn litt data med INSERT og bruk så SELECT:

SQL. create table avdeling(avdnr numeric(2),avdnavn char(30),sted char(10));

	Table AVDELING created
NB ! I dBase heter talltypen NUMERIC.

Husk å avslutte alle kommandoer med tegnet ;

SQL.insert into avdeling(1,'Avdnavn..','Sted..');
	1 row(s) inserted
Nå kan du spørre med SELECT:

SQL. select * from avdeling;
	AVDNR AVDNAVN 	STED
	1	Avdnavn.. 	Sted..
Nå kan du fortsette videre på egen hånd. Du kan også bruke "online HELP" fra dBase for å få vite mer om SQL.

SQL med Access

I Access kan du få fram alle SQL-kommandoer med funksjonen Query
Pek på knappen merket SQL.

SQL med Oracle SQL*Plus

Start SQL*Plus fra Windows:
  Logg On  

  User Name:   scott
  Password:    tiger 
  Host String: rakel 

Du har da et bilde som ser slik ut:
  SQL*Plus: Release 3.1.3.5.4 - 
  Copyright (c) Oracle Corporation 1979, 1994. All rights reserved.

  Connected to: Oracle7 Server Release 7.1.4.3.2 - Production Release
  With the distributed option PL/SQL Release 2.1.4.3.1 - Production

  SQL>
Oracle setter altid opp en eksempel database med bruker scott/tiger. En av tabellene heter emp.:
SQL> select * from emp; 
    EMPNO ENAME      JOB              MGR HIREDATE        SA     COMM    DEPTNO 
--------- ---------- ---------- --------- --------- --------- -------- ---------
     7369 SMITH      CLERK           7902 17-DEC-80       800               20 
     7499 ALLEN      SALESMAN        7698 20-FEB-81      1600      300      30 
     7521 WARD       SALESMAN        7698 22-FEB-81      1250      500      30 
     7566 JONES      MANAGER         7839 02-APR-81      2975               20 
     7654 MARTIN     SALESMAN        7698 28-SEP-81      1250     1400      30 
     7698 BLAKE      MANAGER         7839 01-MAY-81      2850               30 
     7782 CLARK      MANAGER         7839 09-JUN-81      2450               10 
     7788 SCOTT      ANALYST         7566 09-DEC-82      3000               20 
     7839 KING       PRESIDENT            17-NOV-81      5000               10 
     7844 TURNER     SALESMAN        7698 08-SEP-81      1500         0     30 
     7876 ADAMS      CLERK           7788 12-JAN-83      1100               20 
     7900 JAMES      CLERK           7698 03-DEC-81       950               30 
     7902 FORD       ANALYST         7566 03-DEC-81      3000               20 
     7934 MILLER     CLERK           7782 23-JAN-82      1300               10 

14 rows selected.
Du kan fortsette med andre kommandoer mot emp og evt. bruke dept i tillegg.
© 1994 IT-gruppa ved Høgskolen i Vestfold

  Forfatter: Ole Jørgen Utnes
  Dato     : 20.06.94
  Rev.dato : 15.04.96