Anne Randorff Højen arra@hst.aau.dk
Forelæsning og opgaver: Introduktion til SQL pause Forlæsning og Opgaver: SQL 2. del pause Introduktion til PhPMyAdmin Opgaver
SQL
Der modelleres ud fra reelle relationer og entiteter Det defineres i designet hvorledes databasen skal opføre sig ved opdatering og slet Her ud fra kan man så på et givet tidspunkt udsøge den relevante information fx: Hvilke afdelinger de enkelte læger er tilknyttet Hvilke faggrupper og roller der eksisterer på en afdeling Løn, operationsstatistik, ansvarsområder, ventetider, osv....og informationerne registreres kun ét sted, men kan bruges i flere sammenhænge
Anvende SQL til at indsætte og udtrække data Forstå hvornår det er en fordel at anvende SQL
Et forespørgselssprog Brugerens indgangsvinkel/grænseflade til databasen International standard: Databaser taler SQL To delsprog i SQL: Data Definition Language Data Manipulation Language: Forudsætter at databases logiske struktur er tilvejebragt, dvs: - at man har designet databasen ER-diagrammer og normalisering og at disse er dokumenteret - at man har konstrueret en database (fx i LibreOffice), hvis man ikke ønsker at benytte Data Definition Language, delen [http://www.w3schools.com/sql/]
Her bruges sql
Den basale måde hvormed vi kan kommunikere med en relationsdatabase Structured Query Language Nu en international standard, der bare hedder SQL ANSI / ISO SQL-92, SQL-99 og SQL-2003 Et deklarativt sprog Man beskriver hvad man vil have, ikke hvordan det skal findes!
Postnumre Postnr Bynavn Postnumre Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast
Data Definition Language (DDL) CREATE ALTER DROP (DESCRIBE (RENAME Opret tabel Ændre tabel Nedlæg tabel Beskriv tabel) Omdøb tabel) Postnumre Postnr Bynavn Vedrører tabelstrukturen - ikke de faktiske data i tabeller
Data Manipulation Language (DML) INSERT UPDATE DELETE SELECT (MERGE) (TRUNCATE) 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Vedrører de faktiske data i tabeller
DDL - datastruktur CREATE ALTER DROP DESCRIBE DML - data INSERT UPDATE DELETE SELECT Postnumre Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast
The SQL data-definition language (DDL) allows the specification of information about relations, including: The schema for each relation. The domain of values associated with each attribute. Integrity constraints Other information such as The set of indices to be maintained for each relations. Security and authorization information for each relation. The physical storage structure of each relation on disk.
char(n). Fixed length character string, with user-specified length n. varchar(n). Variable length character strings, with userspecified maximum length n. (https://dev.mysql.com/doc/refman/5.0/en/char.html) int. Integer (a finite subset of the integers that is machinedependent). smallint. Small integer (a machine-dependent subset of the integer domain type). numeric(p,d p,d). Fixed point number, with user-specified precision of p digits, with n digits to the right of decimal point. real, double precision. Floating point and double-precision floating point numbers, with machine-dependent precision. float(n). Floating point number, with user-specified precision of at least n digits.
An SQL relation is defined using the create table command: create table r (A 1 D 1, A 2 D 2,..., A n D n, (integrity-constraint 1 ),..., (integrity-constraint k )) r is the name of the relation each A i is an attribute name in the schema of relation r D i is the data type of values in the domain of attribute A i Example: create table physician( ID char(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2)) insert into physician values ( 10211, Smith, Emergency, 66000); insert into physician values ( 10211, null, Emergency, 66000);
not null primary key (A 1,..., A n ) foreign key (A m,..., A n ) references r Example: Declare ID as the primary key for instructor. create table physician( ID char(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2), primary key (ID), foreign key (dept_name) references department) primary key declaration on an attribute automatically ensures not null
Student Takes Course
create table student ( ID varchar(5), name varchar(20) not null, dept_name varchar(20), tot_cred numeric(3,0), primary key (ID), foreign key (dept_name) references department ); create table takes ( ID varchar(5), course_id varchar(8), semester varchar(6), year numeric(4,0), grade varchar(2), primary key (ID, course_id, semester, year), foreign key (ID) references student,
create table course ( course_id varchar(8) primary key, title varchar(50), dept_name varchar(20), credits numeric(2,0), foreign key (dept_name) references department ); Primary key declaration can be combined with attribute declaration as shown above
drop table student Deletes the table and its contents delete from student Deletes all contents of table, but retains table alter table alter table r add A D where A is the name of the attribute to be added to relation r and D is the domain of A. All tuples in the relation are assigned null as the value for the new attribute. alter table r drop A where A is the name of an attribute of relation r Dropping of attributes not supported by many databases
- Gå sammen to og to - Skriv på papir den nødvendige DDL for ERdiagrammet på næste slide - I har 15 min.
Forelæsning og opgaver: Introduktion til SQL pause Forlæsning og Opgaver: SQL 2. del pause Introduktion til PhPMyAdmin Opgaver
En typisk SQL query (forespørgsel) har følgende struktur: select A 1, A 2,..., A n from r 1, r 2,..., r m where P A i s representerer attributter r i s representerer relationer P er predikatet/betingelsen
Udtræk samtlige data fra en tabel: SELECT * FROM table_name Udtræk data fra bestemt kolonne i tabel: SELECT column_name(s) FROM table_name Eksempler: SELECT * FROM Postnumre SELECT Bynavn FROM Postnumre SELECT Postnr, Bynavn FROM Postnumre SELECT Postnr, Bynavn FROM Postnumre ORDER BY Bynavn Postnr Bynavn 9000 Aalborg 7430 9760 Ikast Vrå 4180 8000 Sorø Århus C 9760 4180 Vrå Sorø 8000 7430 Århus Ikast C
Medlemstabel Fornavn Efternavn Adresse Postnr By Tlf. Medlems -type Andrea Andersen Vestergade 7 1234 Udby 99123456 1 Birger Jensen Ryesgade 12 8000 Århus C 99456789 2 Bente Christensen Ryesgade 16 8000 Århus C 99456789 2 Camilla Troelsen Fjordvej 2 1234 Udby - 3 Carla Curie Østerallé 16 1234 Udby 99456123 1 Danny Dalum Vildbjergstræde 132 1234 Udby 98456357 2 Elna Jensen Fredensgade 34 8000 Århus C 86156864 2 Kontingent Medlems- Kontin- Medlems- type ID gent type 1 800 Elite 2 100 Passiv 3 400 Ungdom Viggo Højner Højner Alpeallé 1234 Udby 86453483 1 Helle Frederiksen Frederiksen Postvej 43 1234 Udby 86292979 2 Morten Mejlsing Mejlsing Havnegade 89 8000 Århus C 86282465 3 Haldur Nielsen Kirkegade 2 1234 Udby 31445625 1 Homer Hansen Hansen Banegårdspladsen 3 8000 Århus C 32458757 1 Hvordan vil jeres sql se ud hvis i vil trække følgende data ud: Fornavn og efternavn på alle medlemmer? Fornavn, efternavn og medlemstype på alle medlemmer, sorteret efter medlemstypen?
SELECT column_name(s) FROM table_name WHERE column_name operator value AND og OR Eksempler: SELECT * FROM Medlemtabel WHERE Efternavn = Jensen SELECT * FROM Medlemstabel WHERE Efternavn= Jensen AND Fornavn= Bente
Medlemstabel Fornavn Efternavn Adresse Postnr Tlf. Medlem s-type Vægt Andrea Andersen Vestergade 7 1234 9912345 6 1 59 Birger Jensen Ryesgade 12 8000 9945678 9 2 95 Bente Christensen Ryesgade 16 8000 9945678 9 2 56 Camilla Troelsen Fjordvej 2 1234-3 75 Carla Curie Østerallé 16 1234 Danny Dalum Vildbjergstræde 132 1234 Elna Jensen Fredensgade 34 8000 Viggo Højner Højner Alpeallé 1234 Helle Frederiksen Frederiksen Postvej 43 1234 Morten Mejlsing Mejlsing Havnegade 89 8000 Haldur Nielsen Kirkegade 2 1234 Homer Hansen Hansen Banegårdspladsen 3 8000 9945612 3 9845635 7 8615686 4 8645348 3 8629297 9 8628246 5 3144562 5 3245875 7 1 65 2 101 2 81 1 89 2 67 3 88 1 78 1 97 Kontingent Medlems- Kontin- type ID gent 1 800 Elite Medlems- type 2 100 Passiv 3 400 Ungdom Postnr-tabel Hvordan vil jeres sql se ud hvis I vil trække følgende data ud: Fornavn og efternavn på alle medlemmer der bor i Århus C? Alle informationer på medlemmer der vejer mere end 70 kg, sorteret efter fornavn? By Postnr Århus 8000 Udby 1234
Gennemsnit: SELECT AVG(column_name) FROM table_name Eksempel: SELECT AVG(Mål) FROM Spillere SELECT Navn FROM Spillere WHERE Mål>(SELECT AVG(Mål) FROM Spillere)
Mindste værdi: SELECT MIN(column_name) FROM table_name Største værdi: SELECT MAX(column_name) FROM table_name Tælle: SELECT COUNT(colum_name) From table_name
Indsætte data: INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...) INSERT INTO table_name VALUES (value1, value2, value3,...)
INSERT INTO Deltagere (DeltagerID, Fornavn, Efternavn, Nationalitet, Født) VALUES (2, "Justin", "Gatlin", "USA", 1982)
Eksempel fra tidligere: create table physician( ID char(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2)) Indsætte værdier/rækker: insert into physician values ( 10211, Smith, Emergency, 66000); insert into physician values ( 10211, null, Emergency, 66000);
Opdatere data: UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value Slette data: DELETE FROM table_name WHERE some_column=some_value
Medlemstabel Id Fornavn Efternavn Adresse Postnr Tlf 1 Andrea Andersen Vestergade 7 1234 991234 56 2 Birger Jensen Ryesgade 12 8000 994567 89 3 Bente Christensen Ryesgade 16 8000 994567 89 Medle ms-type Vægt 1 59 2 95 2 56 4 Camilla Troelsen Fjordvej 2 1234-3 75 5 Carla Curie Østerallé 16 1234 994561 23 6 Danny Dalum Vildbjergstræde 132 1234 984563 57 7 Elna Jensen Fredensgade 34 8000 861568 64 8 Viggo Højner Højner Alpeallé 1234 864534 83 9 Helle Frederiksen Frederiksen Postvej 43 1234 862929 79 10 Morten Mejlsing Mejlsing Havnegade 89 8000 862824 65 11 Haldur Nielsen Kirkegade 2 1234 314456 25 12 Homer Hansen Hansen Banegårdspladsen 3 8000 324587 57 1 65 2 101 2 81 1 89 2 67 3 88 1 78 1 97 Kontingent Medlems- Kontin- Medlems- type ID gent type 1 800 Elite 2 100 Passiv 3 400 Ungdom Postnr-tabel By Postnr Århus 8000 Udby 1234 Hvordan vil jeres sql se ud hvis I vil lave følgende ændringer: I vil ændre Haldurs telefonnummer til = 86552424 I vil slette Carla?
DISTINCT Eksempel: SELECT DISTINCT lastname FROM Spillere
LIKE: Anvendes til at søge på rækker der ligner et bestemt mønster Wildcard: Anvendes til at konstruere mønstre. % _ Eksempel: SELECT firstname, lastname FROM Player WHERE lastname LIKE M% SELECT firstname, lastname FROM Player WHERE lastname LIKE M_ller'
Hvordan vil I søge på efternavne der slutter på sen?
Forelæsning og opgaver: Introduktion til SQL pause Forlæsning og Opgaver: SQL 2. del pause Introduktion til PhPMyAdmin Opgaver
Se jeres mail fra Henrik Larsen med adgangsoplysninger
Implementér dette ER diagram ved brug af SQL-funktionen i PhPMyAdmin
Indsæt værdier i tabellerne ved brug af sql Foretag søgninger i tabellerne Diskutér hvilke søgninger i kan lave i de enkelte tabeller. Udvælg 5 forskellige søgninger og foretag disse. (dokumentér disse, fx vha. printscreen) Foretag opdateringer i tabellen ved brug af sql Udvælg 3 forskellige opdateringer og foretag disse. (dokumentér disse, fx vha. printscreen)