Sie sind auf Seite 1von 44

Lundi de la SGQA 22 oct.

2007

Introduction au langage SQL


et procdure SQL de SAS
Eric.Venot@jouy.inra.fr
Herve.Lagant@jouy.inra.fr

Introduction au langageA LSQL

SGQA et procdure ASQL


G R I Cde
IMENTATION
U L TSAS
Eric Venot & Herv Lagant
URE
ENVIRONNEMENT
Prambule (1)
SQL : Structured Query Language
- Cr par IBM en 1970
- Conforme la norme ANSI et ISO dans les 80s
- Pour communiquer avec les SGBDR
(Systme de Gestion des Bases de Donnes Relationnelles) :
dfinir, manipuler et interroger des tables et des vues d'une base
de donnes
efficace
facile apprendre et utiliser
complet sur le plan fonctionnel (dfinit, extrait et manipule les
donnes dans les tables)
adopt par tous (?) les SGBDR (Oracle, DB2, Microsoft Access,
MySQL, PostgreSQL, )

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Prambule (2)
Instructions SQL
SELECT Extraction de donnes de la base
INSERT
Langage de manipulation des donnes (LMD) : entrer une
UPDATE
nouvelle ligne, modifier des lignes existantes, supprimer des
DELETE
lignes dans la base de donnes
MERGE
CREATE
ALTER Langage de dfinition de donnes (LDD) : dfinir, modifier
DROP et supprimer des structures de donnes dans les tables
RENAME
TRUNCATE
COMMIT Contrle des transactions : gre les modifications
ROLLBACK apportes par les instructions LMD
SAVEPOINT
GRANT Langage de contrle de donnes (LCD) : gre les droit
REVOKE daccs la base et aux structure quelle contient

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Prambule (3)
Microsoft Access -> Requtes
Les SGBDR :
Oracle -> SQL*Plus

DB2 -> QMS


Allez voir sur DGA1

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Prambule (4)
La terminologie :

SAS Datastep SQL (SGBDR)


Dataset Table
Variable Colonne

Observation Ligne
Merge Jointure

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Linstruction SELECT

SELECT * | { [DISTINCT] colonne |expression [AS alias], }


FROM table1 [AS alias]
{[LEFT|RIGHT] [INNER|OUTER] JOIN table2
[ON colonne1=colonne2]}
WHERE expression
ORDER BY {colonne, expression} [ASC |DESC]
GROUP BY colonne1 [, colonne2, ]
HAVING expression
;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Exemple de donnes
Fichier de performances PERF
Pedigree PED
anim d_pesee poids
1 01/01/2000 20
NUNATI SEXE NUPERE NUMERE
1 01/02/2000 65
FR1 F A D
1 01/03/2000 110
FR2 F A E
2 01/01/2000 25
FR3 M B F
2 01/02/2000 85
FR4 F B G
3 01/01/2000 30
FR6 F C I
3 01/02/2000 45

4 01/01/2000 40

4 01/02/2000 58

4 01/03/2000 76

5 01/01/2000 50

5 01/02/2000 71

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Comment voir le contenu de la table PERF ?
PROC SQL;
SELECT *
FROM PERF;
QUIT;

Comment voir le numro et le poids des animaux ?


PROC SQL;
SELECT anim, poids
FROM PERF;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Comment afficher la liste des animaux pess ?
PROC SQL;
SELECT DISTINCT anim
FROM PERF;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Les tris :

Comment trier les animaux par ordre croissant et


leurs peses par ordre dcroissant ?
PROC SQL;
SELECT *
FROM PERF
ORDER BY anim, poids DESC ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Les oprateurs :
* / + -

Les chanes de caractres littrales :


= chane de caractre ou nombre ou date inclus dans une liste SELECT
placs entre apostrophes
la chane dfinie apparat sur chaque ligne renvoye
SELECT anim || pse || put(poids,5.1)
FROM

FR1234567890 pse 123.0


FR2345678901 pse 234.5

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Les alias ( AS ) :
renommer les colonnes
utiliser un nom alternatif aux tables

Les attributs :
FORMAT=
INFORMAT=
LABEL=
LENGTH=

SELECT p.anim, d_pesee, p.poids FORMAT=6.2,


(p.d_peseep.d_nais) AS age_pesee LABEL="Age la pese"
FROM perf AS p ;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Les conditions de comparaison :
= (eg) gal
> (gt) Suprieur
>= (ge) Suprieur ou gal
< (lt) Infrieur
<= (le) Infrieur ou gal
<> (ne) Diffrent de
BETWEEN AND Compris entre et (bornes comprises)
IN (,) Correspond une valeur de la liste
LIKE Ressemblance partielle de chane de caractre
IS MISSING Correspond une valeur manquante *
IS NULL Correspond une valeur NULL *
* dans SAS, proc SQL traite les valeurs manquantes comme les "blancs" ou les "0",
et les considre comme des valeurs NULL

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Les conditions logiques :
AND Renvoie TRUE si les 2 conditions sont vraies

OR Renvoie TRUE si lune des conditions est vraie

NOT Renvoie TRUE si la condition qui suit loprateur est fausse

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Comment slectionner les peses suprieures 100 kg
de lanimal "1" ?
PROC SQL;
SELECT *
FROM perf
WHERE anim=1 AND poids>100 ;
QUIT;

Comment slectionner les animaux dont le numro


commence par FR ?
PROC SQL;
SELECT *
FROM ped
WHERE nunati LIKE FR% ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Comment slectionner les peses de tous les animaux
sauf 1 et 2 ?
PROC SQL;
SELECT *
FROM PERF
WHERE anim NOT IN (1,2) ;
QUIT;

Comment slectionner les peses des animaux


dont le poids est compris entre 100 et 200 kg ?
PROC SQL;
SELECT *
FROM PERF
WHERE poids BETWEEN 100 AND 200 ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Les fonctions SQL monolignes :
Toutes les fonctions de SAS ! (sauf lag)

Gnrales Numriques Alpha-numriques Date

CASE ROUND LOWER / UPPER YEAR


TRUNC SUBSTR MONTH
MOD CONCAT
TRIM
REPLACE
LPAD / RPAD
INSTR

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Comment slectionner les peses, arrondies au kg,
effectues au mois de juin et juillet ?
PROC SQL;
SELECT anim, d_pesee, MONTH(d_pesee) AS mois,
ROUND(poids, 1) AS poids
FROM PERF
WHERE MONTH(d_pesee) IN (6, 7) ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le SELECT pas pas
Le cas CASE :
CASE WHEN expr_comp_1 THEN expr_retourne_1
[WHEN expr_comp_2 THEN expr_retourne_2
WHEN expr_comp_n THEN expr_retourne_n
ELSE expr_autre]
END

Comment corriger le poids des animaux selon le pre ?


PROC SQL;
SELECT anim, pere,
CASE WHEN pere=P1 THEN 1.10*poids
WHEN pere=P2 THEN 1.20*poids
ELSE poids END AS poids_corr
FROM PERF ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le CREATE TABLE
Comment obtenir la liste des animaux pess dans une nouvelle
table SAS ?

PROC SQL;
CREATE TABLE perf_bis AS
SELECT DISTINCT anim
FROM PERF ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le INSERT INTO
Comment ajouter une pese supplmentaire ?

PROC SQL;
INSERT INTO PERF
VALUES(4, 01/02/2000, 100) ;
QUIT;
OU
PROC SQL;
INSERT INTO PERF
SET anim=4,
d_pesee= 01/02/2000,
poids=100 ;
QUIT;

remarque : mme syntaxe pour linstruction UPDATE , mais

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le INSERT INTO
Comment ajouter les peses du fichier performance davril 2007 ?

PROC SQL;
INSERT INTO PERF
SELECT *
FROM PERF_200704;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le DELETE
Comment supprimer les peses de lanne 2007 ?

PROC SQL;
DELETE FROM PERF
WHERE YEAR(d_pesee) = 2007 ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Mais quel intrt dans tout
par rapport au langage SAS classique ?

On va creuser un peu le sujet


- les fonctions daggrgations,
- les instructions imbriques,
- les jointures,
- les macro-variables,

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les fonctions dagrgation
pour examiner les donnes

Fonction Dfinition

COUNT, FREQ, N Nombre de valeurs non manquantes

NMISS Nombre de valeurs manquantes

AVG, MEAN Moyenne

STDERR Erreur standard la moyenne

MIN, MAX Minimum, Maximum

RANGE Etendue des valeurs

SUM Somme des valeurs

VAR,STD Variance, Ecart-Type

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les fonctions dagrgation
pour examiner les donnes

On veut calculer le nombre de peses, le nombre


danimaux diffrents, les poids minimum et maximum dans
le fichier PERF

PROC SQL;
SELECT
COUNT(*) AS nbpesees,
COUNT(DISTINCT anim) AS nbanim,
MIN(poids) AS mini, MAX(poids) AS maxi
FROM PERF;
QUIT;
nbpesees nbanim mini maxi
output:
12 5 20 110

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les fonctions dagrgation
pour examiner les donnes

On veut calculer le nombre de peses, les poids minimum


et maximum pour chaque animal

PROC SQL;
SELECT anim,
COUNT(*) AS nbpesees,
MIN(poids) AS mini, MAX(poids) AS maxi
FROM PERF
GROUP BY anim ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les fonctions dagrgation
pour examiner les donnes

On veut calculer le nombre de peses, les poids minimum et


maximum pour chaque animal
QUE POUR LES ANIMAUX AVEC PLUS DE 2 PESEES

PROC SQL;
SELECT anim,
COUNT(*) AS nbpesees,
MIN(poids) AS mini, MAX(poids) AS maxi
FROM PERF
GROUP BY anim
HAVING nbpesees>2;
QUIT;
Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les instructions imbriques
Les sous requtes :
Comment slectionner les peses suprieures la moyenne
gnrale des peses ?
PROC SQL;
SELECT anim, d_pesee, poids
FROM PERF
WHERE poids > (SELECT MEAN(poids) FROM perf) ;
QUIT;

Comment slectionner les peses des animaux avec gnalogie ?


PROC SQL;
SELECT anim, d_pesee, poids
FROM PERF
WHERE anim IN (SELECT SUBSTR(nunati,3,1) FROM perf);
QUIT;
Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les jointures

A B
PERF ANIM
PEDIGREE
NUNATI
DATE_PESEE SEXE
POIDS NUPERE
NUMERE

On souhaite ajouter le numro de la mre dans la table perf pour les femelles

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les jointures

4 tapes: A B
1- le renommage de la cl DATA PED1 (DROP=NUNATI); SET PED;
ANIM=SUBSTR(NUNATI,3,1);
2- les tris PROC SORT DATA=PERF; BY ANIM;
PROC SORT DATA=PED1; BY ANIM;
3- la fusion
DATA SORTIE (DROP=SEXE NUPERE);
+ limination des variables
MERGE PERF (IN=A) PED1 (IN=B);
en trop
BY ANIM;
IF A AND B;

4- slection des femelles IF SEXE=F;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les jointures

A B

PROC SQL;
CREATE TABLE SORTIE AS
SELECT T1.*, T2.numere
FROM PERF T1 INNER JOIN PED T2
ON T1.anim = SUBSTR(T2.nunati,3,1)
WHERE T2.sexe=F;
QUIT;
Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Concrtement
PERF SORTIE
Pedigree PED
anim d_pesee poids NUMERE
1 01/01/2000 20 A
NUNATI SEXE NUPERE NUMERE
1 01/02/2000 65 A
FR1 F A D
1 01/03/2000 110 A
FR2 F A E
2 01/01/2000 25 A
FR3 M B F
2 01/02/2000 85 A
FR4 F B G
3 01/01/2000 30
FR6 F C I
3 01/02/2000 45

4 01/01/2000 40 B

4 01/02/2000 58 B

4 01/03/2000 76 B

5 01/01/2000 50

5 01/02/2000 71

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les jointures

A B

PROC SQL;
CREATE TABLE SORTIE AS
SELECT T1.*, T2.numere
FROM PERF T1 LEFT JOIN PED T2
ON T1.anim = SUBSTR(T2.nunati,3,1)
WHERE T2.sexe=F;
QUIT;
Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Concrtement
PERF SORTIE
Pedigree PED
anim d_pesee poids NUMERE
1 01/01/2000 20 A
NUNATI SEXE NUPERE NUMERE
1 01/02/2000 65 A
FR1 F A D
1 01/03/2000 110 A
FR2 F A E
2 01/01/2000 25 A
FR3 M B F
2 01/02/2000 85 A
FR4 F B G
3 01/01/2000 30 .
FR6 F C I
3 01/02/2000 45 .
4 01/01/2000 40 B

4 01/02/2000 58 B

4 01/03/2000 76 B

5 01/01/2000 50 .
5 01/02/2000 71 .

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les jointures DATA MERGE PROC SQL

A B IF A AND B INNER JOIN

IF A LEFT JOIN

IF B RIGHT JOIN

LEFT JOIN
IF A AND NOT B
WHERE T2.NUNATI IS NULL

RIGHT JOIN
IF NOT A AND B
WHERE T1.ANIM IS NULL

IF A OR B OUTER JOIN
A B
Introduction au langage SQL

SGQA DATA SET


et procdure SQL de SAS
Eric Venot & Herv Lagant
UNION
Un exemple
On veut obtenir les peses des filles du taureau C suprieures la
moyenne de tous les animaux
3 tapes: PROC SQL;
CREATE TABLE PES AS
1- On slectionne les SELECT anim, poids, d_pesee
peses suprieures FROM PERF
la moyenne gnrale WHERE poids > (SELECT MEAN(poids) FROM PERF);

CREATE TABLE LISTE AS


2- On slectionne la liste SELECT SUBSTR(nunati,3,1) AS anim
des filles du taureau C FROM PED
WHERE nupere=C AND sexe=F;

CREATE TABLE FINAL AS


3- On fusionne les 2 SELECT T1.*
tables. FROM PES T1 INNER JOIN LISTE T2
ON T1.anim = T2.anim;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Le mme exemple en 1 tape!
On veut obtenir les peses des filles du taureau C suprieures la
moyenne de tous les animaux

1- On slectionne les 2- On slectionne la liste 3- On fusionne les 2 tables


peses suprieures des filles du taureau C (sans tri, ni renommage).
la moyenne gnrale
PROC SQL;
SELECT T1.*
FROM (SELECT anim, poids, d_pesee
FROM PERF
WHERE poids>(SELECT MEAN(poids)
FROM PERF) T1
INNER JOIN PED T2
ON T1.anim = T2.SUBSTR(nunati,3,1)
WHERE T2.nupere=C AND T2.sexe=F;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les macro-variables
PROC SQL;
SELECT MEAN(poids), STD(poids) INTO :moy, :et
FROM PERF WHERE poids > 100;

TITLE "Attention: il y a des valeurs vrifier" ;


SELECT * FROM PERF
WHERE ( poids > &moy + 3*&et )
OR ( poids < &moy - 3*&et );
QUIT;

=> Macrovariables cres (&moy, &et) utilisables ensuite partout


dans le programme: Titre, bornes des graphiques

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Toujours plus sur les macro-variables
PROC SQL NOPRINT;
SELECT (DISTINCT ANIM) INTO :NUM1 - :NUM99
FROM PERF;
=> 1 macro-variable par animal

SELECT (DISTINCT ANIM) INTO: NUMERO


SEPARATED BY ,
FROM PERF;
=> 1 macro-variable pour tous les animaux
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Les informations caches
Grce Proc SQL :

on peut obtenir la description des tables SAS (structure, contenu)


PROC SQL;
DESCRIBE TABLE PERF;
QUIT;
on peut accder aux tables du dictionnaire qui regroupe toutes les
informations sur les bibliothques SAS, les tables SAS, les options du
systme et les fichiers externes associs la session.
PROC SQL;
SELECT LIBNAME, MEMNAME, CRDATE, MODATE, NVAR, NOBS
FROM DICTIONARY.TABLES
WHERE LIBNAME="WORK" AND MEMNAME="PERF" ;
QUIT;

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
On se rsume
langage structur, simple et trs rpandu
slection, renommage, labellisation et choix de
lordre des colonnes simples
merge entre tables sans renommage, ni tri pralable
simplification de la cration des macro-variables
utilisation des informations caches sur les tables
SAS (dictionnaire)

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Quelques liens utiles
SAS Guide to the SQL procedure (SAS Institute INC.)
La rfrence en franais dans le texte (trs complet avec exemples) :
http://wwwsas.stat.ucl.ac.be/sasdiscute/doc/tutorials/base/sql.html
Cours gnral sur SAS, dont SQL (en franais) :
http://cedric.cnam.fr/~saporta/Cours%20SAS%20v2.pdf
Introductions SAS PROC SQL (en anglais) :
http://www2.sas.com/proceedings/sugi26/p150-26.pdf
http://www2.sas.com/proceedings/sugi27/p070-27.pdf
Les dix meilleures raison dutiliser PROC SQL (en anglais) :
http://www2.sas.com/proceedings/sugi29/042-29.pdf
Match en direct entre DATA STEP et PROC SQL (en anglais) (score 8-3 pour SQL!) :
http://www.pauldickman.com/teaching/sas/proc_sql_slides_20041026.pdf
Dtails sur toutes les informations disponibles dans le dictionnaire des tables :
http://www2.sas.com/proceedings/sugi24/Posters/p254-24.pdf

et bien dautres exemples sur le Net


Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant
Et comme tout bon utilisateur de SQL
la fin dun travail, on vous

Introduction au langage SQL

SGQA et procdure SQL de SAS


Eric Venot & Herv Lagant

Das könnte Ihnen auch gefallen