1. SQL datadefinisjon og manipulering



Like dokumenter
1. SQL spørringer mot flere tabeller

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Miniverden og ER- modell

Oppgaver Oppgave a: Sett opp mulige relasjoner

Metaspråket for å beskrive grammatikk

1. Relasjonsmodellen Kommentarer til læreboka

Integritetsregler i SQL. Primærnøkler

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

Integritetsregler i SQL

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

1. Normalisering Kommentarer til læreboka

Datamodellering og databaser SQL, del 2

Databaser: Relasjonsmodellen, del I

1. Innføring i bruk av MySQL Query Browser

Databaser kort intro. Tom Heine Nätt

Datamodellering og databaser SQL, del 2

Tilkobling og Triggere

Datamodellering og databaser SQL, del 2

Utvikling fra kjernen og ut

Integritetsregler i SQL

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

1. Datamodellering Kommentarer til læreboka

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

HØGSKOLEN I SØR-TRØNDELAG

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Oppgave 1 (Opprett en database og en tabell)

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

Introduksjon til fagfeltet

Fag TDT4145 Datamodellering og databasesystemer Øving 3: Relasjonsalgebra og SQL

Utvikling fra kjernen og ut

Applikasjonsutvikling med databaser

Transaksjoner og flerbrukerproblematikk. Transaksjoner

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

IN2090 Databaser og datamodellering 07 Datamanipulering

SQL Introduksjonskurs. Oversikt

Løsningsforslag matoppskrifter modellering

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

Sikkerhet og tilgangskontroll i RDBMS-er

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

Repetisjon: Normalformer og SQL

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET. triggere og views. Institutt for Informatikk. INF Arne Maus 1

INF1300 Introduksjon til databaser

HØGSKOLEN I SØR-TRØNDELAG

Komplisert eksempel. IN2090 Databaser og datamodellering 07 Datamanipulering. Flere eksempler: Kombinere aggregater. Komplisert eksempel med WITH

>>21 Datamodellering i MySQL Workbench

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

HØGSKOLEN I SØR-TRØNDELAG

ITGK - H2010, Matlab. Dagens tema : Teori - Databaser

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Eksamen i IBE Databaser H 2008

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

En lett innføring i foreninger (JOINs) i SQL

En liten rekap. Spørrespråk. I dag SELECT

Videregående programmering 6

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

SQL SELECT-FROM-WHERE. Skjemadefinisjon og datainnsetting i SQL. Semantikk bak ein-relasjons-spørring

INF3100 V2018 Obligatorisk oppgave nr. 2

Løsningsforlag for oblig 1, databaser 2010

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

EKSAMEN 6102 / 6102N DATABASER

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

Delinnlevering 2. INF1050, våren Inge Svale Hauger Handagard (ishandag) Tor Hildrum (thildru)

Forelesning 1 DAS - Introduksjon / Systemer / Brukeradmin - (Tom Heine Nätt /) Edgar Boström / Lars V. Magnusson

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Samtidighetsfenomener og anomalier i eksekveringsplaner. INF Ellen Munthe-Kaas 1

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Utvikling fra kjernen og ut

Brukermanual for kommuneansvarlig og testleder

Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi.

INF130 INF130. INF130:Repetisjon INF130:Repetisjon 1. Tabeller og enkle spørringer. Repetisjon

INF1300 Introduksjon til databaser

EKSAMEN DATABASER

>>12 Arbeide med MySQL

Vanlige spørsmål om EndNote (april 2013)

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

Ekvivalente stier (Equivalence of Path, EOP) i storm

Tabeller og enkle spørringer

Bruke SQL fra Python. Med Psycopg2

Øvingsoppgave uke 3. Fanger i fengsel

WinMed Allmenn NPR. Lysaker Torg 15 Postboks LYSAKER. Tlf: Fax: E-post:

Eksamen i IBE102 Webutvikling Våren 2017.

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

Ulike DBMSer. Mest kjente: Oracle PostGreSQL* MySQL* SQLServer* DB2 SQLite Access (DBMS og utv. verktøy i ett) *Skal benyttes i kurset.

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

IN2090 Databaser og datamodellering. 08 Typer og skranker

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Transkript:

Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag SQL datadefinisjon og manipulering Tore Mallaug 7.10.2008 Lærestoffet er utviklet for faget Databaser 1. SQL datadefinisjon og manipulering Resymé: Denne leksjonen omhandler datadefinisjonsspråk DDL (kap. 4.2 i læreboka), inkludert CREATE TABLE. Videre ser vi på spørringer som endrer på datainnholdet i tabeller (kap. 4.3.1), inkludert INSERT, DELETE og UPDATE. Eksemplenene kan brukes både i MySQL og MS Access. Innhold 1.1. KOMMENTARER TIL LÆREBOKA... 1 1.2. EKSEMPELDATABASE: TIMEAVTALER... 2 1.3. CREATE TABLE...3 1.3.1. Opprette tabeller i MS Access... 3 1.3.2. Opprette tabeller i MySQL... 6 1.3.3. Bruk av CASCADE... 7 1.3.4. Endring av tabellstruktur... 8 1.4. INSERT... 8 1.5. UPDATE... 9 1.6. DELETE... 9 1.1. Kommentarer til læreboka Sidereferanser gjelder for 2.utgaven av boka (bruker du 1.utg. av boka vil ikke alle referansene stemme). Har valgt å la eksemplene fra MS Access stå i leksjonen, selv om disse ikke er med i læreboka. Dette for å illustrere forskjeller mellom MS Access og MySQL. Denne leksjonen omhandler datadefinisjonsspråket (DDL) til SQL (kap. 4.2), og den delen av datamanipuleringsspråket (DML) som manipulerer, eller endrer, på innholdet i tabellene i relasjonsdatabasen (kap.4.3.1). Hovedforskjellen på SQL-spørringene i denne leksjonen fremfor SELECT er at disse spørringene medfører fysiske endringer i databasestrukturen eller databaseinnholdet. Slike spørringer kan vi også kalle skriveoperasjoner mot databasen (eng. write), som medfører varige endringer i databasen. SELECT-setninger utfører kun leseoperasjoner (eng. read), som ikke endrer noe i selve databasen. I en flerbrukerdatabase kan skriveoperasjoner ha konsekvenser for andre brukere av databasen, derfor bør slike spørringer utførers med en større forsiktighet enn SELECT. Les alt i kap. 4 fram til og med 4.3.1, men merk deg følgende:

SQL datadefinisjon og manipulering side 2 av 9 ER-modellen i figur 4.2 1 er ikke viktig foreløpig. ER kommer vi tilbake til i to egne leksjoner om datamodellering, så se bort fra denne nå. Det viktige nå er å forstå hvordan tabellene på side 106-107 er bygd opp, slik at du lettere kan forstå SQL-eksemplene i boka. Vi legger ikke vekt på bruk av indekser (kap. 4.2.2) i SQL-delen, så se bort fra dette (indekser nevnes til slutt i kurset / kapittel 8). Det samme gjelder Commit-Rollback (kap. 4.3.1.4). Dette er viktig hvis du skal lage transaksjoner /programmer som inneholder flere SQL-setninger. Men som opplæring i SQL trenger du ikke tenke på COMMIT og ROLLBACK, i alle fall ikke hvis du bruker MS Access. I MySQL kan en anta at såkalt "auto-commit" eller AUTOCOMMIT (se evt. læreboka kap. 8.2.3. "Transaksjoner i SQL" hvis du lurer på hva dette betyr) er satt siden dette i følge MySQL er "default" setting. Hvis DBMS-et ikke utfører COMMIT automatisk kan det oppstå minneproblemer på databasetjeneren over tid siden DBMS-et da vil betrakte alle kjørte SQL-spørringene som "ikke avsluttet" i databasesystemet. Bruker du et annet DBMS enn MySQL eller MS Access, f.eks. Oracle, og er usikker på dette, så sjekk i manualen til det aktuelle databasesystemet. Hvis man bruker et verktøy som MS Access kan en bruke funksjoner i verktøyet for å opprette nye tabeller, slette tabeller og legge inn nye tupler (gjøres typisk ved å lage egne skjermbilder for dette, såkalte skjema (eng. forms)). Men det er greit å kunne gjøre dette i SQL også, fordi SQL-setningene er relativt verktøyuavhengige. De vil f.eks. også fungerer i MySQL, PostgreSQL og Oracle, selv om det dessverre finnes noen lokale særheter ute og går her (f.eks. ulike spesifikasjoner av fremmednøkler i MySQL, eller ulike datoformat). CREATE TABLE, UPDATE, INSERT og DELETE er relativt enkle setninger å lære seg. I tillegg til det som står i kap.4, kan du lese kap. 5.4 om virtuelle tabeller, eller CREATE VIEW i SQL. VIEW-s kan brukes som et alternativ til å kjøre SELECT-spørringer direkte mot tabellen, f.eks. hvis en ønsker at sluttbrukeren, eller gjerne en bestemt brukergruppe (dette kommer vi tilbake til i kap.8), ikke skal kunne hente ut data fra hele tabellen, men bare en del av den. MS Access støtter ikke bruk av VIEW. Når du skriver SQL: Vær nøye med alle tegn som, og ; (til slutt i setningen). Hvis du glemmer disse blir det fort syntax error. Dette gjelder for alle SQL-spørringer, ikke bare SELECT. 1.2. Eksempeldatabase: timeavtaler Videre i leksjon bruker vi en eksempeldatabase for å registrere timeavtaler ved et legesenter. Tabellene under brukes for å lagre nødvendige data knyttet til timebestillingene. En pasient (tabellen PASIENT) for tildelt en time hos en lege (tabellen LEGE) på en bestemt dag (dato) og tidspunkt dette registreres i tabellen TIMEBESTILLING. I tillegg registreres behov for rom for timen - normalt legekontoret (konsultasjon), men senteret har også eget behandlingsrom for enkle kirurgiske inngrep. En lege vil ikke utføre både konsultasjoner og kirurgi på samme dag. Tabellen LEGE_ROM viser hvor en lege befinner seg på en bestemt dag, mens ROM_BEHANDLING viser hva slags type rom det er snakk om (behandling her er enten lik konsultasjon eller kirurgisk ). 1 Figur 4.1 i 1.utg. av boka.

SQL datadefinisjon og manipulering side 3 av 9 TIMEBESTILLING (ansattnr*, pasientnr*, dag*, tid) LEGE (ansattnr, legenavn) PASIENT (pasientnr, fornavn, etternavn, gateadresse, postnr, poststed, telefon) LEGE_ROM (ansattnr*, dag, rom*) ROM_BEHANDLING (rom, behandling) Understekte attributter er primærnøkkel. Attributter merket * er fremmednøkler. 1.3. CREATE TABLE 1.3.1. Opprette tabeller i MS Access Eksempler på CREATE TABLE for tabellene: CREATE TABLE LEGE( ansattnr CHAR(6) NOT NULL, legenavn VARCHAR(30), CONSTRAINT ansatt_pk PRIMARY KEY (ansattnr)); CREATE TABLE PASIENT( pasientnr CHAR(6) NOT NULL, fornavn VARCHAR(30), etternavn VARCHAR(30), gateadresse VARCHAR(50), postnr CHAR(4), telefon VARCHAR(15), CONSTRAINT pasient_pk PRIMARY KEY (pasientnr)); CREATE TABLE ROM_BEHANDLING( rom CHAR(6) NOT NULL, behandling VARCHAR(30), CONSTRAINT rom_pk PRIMARY KEY (rom)); CREATE TABLE LEGE_ROM( ansattnr CHAR(6) NOT NULL, dag CHAR(8) NOT NULL, rom CHAR(6) NOT NULL, CONSTRAINT legerom_pk PRIMARY KEY (ansattnr, dag), CONSTRAINT lege_fk FOREIGN KEY (ansattnr) REFERENCES LEGE(ansattnr));

SQL datadefinisjon og manipulering side 4 av 9 CREATE TABLE TIMEBESTILLING( ansattnr CHAR(6) NOT NULL, pasientnr CHAR(6) NOT NULL, dag CHAR(8) NOT NULL, tid CHAR(5) NOT NULL, CONSTRAINT timebe_pk PRIMARY KEY (ansattnr, pasientnr, dag, tid), CONSTRAINT lege_fk2 FOREIGN KEY (ansattnr,dag) REFERENCES LEGE_ROM(ansattnr,dag), CONSTRAINT pasient_fk2 FOREIGN KEY (pasientnr) REFERENCES PASIENT(pasientnr)); Merk deg! Tabellene er opprettet i den rekkefølgen de står oppført over. Dette for å unngå rot med fremmednøklene (kan ikke opprette fremmednøkler som refererer til en tabell som enda ikke finnes i databasen). Merk deg også at en CREATE TABLE er en engangsoperasjon har du først opprettet tabellen en gang er det ikke mulig å opprette den på nytt. Skal du endre på en tabell i ettertid, bruk ALTER TABLE (se læreboka). Valg av datatyper: Hvert attributt, også nøkler, må ha en datatype. Datatypen sier hvilke lovlige verdier attributter i tabellen kan ha, eller attributtets domene (verdiområde). Har i disse tabellene kun brukt tekst som datatyper. F.eks. behandling VARCHAR(30) betyr at attributtet behandling kan ha inntil 30 tegn, mens rom CHAR(6) betyr at attributtet rom må ha eksakt 6 tegn. Andre vanlige datatyper står nevnt i Tabell 4.2 i læreboka (i 2.utg. er det også kommentert noen ulikheter mellom MS Access, MySQL og Oracle vedr. hvilke datatyper de støtter per i dag (dette kan endres over tid etter hvert som nye versjoner av databasesystemene dukker opp)). Har ikke brukt noe datoformat for tid i dette eksemplet. NOT NULL betyr at attributtet alltid må ha en verdi for alle tuplene / postene i tabellen. Ellers legg merke til at et attributt kan både være en (eller en del av en sammensatt) primærog fremmednøkkel i samme tabell. Den store primærnøkkelen i TIMEBESTILLING er mest for eksempelets skyld (en så stor nøkkel er ikke videre pratisk i en større database). I MS Access vil en se sammenhengene mellom tabellene grafisk i vinduet relasjoner ( relationships i den engelske versjon brukt i figuren under)(figuren under viser en forenklet utgave av eksempeldatabasen):

SQL datadefinisjon og manipulering side 5 av 9

SQL datadefinisjon og manipulering side 6 av 9 1.3.2. Opprette tabeller i MySQL CREATE TABLE-setningene blir nesten tilsvarende i MySQL. Det er syntaksen for hvordan primær- og fremmednøkler skrives som er forskjellig fra MS Access. For å få definert fremmednøkler med referanseintegritet må en bruke type=innodb for nøkler. Innodbfunksjonalitet er automatisk med i nyere versjoner av MySQL 2 (eller du kan velge å ta den med ved installasjon av MySQL). Før var det også nødvendig å lage indekser på de attributtene som inngår i fremmednøkler dette gjøres ved setningen INDEX(ansattnr),, som enkelt oppretter en indeks på ansattnr. I nyere versjoner av MySQL skal ikke dette være nødvendig (men det er gjort i eksemplet for sikkerhets skyld). Ellers gjelder de samme kommentarene for rekkefølgen tabellene defineres. Har brukt DATE datatype for tid i dette eksemplet. Læreboka bruker ALTER TABLE-setninger for å definere fremmednøkler. Dette er et alternativ til å skrive FOREIGN KEY direkte i CREATE TABLE. Før en legger inn tabellene i MySQL kan en opprette databasen slik: create database timebestilling; use timebestilling; Deretter kan CREATE TABLE-setningene skrives fortløpende: CREATE TABLE LEGE( ansattnr CHAR(6) NOT NULL, legenavn VARCHAR(30), PRIMARY KEY (ansattnr))type=innodb; CREATE TABLE PASIENT( pasientnr CHAR(6) NOT NULL, fornavn VARCHAR(30), etternavn VARCHAR(30), gateadresse VARCHAR(50), postnr CHAR(4), telefon VARCHAR(15), PRIMARY KEY (pasientnr))type=innodb; CREATE TABLE ROM_BEHANDLING( rom CHAR(6) NOT NULL, behandling VARCHAR(30), rom_pk PRIMARY KEY (rom))type=innodb; 2 Leksjonen bruker MySQL 4.1. Eventuelle endringer i nyere versjoners bruk av innodb er ikke tatt med.

SQL datadefinisjon og manipulering side 7 av 9 CREATE TABLE LEGE_ROM( ansattnr CHAR(6) NOT NULL, dag DATE NOT NULL, rom CHAR(6) NOT NULL, PRIMARY KEY (ansattnr, dag), INDEX(ansattnr), INDEX(rom), FOREIGN KEY (ansattnr)references LEGE(ansattnr), FOREIGN KEY (rom)references ROM_BEHANDLING(rom))type=innodb; CREATE TABLE TIMEBESTILLING( ansattnr CHAR(6) NOT NULL, pasientnr CHAR(6) NOT NULL, dag DATE NOT NULL, tid CHAR(5) NOT NULL, PRIMARY KEY (ansattnr,pasientnr, dag, tid), INDEX(ansattnr,dag), INDEX(pasientnr), FOREIGN KEY (ansattnr,dag) REFERENCES LEGE_ROM(ansattnr,dag), FOREIGN KEY (pasientnr) REFERENCES PASIENT(pasientnr))type=innodb; For å være sikker på at opprettelsen av tabellene er lagret i databasen, kan en utføre COMMIT til slutt: commit; For å se en tabellstruktur i MySQL etter at tabellen er opprettet, kan du bruke en av følgende kommandoer (hvor 'tabellnavn' her er navnet på tabellen): show create table tabellnavn; show columns from tabellnavn; show full columns from tabellnavn; describe tabellnavn; 1.3.3. Bruk av CASCADE I MySQL er det også mulig å spesifisere hva som skal skje med referanser ved UPDATE og DELETE fra tabellen, ved å føye til ON DELETE CASCADE og/eller ON UPDATE

SQL datadefinisjon og manipulering side 8 av 9 CASCADE til slutt i FOREIGN KEY-setningen. Se noen korte kommentarer vedr. bruk av dette i læreboka kap. 4.2.1.2. 1.3.4. Endring av tabellstruktur Å endre en tabellstruktur etter at databasen er tatt i bruk er ikke alltid like enkelt. Kort så må ikke en strukturendring komme i konflikt med gjeldene referanseintegritet, dvs i praksis er det vanskelig å endre på nøkler. Å legge til og ta vekk ikke-nøkkel attributter bør gå. Dette gjøres ved å bruke ALTER TABLE med ADD COLUMN eller DROP COLUMN. Det samme å legge til primærnøkkel og nye fremmednøkler i en tabell (en ny fremmednøkkel vil ikke komme i konflikt med eksisterende nøkler i tabellen) - se eksempler på ALTER TABLE i læreboka. Et tips er at en venter med å opprette nøkler i en ny database til etter at en har testet ut databasen, men før databasen tas i bruk av vanlige sluttbrukere. En mulig oppskrift for å endre primærnøkkel etter at tabellen er tatt i bruk: 1. Slett alle fremmednøkler som refererer til den gamle primærnøkkelen. I Access kan dette gjøres i relasjons -vinduet ( relastionships i engelsk versjon) ved å slette relasjoner til tabellen hvor du skal endre primærnøkkel. 2. Endre primærnøkkelen 3. Opprett nye fremmednøkler som refererer til den nye primærnøkkelen. En alternativ fremgangsmåte er å opprette en ny tabell og flytte over data fra den gamle tabellen til den nye ved bruk av INSERT (se eksempel i læreboka s. 116 3 ), for så å slette den gamle tabellen med DROP TABLE. Men generelt bør en ikke endre på nøkler i en database som er i bruk. 1.4. INSERT MS Access lager automatisk referanseintegritet ved opprettelse av fremmednøkler. Derfor må en legge inn data i riktig rekkefølge (MS Access gir feilmelding om du prøver noe annet). I vårt eksempel betyr dette at en må legge inn data i LEGE, PASIENT og LEGE_ROM før en legger inn data i TIMEBESTILLING. D.v.s. legen, pasienten og rommet må eksistere i databasen før en kan legge inn en timebestilling. INSERT INTO LEGE VALUES ('L100','Ole Aas'); INSERT INTO PASIENT values('p100','gro','hansen','bakkegata 10','7021','TRONDHEIM','99999999'); INSERT INTO LEGE_ROM VALUES ('L100', '12.09.03','k10'); INSERT INTO TIMEBESTILLING VALUES ('L100','P100', '12.09.03','10:00'); 3 Side 108 i 1.utg.

SQL datadefinisjon og manipulering side 9 av 9 1.5. UPDATE UPDATE kan ha WHERE-uttrykk på samme måte som SELECT. Dette betyr også at en kan endre på flere tupler samtidig i en tabell. Eksempel: Endre rommet til lege L110 den 13.09.03 til rom k10 : UPDATE LEGE_ROM SET rom = 'k10' WHERE ansattnr='l110' AND dag='13.09.03'; 1.6. DELETE DELETE med WHERE-uttrykk betyr at en også kan slette flere tupler samtidig. Merk deg: 1) Du sletter alltid hele tuplet / posten med DELETE, ikke bare enkeltattributter. 2) Du kommer fort i konflikt med referanseintegritet ved sletting husk å slette i riktig rekkefølge. Eksempel: Slette legen L100 : Må først slette alle tuplene hvor ansattnr = L100 forekommer i tabellene LEGE_ROM og ROM_BEHANDLING (alternativt: sette en annen lege inn i stede for L100 ved å bruke UPDATE). DELETE FROM LEGE_ROM WHERE ansattnr= 'L100'; DELETE FROM TIMEBESTILLING WHERE ansattnr= 'L100'; Så til slutt slette selve legen: DELETE FROM LEGE WHERE ansattnr= 'L100';