nouveautés SQL en V5R10 : - le 2 phases commit est admis sur IP. [ ce qui permet de rendre le driver ODBC de client access compatible avec ODBC 3.5 et avec MTS (Microsoft Transaction Server).] - l'instruction SET RESULT SET permettant dans une procédure cataloguée de retourner un curseur ouvert ou un tableau est maintenant valide dans une utilisation DRDA ou CLI (APi ODBC) - l'ordre create table admet une copie de la définition d'une autre table : CREATE TABLE2 LIKE TABLE1 (table2 est identique à table1) CREATE TABLE3 (like table1 , autrezone char(10)) même liste de champs PLUS des champs spécifiques (la duplication d'un seul CHAMP est impossible) |
- RIGHT OUTER JOIN jointure externe à partir du fichier de droite du mot-clé JOIN select ... from clients RIGHT OUTER JOIN commandes (toutes les commandes ,même si le client est inconnu) et RIGHT EXCEPTION JOIN select ... from clients RIGHT EXCPTION JOIN commandes (toutes les commandes dont le client est inconnu) - les expressions sont admises sur la clause LIKE SELECT * from producteurs WHERE pr_nom like '%' concat trim(PR_COMMUNE) concat '%' |
l'ordre SELECT peut-être complété par : FETCH FIRST x ROWS ONLY qui indique à SQL de ne retourner que les "x" premières lignes. très pratique pour obtenir les meilleurs scores (Top 10, Top 100, ...) select codart , count(*) from commandes group by codart order by 2 FETCH FIRST 50 ROWS ONLY vous donne les 50 articles les moins commandés (en nb de commandes) select codart , count(*) from commandes group by codart order by 2 DESC FETCH FIRST 50 ROWS ONLY vous donne les 50 articles les plus commandés. |
il est possible de placer un SELECT (simple) dans la liste des colonnes d'un Select : vous souhaitez obtenir la liste des commandes en rappelant sur chaque ligne le montant global commandé. Select codart , qte * prix as montant, (select sum(qte * prix) from commandes) as total from commandes vous pouvez utiliser dans le select imbriqué, n'importe quelle variable de n'importe quel fichier de la clause FROM du select principal, si vous l'utilisez aussi dans le WHERE ou le HAVING du select imbriqué. vous souhaitez obtenir la liste des commandes en rapppellant sur chaque ligne le montant global commandé pour la famille. Select codart , qte * prix as montant, (select sum(qte * prix) from commandes where famcod = c1.famcod) as totfam from commandes c1 |
Contre exemple : --------------- vous souhaitez obtenir la liste des commandes en indiquant sur chaque ligne le % représenté par ce montant, dans la famille : Select codart , qte * prix as montant, (select sum(qte * prix) / (c1.QTE * c1.prix) from commandes c2 where c2.famcod = c1.famcod) from commandes c1 CA ne marche PAS, (les labs le prévoient pour une prochaine version) quelques restrictions : ---------------------- Le select doit produire un résultat d'UNE ligne et d'une seule colonne GROUP BY / HAVING et UNION sont invalides cette colonne ne peut pas être utilisée dans ORDER BY. ce select ne doit pas être placé dans un select imbriqué (WHERE SELECT..) dans une vue. |
nouvelles fonctions : PI retourne pi (3.141592653589793) SPACE(x) retourne x blancs DAYOFWEEK_ISO(date) retourne le n° du jour de la semaine (1=Lundi)) WEEK_ISO(adte) retourne le n° de semaine dans l'année est considéré comme semaine 1 la première semaine possédant un JEUDI dans l'année. JULIAN_DAY(date) nombre de jours depuis le 1 janvier 4712 av JC. MIDNIGHT_SECONDS(h) retourne le nombre de secondes séparant une heure (ou un timestamp) de minuit. TIMESTAMPDIFF(c, d) retourne un écart |
C indique l'unité de mesure de l'écart que vous souhaitez obtenir. 1 : fractions de secondes 32 : Semaines 2 : Secondes 64 : Mois 4 : Minutes 128 : Trimestres 8 : Heures 256 : Années 16 : Jours on part du principe qu'il y a : 365 jours par AN, 30 jours par mois 24 heures / jour, 60 minutes /heure etc... D représente la différence entre deux timestamps sous forme d'une chaine de 22 c. de long. TIMLESTAMPDIFF(32 , CAST(CURRENT_TIMESTAMP - CAST(DATLIV AS TIMESTAMP) AS CHAR(22)) ) donne le nombre de semaines qui séparent DATLIV d'aujourd'hui. |