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.
SQL
sql statement;
[ECHO|FILE]
[TABLE phrases]
END
où :
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.
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.
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.
é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.
sont des phrases de formatage TABLE facultatives. Consultez Phrases de formatage TABLE dans les requêtes SQL.
est nécessaire pour terminer la procédure.
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
Vous pouvez inclure des phrases de formatage TABLE dans une requête SQL en respectant les règles suivantes :
Pour plus de détails à propos des en-têtes et pieds de page, consultez Utilisation d'en-têtes, pieds de page, titres et étiquettes.
Pour plus de détails sur ON TABLE HOLD ou ON TABLE PCHOLD, consultez Enregistrer et réutiliser la sortie de rapport.
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.
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.
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ù :
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
présente les sources de données à joindre.
sont les sources de données à joindre.
sont d'autres noms facultatifs des sources de données à joindre.
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.
est la condition de jointure.
SQL SELECT fieldlist FROM file1 {LEFT|RIGHT|FULL} JOIN file2 ON join_condition [{LEFT|RIGHT|FULL} JOIN ...] WHERE where_condition END
où :
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
présente les sources de données à joindre.
sont les sources de données à joindre.
sont d'autres noms facultatifs des sources de données à joindre.
est la condition de jointure. La condition doit spécifier l'égalité. Par exemple, T1.A=T2.B.
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é.
Les jointures lancées par le traducteur SQL sont attribuées des noms au format :
SQLJNMnn
où :
est le préfixe de jointure du traducteur SQL.
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.
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
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.
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.
Pour plus d'informations à propos de l'optimisation d'index et des instructions de jointure optimisées, reportez-vous à votre documentation Serveur.
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.
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
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.
Le traducteur SQL prend en charge la déclaration SQL suivante :
CREATE VIEW viewname AS subquery ;
où :
est le nom de la vue.
est une instruction SELECT qui reste à l'intérieur :
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.
La requête suivante supprime la vue XYZ :
SQL DROP VIEW XYZ; END
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.
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.
L'exemple suivant crée une colonne définie comme 1.2 + SEATS :
SET CDN=ON SQL SELECT SEATS + 1,2 FROM CAR; END
Vous pouvez spécifier des champs dans une requête SQL avec :
L'identifiant de champ suivant peut être compris dans une requête :
"COUNTRY.NAME"
Pour qualifier le nom de champ délimité COUNTRY.NAME de son nom de fichier, utilisez :
CAR."COUNTRY.NAME"
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.
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 |