La NORME SQL 92 Principales différences avec SQL400/400 (V2) CREATE TABLE type de variable TIME WITH TIME ZONE TIMESTAMP WITH TIME ZONE (contiennent le décalage avec l'UTC) = méridien de greenwitch) ALTER TABLE nom-table ADD zone définition (ajout d'une colonne) MODIFY zone nouvelle-définition (modification d'une colonne) DROP zone (retrait d'une colonne) |
DROP VIEW nom-vue (RESTRICT / CASCADE) RESTRICT comme actuellement,suppression impossible si d'autres vues s'appuient sur celle-ci. CASCADE suppression de cette vue et de toutes les vues qui l'utilisent. CREATE VIEW (AS SELECT ...WHERE ...) WITH CHECK OPTION la clause WHERE doit être vérifiée aussi pour les mises à jour et les insertions. Si vous faites une restriction sur le code société = 01 l'utilisateur ne peut pas insérer(par exemple) des lignes sur une autre société. Valide sous DB2/400 depuis la V3R10 |
SELECT : - CASE (détermine l'apparition d'une colone fonction d'un test) SELECT nom, prénom, datenais, CASE WHEN situation = 'M' THEN 'marié' WHEN situation = 'C' THEN 'célibataire' ... ELSE 'inconnu' FROM personnel ... remplacement d'un code par son libellé en clair. - COUNT(DISTINCT(nom-zone)) indique le nombre de valeurs différentes rencontrées Valide depuis la V3R10 |
- jonction la jonction (norme 89) est définie de la manière suivante: SELECT .... FROM table1, table2 WHERE table1.zone1 = table2.zone1 la jonction norme 92 peut être définie avec la clause JOIN, de la manière suivante: valide depuis la V3R10 et une PTF + produit cartésien: SELECT ... FROM table1 CROSS JOIN table2 (équivalent au précédent sans clause WHERE) + jointure naturelle: SELECT ... FROM table1 NATURAL JOIN table2 (SQL utilise les colonnes ayant même nom dans les deux tables) pour n'utiliser qu'une partie d'entre elles, ajouter: USING(nom-zone) |
+ jointure conditionnelle SELECT ... FROM table1 JOIN table2 ON zone1 = zone2 (toute expression logique est acceptée après ON) + auto-jointure SELECT ... FROM table1 a JOIN table1 b ON a.zone1 = b.zone1 Les jointures sont par défaut internes (elles n'affichent que les enregistrements en correspondance) On parle de INNER JOIN (certains SGBD acceptent cette clause) + jointure externe (OUTER JOIN) on parle de LEFT OUTER JOIN quand on désire tous les enregistrements du fichier1 (celui à gauche du mot JOIN) qu'ils soient ou non en correspondance avec le fichier2 |
on parle de RIGHT OUTER JOIN quand on désire tous les enregistrements du fichier2 (celui à droite du mot JOIN) qu'ils soient ou non en correspondance avec le fichier1 et l'on parle de FULL OUTER JOIN quand on désire tous les enregistrements des deux fichiers. exemples : liste des clients, avec, pour ceux d'entre eux ayant passé des commandes, la liste des commandes. SELECT codcli, nomcli, numcde, datcde, datliv FROM clients c LEFT OUTER JOIN command d ON c.numcli = d.numcli WHERE ... - les opérateurs ensemblistes (nous connaissont déja UNION) SELECT .... INTERSECT SELECT .... (renvoie uniquement les lignes communes aux deux requêtes) SELECT .... EXCEPT SELECT ... (renvoie uniquement les lignes de la première requête ne se trouvant pas dans la deuxième). |
Nouveautés DB2/400 (V3R10) CREATE TABLE (NUMERODUCLIENT for column NOCLI CHAR(6), ... Les noms longs sont acceptés (il sont gérés comme des ALIAS) [128 C pour les objets / 30 c pour les colonnes] SQL interactif et QM modifiés pour en tenir compte SELECT COUNT(DISTINCT DEPT) renvoie le nombre de valeurs rencontrées (et non le nombre de ligne) SELECT NOM, SALAIRE + COM AS TOTPAIE FROM PERSON attribue le "nom" TOTPAIE à l'expression SALAIRE + COM |
Extensions diverses: CREATE COLLECTION MABIB IN ASP 2 EXEC SQL autorisé avec REXX !! Optimiseur: nouvelle commande PRTSQLINF permet d'obtenir des informations sur un plan d'accès. [SQL PACKAGE] CHGQRYA nouvelle commande (niveau JOB) permettant de paramétrer le "QUERY GOVERNOR"' + utilisations abusives + autoriser le parallelisme (machines multi-processeurs) |