ST Tutor5 Sas SQL
ST Tutor5 Sas SQL
On peut utiliser une clause where dans l’instruction select, pour garder from client
ou retirer des observations. Exemples de syntaxes : group by nomclient
having count(*)=2
where a>b
order by nomclient,2,3;
where (a>b) and (c>d)
where (a-b)>100
La commande group by définit le groupe qui sera évalué par having.
where a between 5 and 15
Seuls les groupes dont le having est évalué comme vrai seront traités.
where city not in ("paris","toulouse")
where a is null /*vrai si a est manquante*/ 2.3 Jonction (jointure) de deux tables
where a like "c%"
where a like "____e" Une requête peut porter sur plusieurs tables. Le code suivant affiche
les prix de production, de catalogue et de facturation de chaque pro-
duit vendu par le client de Mimisan. La réunion de ces informations
2.2 Extraction nécessite l’appel des tables produit et facture. La clause where
Exercice 1 : Utilisez des clauses where pour afficher successivement les in- product.prodname=invoice.prodname sert à réunir ces tables selon
formations sur : la variable commune prodname.
1. les employés ayant au moins 10 ans de service, proc sql;
2. les employés qui ne vivent pas à ’Mimisan’, et qui ont plus de 10 ans de title "Information sur les produits
service, vendus par Surf40";
select numfact, produit.nomprod,coutprod,
3. les employés dont le nom comence par la lettre s,
prixfact,prodlist,nomclient,numclient
4. les employés ayant un nom de cinq lettres qui finit par un e, from produit, facture
5. les employés ayant travaillé 1,5 ou 10 ans, where produit.nomprod=facture.nomprod
and nomclient="Surf40";
6. les employés dont le numéro est compris entre 301 et 401,
7. les employés pour lesquels la variable patremp présente une valeur Notez qu’il faut faire précéder, dans l’instruction select, le nom d’une
manquante, i.e. les employés n’ayant pas de responsable au dessus d’eux variable apparaissant dans plus d’une des tables jointes par un nom de table.
dans la hiérarchie de l’entreprise. L’union des deux tables est ici faite par from.
Les instructions having et count(*) permettent de faire comme si on Exercice 2 : Adapter le code précédent joignant les tables client et
appliquait une clause where à un groupe d’observations. L’exemple suivant facture pour visualiser les produits vendus à Mimisan.
permet de mieux comprendre leur utilisation. Ce code opère l’impression des
seuls clients ayant deux magasins. 2.4 Jonction d’une table à elle-même
proc sql; Il peut être aussi intéressant de joindre une table à elle-même pour rendre
title "Clients ayant deux magasins"; plus lisible certaines informations. Par exemple, on souhaite afficher, à partir
select nomclient, numclient, villeclient de la table employe, le nom de son responsable à côté du nom de chacun des
4 Procédure SQL de SAS
employés. Dans ce cas, il faut d’abord dupliquer la table, ce qui peut se faire di- where nomemp in ("Alain","Georges"))
rectement dans l’instruction from de la manière suivante : from employe order by 1,2,3,4;
emp1, employe emp2. Dans ce cas, emp1 et emp2 sont des alias (ou
noms temporaires) de tables. une sous-requête est évaluée en premier et sélectionne les identifiants
d’Alain et Georges dans la table employe. Ces numéros sont ensuite utili-
L’instruction where précise ensuite la clause :
sés dans la clause where de la requête principale pour sélectionner les lignes
where emp1.patremps=emp2.numemp. de facture.
Exercice 3 : Ecrivez le code permettant d’afficher le nom et la fonction de son Exercice 5 : Ecrivez un code utilisant une sous-requête et la clause not in
responsable à coté du nom et de la fonction de chacun des employés. dans la clause where pour afficher les produits proposés par le fournisseur
mais non-vendus dans les magasins.
2.5 Jonction de plusieurs tables
L’instruction validate permet de vérifier si la syntaxe d’une instruction
Il est bien sur possible de joindre plus de deux tables. select est correcte, sans avoir à l’exécuter. Par exemple :
proc sql;
Exercice 4 : Ecrire une requête permettant d’afficher les produits vendus par validate
Samuel à des magasins de La Torche (vous pourrez créer des alias de tables select numemp, nomemp
pour alléger votre code). from employe
where numemp > 200 and numemp <400;
Une requête peut contenir une sous-requête, qui restitue une ou plusieurs
valeurs ensuite utilisées par la requête qui la contient. Par exemple : Crée un commentaire dans le log.
proc sql;
select numemp,nomclient,numclient,nomprod,numfact 3 Tables et vues
from facture La commande create table nomtable as permet la création ou la
where numemp in (216,314) modification de tables ou de vues.
order by 1,2,3,4;
renvoie des informations sur les ventes réalisées par Alain (identifiant 216)
3.1 Création de tables
et Georges (314). Exercice 6 : Complétez le code suivant (en remplaçant les ...) pour créer une
Supposons que l’on veuille afficher ces informations mais que l’on ne table contenant les noms, fonctions et anciennetés des employés ayant travaillé
connaisse pas les identifiants des vendeurs. Dans le code suivant : au moins six ans pour le fournisseur.
proc sql; proc sql;
select numemp,nomclient,numclient,nomprod,numfact title "Employes anciens";
from facture create table ... as
where numemp in select ...
(select numemp from employe from ...
5 Procédure SQL de SAS
where ... Exercice 8 : Adapter le code de l’exercice précédent pour écrire une procédure
order by ... desc; SQL qui applique en 2008 une augmentation de 20% au prix catalogue des
/* affichage de la table créée */ produits coûtant moins de 240 euros, et qui laisse inchangé le prix des produits
select * from ... coûtant plus de 240 euros.
La commande order by ... desc va permettre ici de trier les employés Le programme obtenu peut être écrit de manière plus courte, avec l’option
par ordre décroissant d’ancienneté. case ... end
proc sql;
Exercice 7 : Créez une table nouvprix (pour nouveaux prix), copie de la update table
table produit. set prix2011=prodlist *
case when prodlist<= 240 then 1.2
3.2 Modification de tables else 1
Diverses instructions permettent de modifier les données et la structure end
d’une table ; alter permet d’ajouter, supprimer des colonnes, modifier leurs
L’instruction insert permet d’insérer des lignes dans une table. Exécutez
attributs ; update permet d’ajouter/modifier des valeurs à une colonne.
l’exemple suivant :
Executez et commentez : proc sql;
insert into nouvprix
proc sql; values ("cremesol",9,10,12,11,10);
alter table nouvprix select * from nouvprix;
add prix2011 num format=euro.;
select * from nouvprix; Notez que l’ordre des valeurs dans values doit correspondre à l’ordre des
colonnes dans la table modifiée. On ne peut spécifier des valeurs que pour cer-
taines colonnes de nouvprix. Dans ce cas, ces colonnes sont désignées par
A noter la création de la variable prix2011 : la commande utilisée permet
l’instruction select. La valeur d’une colonne non remplie est alors consi-
de préciser que cette dernière est de type numérique et exprimée en euros. Les
dérée comme manquante. Enfin, on peut remplacer values par la syntaxe
prix 2011 sont obtenus en ajoutant 20% au prix catalogue :
suivante, qui ne nécessite pas de connaître l’ordre des colonnes :
proc sql; set nomprod="cremesol", cost=11,
update nouvprix prodlist=12, prix2011=13;
set prix2011=prodlist*1.2;
select * from nouvprix; On peut supprimer des lignes par :
proc sql;
La création de nouvprix, l’ajout et le remplissage de prix2011 auraient pu delete from nouvprix
être faits en une seule étape. On peut aussi ne modifier que certaines valeurs where nomprod="cremesol";
d’une colonne. Par exemple, select * from nouvprix;
6 Procédure SQL de SAS
Exercice 9 : Modifier le script précédent pour créer une vue gdeqte qui se-
libname sql ’sql’;
lectionne dans la table facture les factures portant sur plus de 25 articles.
proc sql;
Executez ensuite (et commentez) :
create table sql.statlab like sasuser.statlab2;
proc sql; create table sql.statlab2 as
describe view gdeqte; select sexenf, gsenf, tenf_n,
penf_n, tenf_10, penf_10
proc univariate data=ventimp; from sasuser.statlab2
var quantfact prixfact; where (consm_n=’nonfum’);
7 Procédure SQL de SAS
Création d’une vue Création de l’index composite consm associé à deux variables
Syntaxe proc sql;
create view nom-vue as query-exp <order byitem <, item>> ; create index consm on sql.statlab2 (consm_n,consm_10);
Une vue étant une interrogation stockée et ne contenant pas de données, on ne La commande alter
peut utiliser les instructions suivantes quand on se réfère à une vue : insert,
delete, alter, update. Elle permet d’ajouter ou de supprimer des colonnes dans une table SAS, ou
d’en modifier les attributs (longueur, label, format).
Création d’une vue à partir d’une table
Syntaxe
create view labv2 as
select sexenf, gsenf, tenf_n, penf_n, alter table nom-table
tenf_10, penf_10 < add def-col <, def-col >>
from sql.statlab2 < modify def-col <, def-col >>
where (sexenf=’fille’);
< drop nom-col <, nom-col >> ;
proc print data=labv2; run;
Modification d’une table existante
Création d’un index
alter table sql.statlab2
Un index stocke à la fois les valeurs des colonnes d’une table, et un système de add gender char(6);
directions qui permet d’accéder aux lignes de cette table à partir des valeurs de
l’index. L’utilisation de l’index lors d’interrogations ou autres instructions de La commande delete
la procédure est déterminée par le système. L’index est automatiquement mis
Elle permet de supprimer des lignes dans une table.
à jour quand on modifie la table à laquelle il est associé. Il permet d’améliorer
la performance de certaines commandes, par exemple la comparaison d’une Syntaxe
colonne indexée à une valeur constante à l’aide de l’expression where.
delete from nom-table < where sql-exp > ;
Suppression des lignes d’une table
Syntaxe
create <unique > index nom-index on nom-table ; delete from sql.statlab2 where gsenf=’A+’;
Le mot-clé unique garantit que chaque valeur de la colonne indexée est
La commande describe
unique. Ceci peut être utile quand on manipule des variables telles que le nu-
méro de sécurité sociale. Création de l’index simple gse associé au groupe Elle donne la définition d’une vue, et des vues parentes si l’option
sanguin feedback est spécifiée.
La commande validate
La commande insert
Elle permet d’évaluer la syntaxe d’une interrogation sans l’exécuter, et re-
Elle permet d’ajouter des lignes à une table.
tourne un message dans la fenêtre log.
Syntaxe
Syntaxe
insert into nom-table < ( nom-col < , nom-col > >) validate query-exp ;
values ( value < , value >) ;
Cette commande est essentiellement utile dans des applications utilisant des
macro-variables. validate retourne alors une valeur indiquant si l’interro-
Il existe deux autres manières d’utiliser la commande insert (voir l’aide en
gation est valide grâce à la macro-variable SQLRC (SQL Return Code).
ligne).
Insertion de lignes dans une table Annexe 2 : Solutions
insert into sql.statlab2
/* Exercice 1*/
values (’fille’,’AB’,0,0,0,0,’d’)
proc sql;
values (’garcon’,’AB’,10,10,10,10,’e’);
select * from employe
where anneemp>9 order by nomemp;
La commande select proc sql;
select * from employe
Elle permet de sélectionner des colonnes dans une table, et d’afficher les where (villeemp not in ("Mimisan"))
résultats dans la fenêtre output. and (anneemp>9);
Syntaxe proc sql;
select * from employe
select liste d’objets from liste < where sql-exp > ; where nomemp like "S%";
9 Procédure SQL de SAS