Utilisation des commandes du traducteur SQL

Dans cette section :

Comment :

Référence :

La commande SQL peut être utilisée pour créer un rapport à partir de tout(e) source de données ou jeu de sources de données. Les phrases TABLE standards pour le formatage de rapports peuvent être ajoutées aux déclarations SQL afin de profiter de toute une gamme d'options de préparation.

Remarque : si vous avez besoin de joindre des sources de données pour votre requête, vous pouvez le faire de deux manières : soit utiliser la commande JOIN avant de lancer des déclarations SQL, soit utiliser le prédicat WHERE dans la déclaration SQL SELECT pour joindre les fichiers requis dynamiquement. Consultez Jointures SQL.


Haut de page

x
Syntaxe : Utiliser les commandes du traducteur SQL
SQL 
sql statement;
[ECHO|FILE]
[TABLE phrases]
END

où :

SQL

est l'identifiant de la commande SQL, qui appelle le traducteur SQL.

Remarque : les composants de la commande SQL doivent s'afficher dans l'ordre présenté ci-dessus.

sql statement

est une déclaration SQL prise en charge. La déclaration doit se terminer par un point virgule (;). Elle peut s'étendre sur plus d'une ligne. Reportez-vous à Déclarations SQL prises en charge.

Dans l'instruction SQL, les noms de champ sont limités à 48 caractères (une limitation standard ANSI de niveau 2). Les noms de vue générées à travers l'instruction SQL CREATE VIEW sont limitées à 18 caractères et les sous requêtes peuvent être nivelées jusqu'à 15 niveaux de profondeur. Les sous-interrogations corrélées ne sont pas prises en charge par FOCUS et d'autres sources de données non relationnelles.

ECHO

sont des phrases de débogage facultatives qui capturent la requête TABLE générée. Ces options sont spécifiées après la déclaration SQL.

FILE [name]

écrit les phrases TABLE traduites dans la procédure nommée. Si vous ne spécifiez pas de nom de fichier, un nom par défaut lui est attribué lors de l'exécution de la requête. Le fichier est supprimé par la suite.

TABLE phrases

sont des phrases de formatage TABLE facultatives. Consultez Phrases de formatage TABLE dans les requêtes SQL.

END ou QUIT

est nécessaire pour terminer la procédure.



Exemple : Utilisation des commandes du traducteur SQL

La requête suivante comprend une déclaration SQL et des commandes de formatage TABLE :

SQL
SELECT BODYTYPE, AVG(MPG), SUM(SALES)
FROM CAR
WHERE RETAIL_COST > 5000
GROUP BY BODYTYPE;
TABLE HEADING CENTER
"AVERAGE MPG AND TOTAL SALES PER BODYTYPE"
END

Haut de page

x
Référence : Phrases de formatage TABLE dans les requêtes SQL

Vous pouvez inclure des phrases de formatage TABLE dans une requête SQL en respectant les règles suivantes :


Haut de page

x
Déclaration SQL SELECT

La déclaration SQL SELECT se traduit en une ou plusieurs commandes TABLE PRINT ou TABLE, selon que l'affichage de champs individuels ou l'agrégation sont appliqués à la requête. Consultez Affichage de données de rapport.

La déclaration SQL SELECT * se traduit en une impression (PRINT) de chaque champ dans le fichier Master, et utilise tous les champs du produit cartésien. Cela constitue une moyenne rapide d'afficher un fichier, à condition qu'il soit réparti sur un nombre raisonnable d'écrans pour l'affichage, ou à condition que vous utilisiez ON TABLE HOLD ou ON TABLE PCHOLD pour retenir des données récupérées dans un fichier pour la réutilisation. Consultez Enregistrer et réutiliser la sortie de rapport.

Les fonctions SQL (telles que COUNT, SUM, MAX, MIN, AVG) sont prises en charge dans les listes SELECT et les conditions HAVING. Les expressions peuvent servir d'arguments de fonction.

La fonction COUNT (*) se traduit en un décompte du nombre d'enregistrements produits en imprimant tous les champs du fichier Master. Ceci est équivalent à compter toutes les lignes du produit cartésien qui résultent d'une sélection (SELECT) de tous les champs.

Dans la mesure du possible, les expressions du prédicat SQL WHERE sont traduites en des critères WHERE correspondants dans la requête TABLE. Les expressions des listes SELECT génèrent des champs virtuels. Les clauses SQL HAVING se traduisent aussi en des critères WHERE TOTAL correspondants dans la requête TABLE. L'opérateur SQL LIKE se traduit directement en l'opérateur LIKE correspondant dans les critères WHERE de la requête TABLE. Pour plus de détails sur la sélection d'enregistrements dans les requêtes TABLE, consultez Sélection d'enregistrements pour votre rapport.

Seules les sous-interrogations basées sur l'égalité, où l'expression WHERE est comparée à une sous-interrogation par l'utilisation d'un signe égal (=), sont prises en charge. Par exemple, champ WHERE = (SELECT ...).

L'opérateur SQL UNION se traduit en une requête TABLE qui crée un fichier HOLD pour chaque source de données spécifiée, suivie d'une commande MATCH avec l'option HOLD OLD-OR-NEW, qui combine des enregistrements provenant de la première (ancienne) source de données et de la deuxième (nouvelle) source de données. Consultez Fusion de sources de données.

Pour des informations connexes, consultez Déclarations SQL prises en charge et Utiliser les commandes du traducteur SQL.


Haut de page

x
Jointures SQL

Comment :

Référence :

Lors de l'exécution de jointures SQL, les champs joints doivent être au même format. Les champs joints ne doivent pas être indexés, et les non équijonctions sont prises en charge.

Les jointures récursives, externes et internes sont prises en charge. La jointure interne est la jointure par défaut.



x
Syntaxe : Créer une jointure interne

Deux versions de syntaxe sont prises en charge pour les jointures internes.

Version 1

SQL
SELECT fieldlist FROM file1 [alias1], file2 [alias2]
[WHERE where_condition];
END

Version 2

SQL
SELECT fieldlist FROM file1 [alias1] INNER JOIN file2 [alias2]
ON join_condition [INNER JOIN ...]
[WHERE where_condition];
END

où :

fieldlist

identifie quels champs sont récupérés et de quelles sources de données.

Les champs joints dans le prédicat SQL WHERE doivent être qualifiés si les noms ne sont pas uniques. Spécifiez-les en fonction de leurs noms de fichier correspondants ou leurs alias de fichier. Par exemple :

{file1|alias1}.field1, {file2|alias2}.field2									
FROM

présente les sources de données à joindre.

file1, file2

sont les sources de données à joindre.

alias1, alias2

sont d'autres noms facultatifs des sources de données à joindre.

where_condition

est une condition de sélection facultative pour le jeu de réponses jointes. Les lignes jointes qui ne satisfont pas à cette condition sont éliminées du jeu de réponses renvoyé. S'il est omis dans la version 1, le jeu de réponses constitue le produit cartésien des deux sources de données.

join_condition

est la condition de jointure.



x
Syntaxe : Créer une jointure externe
SQL
SELECT fieldlist FROM file1 {LEFT|RIGHT|FULL} JOIN file2 
ON join_condition [{LEFT|RIGHT|FULL} JOIN ...]
WHERE where_condition 
END

où :

fieldlist

identifie quels champs à récupérer et de quelles sources de données.

Les champs joints dans le prédicat SQL WHERE doivent être qualifiés si les noms ne sont pas uniques. Spécifiez-les en fonction de leurs noms de fichier correspondants ou leurs alias de fichier. Par exemple :

{file1|alias1}.field1, {file2|alias2}.field2									
FROM

présente les sources de données à joindre.

file1, file2

sont les sources de données à joindre.

alias1, alias2

sont d'autres noms facultatifs des sources de données à joindre.

join_condition

est la condition de jointure. La condition doit spécifier l'égalité. Par exemple, T1.A=T2.B.

where_condition

est une condition de sélection facultative pour le jeu de réponses jointes. Les lignes jointes qui ne satisfont pas à cette condition sont éliminées du jeu de réponses renvoyé.



x
Référence : Attributions de noms de jointure du traducteur SQL

Les jointures lancées par le traducteur SQL sont attribuées des noms au format :

SQLJNMnn						

où :

SQLJNM

est le préfixe de jointure du traducteur SQL.

nn

est un nombre de 01 à 16 attribué dans l'ordre dans lequel les jointures sont créées (FOCUS prend en charge au maximum seize jointures). Le nom AS de la première jointure est SQLJNM01, celui de la deuxième jointure est SQLJNM02, et ainsi de suite, jusqu'à SQLJNM16.

Toutes les jointures sont automatiquement créées et effacées par le traducteur SQL. Les jointures spécifiées par les utilisateurs sont ignorées.



Exemple : Utilisation de noms de champ qualifiés dans les jointures SQL

Dans la déclaration suivante, T.A et U.B sont des noms de champ qualifiés :

SQL
 SELECT T.A, T.B
 FROM T, U
 WHERE T.A = U.B;
END


Exemple : Utilisation de jointures SQL récursives

Dans la déclaration suivante, A et B sont des alias de la même source de données, CAR. La sortie de CAR présente des paires de valeurs B avec les mêmes valeurs A :

SQL
   SELECT A.SEATS, B.SEATS
   FROM CAR A, CAR B
   WHERE A.MODEL = B.MODEL;
END

Notez que les noms de champ dans la clause SELECT doivent être uniques ou qualifiés.



Exemple : Utiliser les jointures externes complètes SQL

Dans l'instruction suivante, B, C, et D sont des alias pour différentes sources de données :

SQL
SELECT   
       B.FIELD1 AS B_FIELD1, B.FIELD2 AS B_FIELD2, 
       D.FIELD1 AS D_FIELD1, D.FIELD2 AS D_FIELD2   
FROM   
((FILE1 B FULL OUTER JOIN FILE2 C ON B.FIELD2 = C.FIELD2 )   
           FULL OUTER JOIN FILE3 D ON C.FIELD2 = D.FIELD2 )   
WHERE B.FIELD1 < 2   
END 

Plusieurs jointures complètes externes sont prises en charge. Cependant, ils sont générés à partir d'un petit nombre à à grand nombre de fichiers HOLD temporaires.



x
Référence : Considérations de jointures SQL

Pour plus d'informations à propos de l'optimisation d'index et des instructions de jointure optimisées, reportez-vous à votre documentation Serveur.


Haut de page

x
Commandes SQL CREATE TABLE et INSERT INTO

Référence :

Le Traducteur SQL prend en charge le tableau des commandes CREATE TABLE et INSERT INTO :

Ces commandes vous permettent de créer des tableaux afin d'améliorer l'efficacité de reporting.

Remarque : lorsque les applications sont actives, le fichier maître et la source de données sont écrits dans le répertoire APPHOLD. Lorsque les applications sont désactivées, le fichier Master et la source de données sont écrits dans le répertoire TEMP.



x
Référence : Notes sur les commandes SQL CREATE TABLE et INSERT INTO


Exemple : Création d'un tableau avec l'insertion d'enregistrement unique

L'exemple suivant illustre une insertion d'enregistrement unique, créant ainsi le tableau U avec un enregistrement.

-* Single-record insert example.
-*
SQL
CREATE TABLE U (A INT, B CHAR(6), C CHAR(6), X INT, Y INT);
END
SQL
INSERT INTO U (A,B,C,X,Y) VALUES (10, '123456','654321', 10, 15);
END

Haut de page

x
Commandes SQL CREATE VIEW et DROP VIEW

Comment :

Une vue est un objet transitoire qui hérite la plupart des caractéristiques d'un tableau. Comme un tableau, elle se compose de lignes et de colonnes :

Conseil : pour utiliser une vue, lancez une commande SELECT de la vue. Vous ne pouvez par lancer une requête TABLE par rapport à une vue car celle-ci n'est pas extraite comme source de données FOCUS physique. Pour créer un fichier HOLD pour les données extraites, spécifiez ON TABLE HOLD après les déclarations SQL. Pour des détails sur la création de fichiers HOLD, consultez Enregistrer et réutiliser la sortie de rapport.



x
Syntaxe : Créer une vue

Le traducteur SQL prend en charge la déclaration SQL suivante :

CREATE VIEW viewname AS subquery ;

où :

viewname

est le nom de la vue.

subquery

est une instruction SELECT qui reste à l'intérieur :

  • une clause WHERE, HAVING ou SELECT d'une autre clause SELECT.
  • une instruction UPDATE, DELETE, ou INSERT.
  • une sous-requête différente.


Exemple : Création et reporting depuis une vue SQL

L'exemple suivant crée une vue appelée XYZ :

SQL
CREATE VIEW XYZ
 AS SELECT CAR, MODEL
 FROM CAR;
END

Pour créer un rapport depuis la vue, lancez :

SQL
 SELECT CAR, MODEL
 FROM XYZ;
END

Selon la syntaxe de définition de données SQL standard, chaque déclaration CREATE VIEW doit se terminer par un point-virgule.



Exemple : Suppression d'une vue SQL

La requête suivante supprime la vue XYZ :

SQL
 DROP VIEW XYZ;
END

Haut de page

x
Jeux de réponses des produits cartésiens

Le traducteur SQL génère automatiquement des jeux de réponses de produit cartésien, à moins que ne vous désactiviez explicitement cette fonctionnalité. Cependant, il est conseillé de laisser le paramètre CARTESIAN activé (ON), car la désactivation n'est pas conforme avec les standards ANSI. Pour des détails sur la commande SET CARTESIAN, consultez Fusion de sources de données.


Haut de page

x
Notation décimale continentale (CDN)

La notation décimale continentale affiche des numéros en utilisant une virgule pour indiquer la décimale et des périodes pour séparer des chiffres importants en groupes de trois. Cette notation est disponible pour les requêtes du traducteur SQL.



Exemple : Utilisation de la CDN pour séparer des chiffres

L'exemple suivant crée une colonne définie comme 1.2 + SEATS :

SET CDN=ON
SQL
   SELECT SEATS + 1,2
   FROM CAR;
END

Haut de page

x
Spécification de noms de champ dans les requêtes SQL

Vous pouvez spécifier des champs dans une requête SQL avec :



Exemple : Spécification d'un nom de champ avec un identifiant délimité

L'identifiant de champ suivant peut être compris dans une requête :

"COUNTRY.NAME"


Exemple : Qualification d'un nom de champ délimité

Pour qualifier le nom de champ délimité COUNTRY.NAME de son nom de fichier, utilisez :

CAR."COUNTRY.NAME"

Haut de page

x
Opérateurs SQL UNION, INTERSECT et EXCEPT

Les opérateurs SQL UNION, INTERSECT et EXCEPT s'appuient sur la logique MATCH. Le nombre de champs pris en charge est déterminé par la limite de MATCH. UNION avec parenthèses est pris en charge.

La logique MATCH fusionne le contenu de vos sources de données. Consultez Fusion de sources de données.


Haut de page

x
Constantes numériques, littéraux, expressions et fonctions

La liste SQL SELECT, le prédicat WHERE et la clause HAVING peut inclure des constantes numériques, des littéraux entourés de guillemets simples, des expressions et toute fonction scalaire. Un champ virtuel est créé de façon interne pour chacun de ces éléments dans la liste SELECT. La valeur du champ virtuel est fournie dans le jeu de réponses.


WebFOCUS