SQL nikos dimitrakas rum 6626

Slides:



Advertisements
Liknande presentationer
Butiksdata.
Advertisements

Talföljder formler och summor
Svenska WebDewey Introduktion
Databaser & databasdesign
Vad är en databas? “En databas är en delad samling logiskt relaterade data som designats för att möta informationsbehovet i en organisation eller för.
Kap 1 - Algebra och linjära modeller
Innehåll, huvudpresentation 4. Rangordning av ordningsstörningar (fråga 1) 5. Problem med nedskräpning (fråga 1a) 6. Problem med skadegörelse (fråga 1b)
Relationsdatabasdesign
Access med Sebastian och Robert
Joomla © 2009 Stefan Andersson 1. Kontaktformulär  På varje seriös webbplats bör det finnas ett kontaktformulär.  Använd ej maillänkar, risk för spam!
XML och frågespråk nikos dimitrakas Rum 6626
hej och välkomna EKVATIONER Ta reda på det okända talet.
BENÄMNA lätta ord SPRÅKTRÄNING VID AFASIKg VIII
Klasser och objekt.
DATABASHANTERING för programmerare
Från verksamhet till databas
Tillämpning av bolagsstyrningskoden vid årsstämmor 2005 och 2006.
Hela Sverige ska leva Totalrapport. Regeringens bidrag har medverkat till kunskapsförmedling?
Projektföljeforskning
Eddie Arnold - Make The World Go Away Images colorées de par le monde Déroulement automatique ou manuel à votre choix 1 för dig.
Andreas Carlsson Barvefjord och Carlsson Datakraft AB Svarkråkev Värnamo Tel: Epost: Databasteknik 2.
Svenska WebDewey Introduktion
SAMHÄLLSKUNSKAP B Henrik Larsson
Karolinska Institutet, studentundersökning Studentundersökning på Karolinska Institutet HT 2013.
Kommunpussel Din uppgift är att sortera de organisatoriska delar på nästa sida på ett sådant sätt att det överensstämmer med hur din kommun är organiserad.
Punktprevalensmätning av trycksår 2011, v.40 Resultat från landstingen
Bastugatan 2. Box S Stockholm. Blad 1 Läsarundersökning Maskinentreprenören 2007.
INFÖR NATIONELLA PROVET
Svenska WebDewey Introduktion Harriet Aagaard Svenska Deweyredaktion
Enkätresultat för Grundskolan Elever 2014 Skola:Hällby skola.
Avgiftsstudie Nils Holgersson år 2007 Bild 1 Baserat på rapportversion
KURSUTVECKLING TILLVÄXTFONDER –
Finländarnas uppfattningar om äldrevården Kirsi Markkanen Utvecklingschef Tehy rf.
1 Vänsterskolan Debattartiklar. 2 Aktuell krok 3 Aktuella krokar 1. Direkt krok.
Hittarps IK Kartläggningspresentation år 3.
Från Gotland på kvällen (tågtider enligt 2007) 18:28 19:03 19:41 19:32 20:32 20:53 21:19 18:30 20:32 19:06 19:54 19:58 20:22 19:01 21:40 20:44 23:37 20:11.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
DATABASHANTERING för programmerare Lektion 3 Mahmud Al Hakim
Databashanteringssystem
TÄNK PÅ ETT HELTAL MELLAN 1-50
Greppa Näringen Medlemsundersökning, kvartal 1. 1.
DATABASHANTERING för programmerare Lektion 4 Mahmud Al Hakim
Helhet Händelse Agerande Kunskap om vardagsverksamheten Förståelse av vardagsverksamheten.
Frågespråk och SQL nikos dimitrakas rum 6626
Kouzlo starých časů… Letadla Pár foteček pro vzpomínku na dávné doby, tak hezké snění… M.K. 1 I Norrköping får man inte.
Best pictures on the internet 2007 Awards 1http:// Är vänsteralliansen trovärdig i Norrköping.
Databashantering Do it Max-style!. SELECT SELECT vad FROM tabellnamn Exempel: ◦ SELECT * FROM stralin_max  * = Välj allt som finns i tabellen ◦ SELECT.
FRÅGEUTVECKLING INOM MSSQL Marcus Medina. Dagens visdomsord ” Det är inte vad som händer dig som räknas – utan hur du reagerar på det. ” - Epiktetos.
Best pictures on the internet 2007 Awards 1http:// (s), (v), och (mp) i Norrköping, gillar inte att vi använder grundlagarna.
Flexicon – Din systempartner
2 Agenda 1. Börja arbeta med Excel Hantera arbetsböcker 3. Formler 4. Formatera 5. Diagram 6. Skriva ut 7. Referenser mellan kalkylblad 8. Arbeta.
UTVECKLING MED RAMVERKET.NET Marcus Medina. Dagens visdomsord “Det verkar alltid omöjligt tills dess att det är gjort” Nelson Mandela.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Enkätresultat för Grundskolan Föräldrar 2014 Skola - Gillberga skola.
Regional handlingsplan ”Det goda livet för sjuka äldre” RESULTAT i VG+Skaraborg.
OpCon/xps - A case study. Club2200Page 1 OpCon/xps – A case study Club2200 Magnus Nyman & Hans Forslind.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
Förskoleenkät Föräldrar 2012 Förskoleenkät – Föräldrar Enhet:Hattmakarns förskola.
DATABASHANTERING för programmerare Lektion 6 Mahmud Al Hakim
DATABASHANTERING för programmerare Lektion 5 Mahmud Al Hakim
Bild 1 Prognos för länets arbetsmarknad Stefan Tjb.
Grundskola Elever 2013 Grundskoleenkät - Elever Enhet: Gillberga skola.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Diskret stokasticitet Projekt 2.3, Talltita
DA7351 Programmering 1 Databas SQL Föreläsning 24.
Databaser, avancerade frågor
SQL Structured Query Language Frågespråk för att används för Kommandon
SQL Structured Query Language Frågespråk för att används för Kommandon
Presentationens avskrift:

SQL nikos dimitrakas nikos@dsv.su.se 08-162099 rum 6626 Connolly/Begg (3rd & 4th edition) kapitel 5, 6 (och lite överallt)

SQL Structured Query Language olika förslag till databasspråk för relations-DBMS har förekommit, QUEL, SQL SQL fick tidigt dominerande ställning, IBM internationella standarden för data sub-language för relations-DBMS kallas SQL, togs 1986. 1992 publicerade ISO en standard som kallas SQL2 (eller SQL92) standarden överensstämmer till stora delar med aktuella SQL-dialekter för de vanligaste DBMS 1999 publicerade ISO en ny version av standarden, SQL1999 (eller SQL3). Denna standard innehåller en del objektorienterade funktionalitet. 2003 kom den senaste versionen kallad SQL2003.

Uppdelning av SQL databeskrivning, SQL-DDL (Data Definition Language) databearbetning, SQL-DML (Data Manipulation Language) • behörighet, SQL-DCL (Data Control Language) SQL kan uttrycka allt som går att uttrycka i relationsalgebran - språket är "relationally complete"

SQL - DDL CREATE TABLE, skapa tabell ALTER TABLE, ändra tabell DROP TABLE, ta bort tabell CREATE INDEX, skapa index DROP INDEX, ta bort index CREATE VIEW, skapa vy DROP VIEW, ta bort vy CREATE SCHEMA CREATE DATABASE (även CATALOG) CREATE TRIGGER DROP TRIGGER CREATE PROCEDURE DROP PROCEDURE

SQL-DML INSERT, lägg till UPDATE, ändra DELETE, ta bort COMMIT, spara ROLLBACK, återställ SELECT, utsökning

SQL-DCL CREATE USER, skapa användare DROP USER, ta bort användare CREATE SCHEMA DROP USER, ta bort användare DROP SCHEMA GRANT, ge behörighet REVOKE, ta bort behörighet

Exempel DDL, DML Skapa en databas Fylla på med data från konceptuell modell till färdiga tabeller Fylla på med data mata in data ändra data ta bort data Ställa frågor mot databasen enkla frågor aggregerade frågor

Konceptuell modell  Logisk modell  Relationsdatabas

Konceptuell modell  Logisk modell  Relationsdatabas CREATE TABLE Hund ( id NUMBER PRIMARY KEY, namn STRING NOT NULL UNIQUE, ras STRING, ägare STRING NOT NULL) DDL

Konceptuell modell  Logisk modell  Relationsdatabas CREATE TABLE Katt ( kid NUMBER PRIMARY KEY, färg STRING) DDL

Konceptuell modell  Logisk modell  Relationsdatabas CREATE TABLE Jakt ( hundid NUMBER, katt NUMBER, PRIMARY KEY (hundid, katt), FOREIGN KEY (hundid) REFERENCES Hund (id) ON DELETE CASCADE ON UPDATE CASCADE) DDL

Konceptuell modell  Logisk modell  Relationsdatabas ALTER TABLE Jakt ADD FOREIGN KEY (katt) REFERENCES Katt ON DELETE RESTRICT ON UPDATE CASCADE DDL

DROP TABLE DDL Tar bort en tabell Ta bort tabellen Bil! DROP TABLE Bil Ta bort tabellen Bil och alla referenser! Tar bort tabellen bil samt andra databasobjekt som beror på tabellen bil. DROP TABLE Bil CASCADE DDL

Datatyper i SQL INTEGER SMALLINT CLOB NUMBER (Character Large OBject) DECIMAL(p[,q]) FLOAT BOOLEAN CHAR(n) VARCHAR(n) STRING(n) TEXT DATE TIME TIMESTAMP MONEY CLOB (Character Large OBject) BLOB (Binary Large OBject) XML

INSERT DML Används för att lägga till rader i en existerande tabell Det finns två sätt med specificerade värden via SELECT Man kan ange ett värde för varje kolumn i den förbestämda ordningen Man kan ange värden endast för vissa kolumner i valfri ordning Man kan lägga till en eller flera rader med ett kommando

INSERT med specificerade värden DML Lägg till en rad i tabellen Hund med värden 125, ”Woolfy”, ”Coley”, ”Johan” INSERT INTO Hund VALUES (125, ’Woolfy’, ’coley’, ’Johan’); INSERT INTO Hund (ras, id, namn, ägare) VALUES (’coley’, 125, ’Woolfy’,’Johan’); Lägg till en rad i tabellen Hund med värden 3342, ”Jumpy”, ”Lisa”. Alltså ingen ras! INSERT INTO Hund VALUES (3342, ’Jumpy’, NULL, ’Lisa’); INSERT INTO Hund (namn, id, ägare) VALUES (’Jumpy’, 3342, ’Lisa’);

INSERT med specificerade värden Lägg till flera rader med en gång (fungerar inte med alla databashanterare, men ingår i standarden): INSERT INTO Hund VALUES (1233, ’Scrapy’, NULL, ’Lisa’), (1555, ’Lucky’, ’Tax’, ’Nils’), (2334, ’Ruddy’, ’Foxhound’, ’Lisa’); DML

INSERT via SELECT DML Antag att vi har en tabell temp(hund, antaljakter) där vi vill lägga in hund-id och totalt antal jagade katter. Vi kan då räkna fram innehållet till tabellen temp med en SELECT-sats. Vi skall se hur man skriver sådana satser snart! SELECT-satsens resultat blir nya rader i tabellen temp. INSERT INTO temp(hund, antaljakter) SELECT-sats

INSERT och främmande nycklar Lägger man in ett värde i en kolumn som är främmande nyckel måste detta värde finnas i den relaterade tabellen. Annars misslyckas inmatningen. Lägg till en rad i tabellen Jakt med värden 125 och 122: Fungerar förutsatt att det finns en rad i tabellen Hund med id = 125 och en rad i tabellen Katt med kid = 122. INSERT INTO Jakt (hundid, katt) VALUES (125, 122); DML

UPDATE DML Ändrar innehållet i ett eller flera attribut på noll eller flera rader Ändra färgen för alla vita katter till brunt! UPDATE Katt SET färg = ’brunt’ WHERE färg = ’vitt’;

DELETE DML Används för att ta bort en eller flera rader i en tabell Ta bort alla hundar som ägs av Johan DELETE FROM Hund WHERE ägare = ’Johan’; Ta bort alla gråa katter DELETE FROM Katt WHERE färg = ’grått’; Vad händer med främmande nycklarna?

Exempeldata Katt Jakt Hund kid färg 122 grått 111 svart 106 vitt 33 43 45 42 55 99 brunt 100 hundid katt 130 122 106 42 135 431 33 45 111 1555 2343 2345 3342 Exempeldata Hund id namn ras ägare 130 Barky Terrier Johan 135 Woolfy Coley 431 Beasty Tax Maria 1233 Scrapy Lisa 1555 Lucky Nils 2334 Ruddy Foxhound 2343 Grumpy Golden Retriever 2345 Slicky Peter 3342 Jumpy

SELECT … FROM … WHERE … DML Väljer ut data från en eller flera tabeller när alla villkor blir uppfyllda. Ta fram namn och ras för alla hundar som ägs av Johan! Går igenom tabellen rad för rad och tar med i resultatet de rader som uppfyller villkoret. SELECT namn, ras FROM Hund WHERE ägare = ’Johan’; DML

SELECT vs Relationsalgebra Ta fram namn och ras för alla hundar som ägs av Johan! Π namn, ras σ ägare = ’Johan’ Hund SELECT namn, ras FROM Hund WHERE ägare = ’Johan’; projektion selektion

WHERE-klausulen Kan innehålla: jämförelseoperatorerna =, <>, >, >=, <, <= logiska operatorerna t ex AND, OR och NOT parenteser för att styra utvärderingen BETWEEN för att testa intervall LIKE för att matcha mönster % _ (eller * ?) IN och EXISTS för att hantera mängder SELECT * FROM Hund WHERE (ras = ’Terrier’ OR ras = ’Coley’) AND ägare <> ’Johan’ AND namn LIKE ’B%’

ORDER BY klausulen Används för att sortera resultatet i stigande ordning: ASC (default) i fallande ordning: DESC SELECT ras, namn FROM Hund WHERE ägare <> ’Johan’ ORDER BY ras DESC, namn ASC

SELECT DISTINCT Används för att ta bort dubbletter från resultatet Ta fram alla hundraser i stigande ordning! SELECT DISTINCT ras FROM Hund ORDER BY ras

NULL Hur skall NULL tolkas? Visa alla vita katter! SELECT kid FROM Katt WHERE färg = ’vitt’; Visa alla icke-vita katter! SELECT kid FROM Katt WHERE färg <> ’vitt’;

SELECT från flera tabeller Ta fram namn för de personer som äger en hund som jagar en katt! Π ägare σ hundid = id (Hund x Jakt) Π ägare (Hund θ hundid = id Jakt) SELECT ägare FROM Hund, Jakt WHERE hundid=id projektion join-villkor selektion SELECT Hund.ägare FROM Hund, Jakt WHERE Jakt.hundid = Hund.id

Alias Använd ett alias istället för tabellnamnet för att undvika skriva långa tabellnamn om och om igen skilja mellan olika instanser av samma tabell Vilka två hundar har samma ägare? SELECT h1.namn, h2.namn FROM Hund AS h1, Hund h2 WHERE h1.ägare = h2.ägare AND h1.id > h2.id

Ett till exempel Vilka två hundar jagar samma katt? SELECT DISTINCT h1.namn, h2.namn FROM Hund h1, Hund h2, Jakt j1, Jakt j2 WHERE h1.id = j1.hundid AND h2.id = j2.hundid AND j1.katt = j2.katt AND h1.id > h2.id

IN och EXISTS Används för att jobba med mängder (oftast genererade med nästlade SELECT-satser) Vilka hundar jagar en katt med id 122? SELECT namn FROM Hund WHERE id IN (SELECT hundid FROM Jakt WHERE katt=122)

IN och EXISTS Vilka hundar jagar en katt med id 122? SELECT namn FROM Hund WHERE EXISTS (SELECT hundid FROM Jakt WHERE katt=122 AND hundid=id)

Ett till exempel Vilka två hundar jagar samma katt? SELECT h1.namn, h2.namn FROM Hund h1, Hund h2 WHERE h1.id > h2.id AND h1.id IN (SELECT hundid FROM Jakt WHERE katt IN (SELECT katt WHERE hundid=h2.id))

Division i SQL VitKatt(katt)  Π kid σ färg = ’vitt’ Katt Vilka hundar jagar alla vita katter? (Division) VitKatt(katt)  Π kid σ färg = ’vitt’ Katt Π namn (Hund θ id = hundid (Jakt ÷ VitKatt)) SELECT namn FROM Hund WHERE NOT EXISTS (SELECT * FROM katt WHERE färg = ’vitt’ AND KID NOT IN (SELECT katt FROM Jakt WHERE hundid=id))

Division i SQL Vad har man i de tre nivåerna? Nivå 1 – Det som vi vill ha i resultatet. Inget annat. Nivå 2 – Det som utgör alla. Har ingen direkt koppling till nivå 1. Nivå 3 – Det som kombinerar det vi letar efter (som finns i nivå 1) och det som utgör alla (som finns i nivå 2).

Andra mängdoperationer UNION EXCEPT (MINUS) INTERSECT(ION) Kom ihåg Union-kompatibilitet!

UNION exempel Vilka hundar jagar antingen katt 122 eller katt 42? SELECT namn FROM Hund, Jakt WHERE id = hundid AND katt = 122 UNION SELECT namn FROM Hund, Jakt WHERE id = hundid AND katt = 42

INTERSECT exempel Vilka hundar jagar både katt 122 och katt 42? SELECT namn FROM Hund, Jakt WHERE id = hundid AND katt = 122 INTERSECT SELECT namn FROM Hund, Jakt WHERE id = hundid AND katt = 42

EXCEPT exempel Vilka hundar jagar inga katter? SELECT namn FROM Hund SELECT namn FROM Hund, Jakt WHERE id = hundid SELECT namn FROM Hund WHERE id NOT IN (SELECT hundid FROM Jakt)

Aggregatfunktioner COUNT(*) räknar antalet rader i en tabell COUNT(att) räknar antalet värden i en kolumn MAX(att) ger det största värdet i en kolumn MIN(att) ger det minsta värdet i en kolumn Bara aritmetiska kolumner: SUM(att) summerar värdena i en kolumn AVG(att) tar genomsnittet av värdena i en kolumn VARIANCE(att) räknar ”variationen” av värdena i en kolumn STDEV(att) räknar standard avvikelse av värdena i en kolumn

Exempel på funktioner Hur många jakter finns det i databasen? SELECT COUNT(*) FROM Jakt Hur många katter jagas? SELECT COUNT(DISTINCT katt) FROM Jakt

Nya kolumnnamn Skapar man kolumner med aggregatfunktioner, har de ursprungligen inget namn. Hur många katter jagas av hund 130 eller hund 431? SELECT COUNT(DISTINCT katt) AS kattantal FROM Jakt WHERE hundid = 130 OR hundid = 431 Notera att COUNT(DISTINCT) inte stöds i Access.

GROUP BY Grupperar rader på angivna kolumner. Rader grupperas i mindre grupper så att inom varje grupp alla rader har samma värden på de angivna kolumner. Kombineras oftast med aggregatfunktionerna. Räkna antal katter av varje färg! SELECT färg, COUNT(kid) AS antal FROM Katt GROUP BY färg; Alla icke aggregerade kolumner som förekommer i SELECT klausulen måste finnas med i GROUP BY klausulen!

GROUP BY Exempel Hur många katter jagas av varje hund? SELECT namn, COUNT(katt) AS antal FROM Jakt, Hund WHERE hundid=id GROUP BY hundid, namn ORDER BY antal DESC, namn ASC

HAVING Används för att sätta villkor på resultatet av aggregatfunktioner (villkor på grupper) Vilka katter jagas av minst 3 hundar? SELECT katt FROM Jakt GROUP BY katt HAVING COUNT(hundid) > 2

HAVING Exempel Hur många katter av varje färg jagar varje hund? Visa bara hundar som jagar minst 3 katter! SELECT namn, färg, COUNT(kid) as antal FROM Jakt, Hund, Katt WHERE hundid=id AND katt=kid AND hundid IN (SELECT hundid FROM Jakt GROUP BY hundid HAVING COUNT(katt)>2) GROUP BY namn, färg

Nästlade SELECT-satser Det är också möjligt att nästla satser i FROM-klausulen Ta fram alla personer som äger endast 1 hund! (utan att använda HAVING, EXISTS eller IN) SELECT ägare FROM (SELECT ägare, COUNT(id) AS antal FROM Hund GROUP BY ägare) AS nytabell WHERE antal = 1

Utan COUNT(DISTINCT) COUNT(DISTINCT) utan COUNT(DISTINCT): Hur många katter jagas av hund 130 eller hund 431? SELECT COUNT(katt) AS kattantal FROM (SELECT DISTINCT katt FROM Jakt WHERE hundid = 130 OR hundid = 431)

Ett till exempel på nästlade satser Ta fram den eller de personer som äger de flesta hundar! SELECT ägare FROM Hund GROUP BY ägare HAVING COUNT(id) = (SELECT MAX(antal) FROM (SELECT ägare, COUNT(id) AS antal GROUP BY ägare) AS nytabell)

Mera nästlade SELECT satser Det är också möjligt att nästla satser i SELECT-klausulen under förutsättningen att de endast producerar en rad och en kolumn. Ta fram alla hundar och antalet katter de jagar! Ta med samtliga hundar! SELECT namn, (SELECT COUNT(*) FROM Jakt WHERE hundid = id) AS antal FROM Hund Här blir hela den nästlade satsen ett värde i varje rad i resultatet.

Aritmetiska uttryck +, -, *, / kan användas direkt i SELECT-satser Om varje hund kostar 500 kronor per månad, vad är då kostnaden för varje hundägare? SELECT ägare, COUNT(id)*500 AS hundkostnad FROM Hund GROUP BY ägare

JOIN -operationer INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN Tar med alla kombinationer av rader från båda tabellerna då villkoret stämmer LEFT OUTER JOIN Tar med alla rader från tabellen till vänster och de rader från tabellen till höger som uppfyller villkoret RIGHT OUTER JOIN Tar med alla rader från tabellen till höger och de rader från tabellen till vänster som uppfyller villkoret FULL OUTER JOIN Tar med alla rader från båda tabeller CROSS JOIN UNION JOIN

INNER JOIN Visa alla hundar som jagar katter! SELECT namn FROM Hund INNER JOIN Jakt ON (id=hundid) Om tabellerna skall joinas på kolumner med samma namn kan man skriva istället: SELECT namn FROM Hund INNER JOIN Jakt USING kolumnnamn

OUTER JOIN Visa alla katter och vilka hundar som jagar dem! SELECT kid, hundid FROM Katt LEFT OUTER JOIN Jakt ON (kid=katt) Visa alla katter och alla hundar och alla jaktförhållanden! SELECT kid, hundid FROM Katt LEFT OUTER JOIN Jakt ON (kid=katt) FULL OUTER JOIN Hund ON (hundid=id)

SELECT-satsens format SELECT [DISTINCT] <attributlista> FROM <tabellista> [WHERE <villkorsuttryck>] [GROUP BY <kolumnlista> [HAVING <villkorsuttryck>]] [ORDER BY <kolumnlista>];

VIEWS En vy (view) är en virtuell tabell som finns för användarna, men skapas med data från andra tabeller Skapa en vy med alla hundägare och antalet hundar de äger! CREATE VIEW hundägande AS SELECT ägare, COUNT(id) AS antal FROM Hund GROUP BY ägare

Fördelar med VIEWS samma data kan betraktas av olika användare på olika sätt (på samma gång) användaren kan få en förenklad bild av databasen - mindre komplex DML flexibel behörighetskontroll optimering (materialized views) återanvändning

INDEX Ett index skapas för att snabbt kunna komma åt data med SELECT satser, genom att : begränsa kolumner optimera inför JOIN optimera inför selektion optimera inför sortering/gruppering Skapa ett index på kattfärgerna! CREATE INDEX kattfärg ON Katt(färg, kid) Skapa ett index på hundägarna och ras! CREATE INDEX hundägare ON Hund(ägare, ras)

VIEWS & INDEX Tänk på att dessa tar plats och kräver tid för att hålla uppdaterade! Skapa endast de som verkligen behövs!

SQL Validator Ni kan kontrollera om era SQL-satser följer standarden här: http://developer.mimer.com/validator/