SQL VOOR BIOLOGEN © 2011 M.L. Hekkelman CMBI Radboud UMC
Wat is SQL SQL = Structured Query Language Bedacht in de jaren ’70 bij IBM als tool voor managers Gebruikt in RDBMS RDBMS = Relational Data Base Management System
Data opslag X_aa01,C. Elegans,13.5 X_aa02,C. Elegans,12.4 X_aa03,S. Cerevisiae,113.9 X_aa04,S. Cerevisiae,93.6 …
Data opslag MetingOrganismeResultaat X_aa01C. Elegans13,5 X_aa02C. Elegans12,4 X_aa03S. Cerevisiae113,9 X_aa04S. Cerevisiae93,6
Data opslag Tabel Experiment MetingTekst OrganismeTekst ResultaatGetal
Data opslag MetingOrganismeResultaat X_aa01C. Elegans13,5 X_aa02C. Elegans12,4 X_aa03S. Cerevisiae113,9 X_aa04S. Cerevisiae93,6 Redunante data!
Data opslag MetingOrganisme_nrResultaat X_aa01113,5 X_aa02112,4 X_aa032113,9 X_aa04293,6 NrNaam 1C. Elegans 2S. Cerevisiae Tabel Experiment Tabel Organisme
Data opslag Tabel Experiment MetingTekst Organisme_nrGetal ResultaatGetal Tabel Organisme NrGetal NaamTekst
Data opslag Tabel Experiment MetingTekst Organisme_nrGetal ResultaatGetal Tabel Organisme NrGetal NaamTekst Meting is de unieke sleutel voor tabel Experiment Nr is de unieke sleutel voor tabel Organisme Meting en Nr noemen we Primary Keys Organisme_nr is een Foreign Key
SQL – De taal SQL definitie bestaat uit drie onderdelen: Data Definition Language (DDL) tabellen definiëren Data Manipulation Language (DML) data toevoegen aan tabellen Data Control Language (DCL) transacties
SQL – Data Definition Language CREATE TABLE Organisme ( nrINTEGER PRIMARY KEY, naamVARCHAR ); CREATE TABLE Experiment ( metingVARCHAR PRIMARY KEY, organisme_nrINTEGER REFERENCES Organism(nr), resultaatNUMERIC(4,1) );
SQL – Data Manipulation Language INSERT INTO Organism (nr, naam) VALUES ( 1, 'C. Elegans', 2, 'S. Cereviciae' ); SELECT naam FROM Organism WHERE nr = 1; DELETE FROM Organism WHERE nr = 1;
Ontsluiten van de data Data in een relationele databank kan gebruikt worden in andere programma’s. TaalMethode PerlDBD/DBI JavaJDBC, Hibernate PythonDB-API Diverse Windows applicatiesODBC
Perl DBI #!/usr/bin/perl use DBI; my $dbh = DBI->connect("DBI:Pg:dbname=mydb", "joe", "secret", {'RaiseError' => 1}); my $sth = $dbh->prepare("SELECT nr, naam FROM Organisme"); $sth->execute(); while(my $ref = $sth->fetchrow_hashref()) { print "$ref->{'nr'} is een $ref->{'naam'}\n"; } $dbh->disconnect();
Alternatieven voor SQL Excel sheets Makkelijk en bekend Riskant door automatische data interpretatie (datum) Beperkte hoeveelheid data Kaartenbak programma’s als FileMaker Makkelijk in gebruik voor niet programmeurs Niet geschikt voor grote hoeveelheden data Niet echt bruikbaar vanuit een script Full Text indexeringssoftware als MRS (en Lucene?) Snel voor zeer grote datasets Niet relationeel Geen echte datatypes, vooral gericht op tekst
Referenties PostgreSQL Tutorial: Perl DBI: