4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher...

26
4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1 - Date 1 janvier 2008 Résumé Note traduite de l'anglais par Stéphanie Tirtiat (4D S.A.S., Support Technique International). SQL signifie Structured Query Language (langage d'interrogation structuré). 4D v11 SQL intègre un moteur SQL natif permettant le contrôle des tables et des champs de 4D. Il donne au développeur la possibilité d'utiliser le langage SQL dans toute méthode 4D pour effectuer de nombreuses tâches. Utilisés conjointement, 4D et SQL fournissent beaucoup plus de flexibilité que jamais auparavant pour accéder et manipuler les bases de données. Si vous êtes développeur 4D et que vous avez un peu ou pas du tout d'expérience avec SQL, cette note technique est un bon début. 4D Notes techniques Copyright © 1985-2009 4D SAS - Tous droits réservés Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible. Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers. Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence. Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA. 4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA. Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation. Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc. Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc. 4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA. XTND Copyright 1992-2002 © 4D SA. Tous droits réservés. XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc. 1 / 26

Transcript of 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher...

Page 1: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

4D v11 SQL - introduction au SQLPar Christopher VISAYA, Technical Support Engineer, 4D Inc.Note technique 4D-200801-02-FR

Version 1 - Date 1 janvier 2008

RésuméNote traduite de l'anglais par Stéphanie Tirtiat (4D S.A.S., Support Technique International).SQL signifie StructuredQueryLanguage(langaged'interrogationstructuré).4D v11 SQL intègreun moteurSQL natif permettantle contrôledestableset deschampsde 4D. Il donneau développeurla possibilitéd'utiliser le langage SQL dans toute méthode 4D pour effectuer de nombreusestâches. Utilisésconjointement,4D et SQL fournissentbeaucoupplus de flexibilité que jamaisauparavantpour accéderetmanipuler les bases de données.

Si vous êtesdéveloppeur4D et que vous avezun peu ou pas du tout d'expérienceavec SQL, cette notetechnique est un bon début.

4D Notes techniquesCopyright © 1985-2009 4D SAS - Tous droits réservés

Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte.L'auteuret 4D S.A. déclinentdonc toute responsabilitéquantà l'utilisation qui pourrait être faite de ces éléments,tant à l'égard de leursutilisateurs que des tiers.

Lesinformationscontenuesdanscedocumentpeuventfaire l'objet de modificationssanspréaviset ne sauraienten aucunemanièreengager4DSA. La fournituredu logiciel décritdanscedocumentestrégiepar un octroi de licencedont les termessontpréciséspar ailleursdansla licenceélectroniquefigurantsurle supportduLogiciel etdela Documentationafférente.Le logiciel et sadocumentationne peuventêtreutilisés, copiésou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.Aucunepartiede ce documentne peutêtrereproduiteou recopiéede quelquemanièrequece soit, électroniqueou mécanique,y comprisparphotocopie,enregistrement,archivageou toutautreprocédéde stockage,de traitementet de récupérationd'informations,pour d'autresbuts quel'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.4D, 4D Calc,4D Draw,4D Write,4D Insider,4ème Dimension®, 4D Server,4D Compilerainsi queles logos4e Dimension,sontdesmarquesenregistrées de 4D SA.Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.Apple,Macintosh,PowerMacintosh,LaserWriter,ImageWriter,QuickTimesontdesmarquesenregistréesou desnomscommerciauxde AppleComputer,Inc.Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.XTND TechnologyCopyright1989-2002© Claris Corporation..Tousdroits réservésACROBAT © Copyright1987-2002,SecretCommercialAdobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.

1 / 26

Page 2: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétairesrespectifs.

2 / 26

Page 3: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

4D v11 SQL - introduction au SQL

Résumé

SQL signifie Structured Query Language (langage d'interrogation structuré). Ce langage est utilisé dans lessystèmes de gestion de bases de données relationnelles pouraccéder aux données, créer, modifier etsupprimer des objets de ces bases de données.

4D v11 SQL intègre un moteur SQL natif permettant le contrôledes tables et des champs de 4D. Il donne audéveloppeur la possibilité d'utiliser le langage SQL dans toute méthode 4D pour effectuer de nombreusestâches. Utilisés conjointement, 4D et SQL fournissent beaucoup plus de flexibilité que jamais auparavantpour accéder et manipuler les bases de données.

Si vous êtes développeur 4D et que vous avez un peu ou pas du tout d'expérience avec SQL, cette notetechnique est un bon début.

A propos de la base exemple

La base exemple incluse dans cette note technique peut être utilisée pour parcourir successivement leschapitres de cet article. Après avoir ouvert la base de données (BeginnerSQL.4dbase), allez au menuFichier,ligne Afficher . Le formulaire qui sera affiché contient deux pages. La première page expose le code SQLprésenté dans cette note technique. La seconde page contient les résultats sous forme de List Box. Parfois lesrésultats sont affichés dans un dialogue d'alerte, et parfois pas du tout (dans le cas par exemple de création detables et de champs qui ne retournent pas de données).

SQL dans 4D

Le développeur peut écrire du code 4D dans n'importe quelle méthode 4D. Il est très aisé de passer descommandes 4D puis d'écrire des commandes SQL. Il suffit simplement de dire à 4D que les lignes de codessuivantes doivent être interprétées comme du code SQL. C'est très similaire au fait de démarrer et arrêter uneboucle avec la commande Boucle et Fin de boucle par exemple.

Voici trois des quatre manières d'invoquer le langage SQL dans du code 4D :

CHERCHER PAR SQL

CHERCHER PAR SQLhttp://www.4d.fr/documentation/4DdocV11/CMF/CMF00942.HTM

Cette commande propose d'effectuer de simples requêtes de typeSELECT tout en maintenant le mécanisme4D de sélection courante. L'exemple ci-dessous démontre comment effectuer une requête sur la table[Customers] et retourner une liste des clients de Californie uniquement. A ce stade, sachez simplementqu'appeler la commandeCHERCHER PAR SQL dit à 4D qu'une requête SQL a été passée dans lesarguments :

3 / 26

Page 4: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

CHERCHER PAR SQL([Customers];"State='CA'")

`La requête SQL standard équivalente est :`SELECT * FROM Customers WHERE State = ‘CA’ ` `Il est aussi possible de définir une destination. Exemple: FIXER DESTINATION RECHERCHE(Into set ;"set1")

CHERCHER PAR SQL([Customers];"State='CA'")

Les commandes Début SQL / Fin SQL

Debut SQLhttp://www.4d.fr/documentation/4DdocV11/CMF/CMF00948.HTMFin SQLhttp://www.4d.fr/documentation/4DdocV11/CMF/CMF00949.HTM

Des requêtes SQL complexes peuvent être écrites via l'éditeur de méthode si elles sont encapsulées entre lescommandesDebut SQL et Fin SQL. On peut aussi exécuter plusieurs requêtes SQL dans un seul bloc àcondition que chacune des requêtes soient séparées par un point virgule (;). Notez qu'il n'y a pas de sélectioncourante créée quand on effectue une requête de cette manière. Les données peuvent être stockées dans desvariables, champs, tableaux et tables. Sauf indication contraire, tous les exemples dans ce documentstockeront les données dans une List Box. Après avoir stockéles données dans l'un de ces objets 4D, ledéveloppeur pourra les manipuler comme il le ferait habituellement.

Voici un exemple :

Debut SQL

SELECT Name FROM Customers INTO <<Column1>>; SELECT State FROM Customers INTO :Column2;

Fin SQL

EXECUTE IMMEDIATE

EXECUTE IMMEDIATEhttp://www.4d.fr/documentation/4DdocV11/CMF/CMF18445.HTM

EXECUTE IMMEDIATE s'utilise à l'intérieur des commandesDebut SQL et Fin SQL, et apporte unénorme avantage : le développeur peut construire sa requêteSQL de manière dynamique. Dans l'exemple ci-dessous, la table et la destination sont toutes deux basées sur les variables$table et $destination. Avantd'exécuter la requête, nous pouvons décider de ce que vont faire les variables. Une fois que la variable$sql_qry contient la requête voulue, elle peut être appelée et exécutée par la commandeEXECUTEIMMEDIATE :

$Table:=Nom du champ(->[Customers]Name)

$destination:="<<Box1>>"

4 / 26

Page 5: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

$sql_qry:="SELECT "+$Table+" FROM Customers INTO "+$destination Debut SQL EXECUTE IMMEDIATE :$sql_qry;

Fin SQL

Le jargon SQL

Quelques dénominations qui seront utilisées dans cette note technique :

Lignes : une ligne contient les données d'un enregistrement qui inclut tous les champs d'une table. Unenregistrement 4D est équivalent à une ligne SQL.

Colonnes : une colonne contient les données contenues dans un champ. Un champ 4D est une colonne SQL.

Tables : une table est une collection de lignes contenant des colonnes. C'est essentiellement la même chosequ'une table 4D.

La figure 1 montre une simple table, ses lignes et ses colonnes.

Figure 1

Commenter le code SQL dépend de la manière dont le code a été écrit. Quand on utilise les commandesDebut SQL et Fin SQL, il faut utiliser /* pour débuter le commentaire et */ pour clore le commentaire.Quand on utiliseODBC EXECUTER et CHERCHER PAR SQL , il faut utiliser la marque ducommentaire standard de 4D, la quote simple fermante (`).

Les espaces sont ignorés dans les requêtes SQL. Elles ne sontpas non plus sensibles à la casse. Ces deuxrequêtes sont identiques :

SELECT * FROM Customers;

et

select * from Customers;

La requête SELECT

5 / 26

Page 6: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Tout comme dans 4D, pour accéder aux enregistrements d'une table, il est nécessaire d'exécuter une requête.Avec SQL, cette requête s'effectue avec la commandeSELECT qui permet des requêtes simples oucomplexes.SELECT en SQL est l'équivalent de la commandeCHERCHER de 4D, équivalentes aussi dansleurs variations d'utilisation.

Attention, gardez à l'esprit que "équivalent" ne veut pas dire "identique" ! En effet, l'algorithme derrièreSELECT est différent de celui exécuté derrièreCHERCHER , mais les détails sur ces différences sortent ducadre de cette note technique.

La figure 2 montre la structure utilisée dans les exemples de cet article.

Figure 2 : Structure d'une base simple Facturation.

SELECTionner tout

La figure 3 montre une table [Customers] basique selon la représentation de l'éditeur de structure de 4D quenous connaissons bien :

Figure 3 : la table Customers

Elle est composée de trois colonnes (3 champs) : Cust_ID, Name et State. Il y a vingt lignes (vingtenregistrements) dans cette table, chacun représentant unclient (Customer) différent. Dans 4D, pour affichertous les enregistrements, on aurait un code comme ci-dessous :

`Affiche tous les enregistrements de la table [Customers]

` TOUT SELECTIONNER([Customers])

6 / 26

Page 7: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

VISUALISER SELECTION([Customers])

Ce n'est pas vraiment une requête, mais la figure 4 montre le résultat affiché dans un formulaire de sortie 4D :

Figure 4 : Utilisation de 4D pour afficher tous les enregistrements des clients (Table Customers)

La requête SQL qui affiche tous les enregistrements est toutaussi peu compliquée que la requête 4D. Mais ledéveloppeur devra s'accomoder du fait qu'il n'y a pas de formulaire de sortie par défaut comme celui appelépar la commandeVISUALISER SELECTION . Dans la suite de cette note technique, tous les résultats derequêtes SQL seront affichés dans une List Box, Box1, sauf avis contraire.

Ci-dessous, la version SQL de la requête 4D pour afficher tous les enregistrements :

`Affiche tous les enregistrements [Customers] dans la list box Box1.

` Debut SQL SELECT * FROM Customers INTO <<Box1>>

Fin SQL

Analyse du code :

Debut SQL, Fin SQL : tout ce qui se trouve entre ces deux lignes est considéré comme du code SQL. Iln'est pas possible d'utiliser une requête du langage 4D dansce bloc, mais les expressions arithmétiques 4Dpeuvent être utilisées comme paramètres d'entrée.

7 / 26

Page 8: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

SELECT : cette commande dit au moteur SQL de 4D que les données doivent être retournées.* : l'astérisque est synonyme de "tout". Dans ce cas, toutes les données de toutes les colonnes de la table sontretournées.

FROM : ce mot-clé SQL désigne la table sur laquelle s'effectue la requête. L'exemple utilise la table[Customers].

INTO : comme mentionné plus tôt, il n'y a pas de formulaire de sortie par défaut à afficher quand on utilisele moteur SQL. C'est pourquoi il est nécessaire de déclarer dans le code où stocker le résultat de la requête àafficher. Dans cet exemple, les données sont stockées dans l'objet List Box "Box1". Notez les<< >>entourant le nom de la variable objet. Vous aurez besoin d'utiliser ces caractères pour passer les valeurs devariables entre le code 4D et le code SQL. En place de<< >>, vous pouvez utiliser les deux points devant lenom de la variable (par exemple:Box1). Par soucis d'être plus visuellement évident, nous préférons utiliserles caractères<< >> dans cette note technique. Ne pas utiliser la clauseINTO <<Box1>> ou INTO :Box1ne grève pas la validité de la requête SQL, mais il n'y a dans cecas aucun retour visuel dans aucune variabledu résultat obtenu.

La figure 5 montre le résultat après exécution du code SQL. Les résultats vont de pair avec ceux de larequête 4D, et tous les enregistrements sont affichés :

Figure 5 : Utilisation du SQL pour afficher tous les enregistrements des clients (Customers).

SELECTionner des colonnes précises

Un avantage de l'utilisation du moteur SQL est de pouvoir limiter le nombre de champs ou de colonnes àinclure et à afficher lors d'une requête. Par exemple, n'afficher que les noms. Avec 4D, le code pourraitsembler identique à celui présenté plus haut, à la différence que le formulaire de sortie n'incluerait que leschamps voulus. En code SQL, l'affichage peut être contrôlé directement dans la requête elle-même. Voyezl'exemple ci-dessous:

8 / 26

Page 9: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

` Affiche les noms des clients (Customers) dans la listbox, Box1.

` Debut SQL SELECT Name FROM Customers INTO <<Box1>>

Fin SQL

Analyse du code :

La seule différence entre le code ci-dessus et celui présenté dans l'exemple précédent est que l'astérisque (*)a été remplacée par le nom d'un champ/colonne précis. Les valeurs des deux autres colonnes dans la table neseront pas affichées. Notez qu'il n'y a pas de modificationsdans le formulaire lui-même. La List Box 4D estcapable d'ajouter ou de supprimer des colonnes en se basant sur le nombre de colonnes inclus dans la requêteSQL. C'est une petite fonctionnalité très maligne et très pratique quand on veut exécuter plusieurs requêtesSQL différentes qui ramènent des résultats différents, et ce dans le même formulaire.

Les résultats sont affichés dans la figure 6 :

Figure 6 : Utilisation du SQL pour afficher seulement la colonne Nom (Name) de la table Client(Customers).

Utiliser ORDER BY pour trier

Vous pourriez avoir besoin de trier les résultats d'une requête SQL selon des conditions spécifiques. Parexemple, un client pourrait vouloir parcourir rapidement les données via une recherche et voudrait que laliste de données soit en ordre alphabétique. Trier les enregistrements s'effectue dans 4D par la commandeTRIER .

TRIERhttp://www.4d.fr/documentation/4DdocV11/CMF/CMF00049.HTM

L'exemple dans ce chapitre utilise la table [Products], dont la structure est présentée dans la figure 7 :

9 / 26

Page 10: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Figure 7 : la table Produits (Products)

Tout d'abord, voici un code exemple montrant comment trier des enregistrements avec les commandes 4D :

`Trie tous les produits alphabétiquement par nom

` TOUT SELECTIONNER([Products]) TRIER ([Products];[Products]Item)

VISUALISER SELECTION([PRODUCTS])

Et voici les données retournées, triées et affichées dans le formulaire de sortie par défaut :voir la figure 8.

Figure 8 : Utilisation de 4D pour trier les produits par ordre alphabétique.

L'équivalent en requête SQL est pratiquement identique pour les mêmes résultats, mais ceux-ci sontretournés dans la List Box :

`Chercher tous les produits et les trier alphabetiquement.

`Affichage des résultats dans la listbox, `Box1. ` Debut SQL SELECT*FROM Products ORDER BY Item INTO <<Box1>>;

Fin SQL

Analyse du code :

10 / 26

Page 11: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

ORDER BY : cette commande ordonne au moteur SQL de trier les résultatsen fonction des argumentspassés. Dans cet exemple, la commande trie les enregistrements par nom. Il est également possible de triersur plusieurs colonnes. Voici un exemple qui effectue un tridans la table [Customers] sur la colonneState,puis sur la colonne Name par ordre alphabétique inverse :

`Cherche tous les clients (customers) et les trie par l'état (State)

`d'où ils viennent puis par leur nom en ordre inverse.

`code 4D : TOUT SELECTIONNER([Customers]) TRIER([Customers];[Customers]State;[Customers]Name;<)

VISUALISER SELECTION([Customers])

`SQL code:

Debut SQL SELECT Name, State FROM Customers ORDER BY State, Name DESC INTO <<Box1>>

Fin SQL

La commandeORDER BY est suivie par le premier paramètre de tri, puis par le second. La figure 9 montrele résultat obtenu par le code SQL. La colonneState (état) est d'abord triée, puis chaque client d'un état esttrié par son nom par ordre alphabétique inverse.

Figure 9 : Clients triés par Etat puis par Nom.Note :A partir de maintenant, les résultats affichés proviendront toujours d'un code SQL, sauf avis contraire.

Utilisation de la clause WHERE pour trouver des enregistrements précis

11 / 26

Page 12: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Lors de la requête sur la table [Customers], il peut être nécessaire de contrôler non seulement ce qui estaffiché, mais aussi ce qui est retourné. La clauseWHERE est utilisée pour définir des conditions de requête.Par exemple, ne retourner que les enregistrements avec un certain prix, ou seulement les clients d'un paysspécifique.

Prenons l'exemple de la requête qui retrouve les clients pour un état particulier, comme la Californie. Lerésultat ressemblerait à ce qui est présenté sur la figure 10.

Figure 10 : Clients de Califormie

Voici le code exécuté pour le résultat affiché dans la figure ci-dessus :

`Trouver seulement les clients de Californie.

`4D code: CHERCHER([Customers];[Customers]State="CA")

VISUALISER SELECTION([Customers])

`SQL code:

Debut SQL SELECT Name,State FROM Customers WHERE State = 'CA' INTO <<Box1>>

Fin SQL

Analyse du code :

La clauseWHERE a besoin d'une colonne et d'un opérateur pour fonctionner. La colonne de notre exempleest State (état), et l'opérateur est le signe égal (=).

Voici une liste des autres opérateurs qui peuvent être utilisés dans une clauseWHERE . Notez que lesvaleurs non-numériques utilisées avecWHERE doivent être entourées du simple guillemet (single quote).Par exemple : 'CA'. Ce n'est pas requis pour les valeurs numériques.

Opérateur Détails

12 / 26

Page 13: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

= Egal <> Différent > Plus grand< Plus petit>= Plus grand ou égal <= Plus petit ou égalBETWEEN Valeurs dans un intervalleIN Valeurs dans un ensemble spécifique LIKE Valeurs qui correspondent (utilisation du jocker *)NOT Rend l'opérateur négatif

Les clause WHERE et ORDER BY utilisées ensemble

Il est possible, et même commun, d'utiliser plusieurs clauses en même temps dans une même requête, commepar exemple les clausesWHERE et ORDER BY. L'ordre d'utilisation de ces clauses est important :WHERE doit être utilisé avant ORDER BY.

Par exemple :

`Affiche tous les clients qui ne sont pas de Californie,

`et les trier par état en ordre alphabétique inverse.

`4D: CHERCHER([Customers];[Customers]State#"CA") TRIER([Customers];[Customers]State;<)

VISUALISER SELECTION([Customers])

`SQL:

Debut SQL SELECT Name, State FROM Customers WHERE NOT State = 'CA' ORDER BY State DESC INTO <<Box1>>

Fin SQL

Analyse du code :

Pas de surprise ici. La clauseWHERE est utilisée pour limiter la recherche et la clauseORDER BY estutilisée pour trier le résultat.

La figure 11 montre la list box affichant les données retrouvées :

13 / 26

Page 14: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Figure 11 : Client non-californien avec état trié par ordre inverse

Utiliser plusieurs conditions avec AND et OR

Une situation typique : vous avez besoin de trouver vos plus anciens clients habitant l'est du pays. Vous allezdevoir utiliser plusieurs conditions dans votre recherche. Tout comme dans 4D, il existe les opérateurslogiques AND et OR. Leur implémentation est toutefois légèrement différente. Voyez le code ci-dessous :

`Afficher les produits de type alimentaire coûtant moins de $7.00

`et les trier par ordre ascendant de prix.

`4D code: CHERCHER([Products];[Products]Prod_ID="FOOD@";*) CHERCHER([Products];&;[Products]Unit_Price<7) TRIER([Products];[Products]Unit_Price)

VISUALISER SELECTION([Products])

`SQL code:

Debut SQL SELECT Prod_ID, Item, Unit_Price FROM Products WHERE Prod_ID LIKE 'FOOD%' AND Unit_Price < 7 ORDER BY Unit_Price INTO <<Box1>>

Fin SQL

Analyse du code :

Dans la seconde ligne de la requête SQL, le fait d'ajouter l'opérateurAND permet au développeur de fairesuivre la première condition de recherche par une seconde, le tout dans la clauseWHERE . La figure 12montre le résultat de la requête :

Figure 12 : Produits alimentaires de moins de $7.00.

14 / 26

Page 15: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Une remarque à propos de l'ordre d'évaluation des opérateurs logiques

Le moteur SQL exécute les opérateursAND avant OR. Les requêtes simples qui n'ont qu'une ou deuxconditions de recherche ne sont évidemment pas affectées par ce principe. Mais les requêtes plus complexesqui contiennent plus de deux conditions peuvent retourner potentiellement un résultat inattendu. Voici deuxexemples qui illustrent le principe de priorité et qui différencient une requêteA OR (B AND C) de (A ORB) AND C :

`Montre tous les clients nommés Jean, ou les clients nommés Brendan de Californie

`A OR (B AND C)

`4D code: CHERCHER([Customers];[Customers]State="CA";*) CHERCHER([Customers]; & ;[Customers]Name="Brendan";*) CHERCHER([Customers]; | [Customers]Name="Jean")

VISUALISER SELECTION([Customers])

`SQL code:

Debut SQL SELECT Cust_ID, Name, State FROM Customers WHERE Name = 'Jean' OR Name = 'Brendan' AND State = 'CA' INTO <<Box1>>

Fin SQL

Analyse du code :

En examinant le code, on remarque que le code SQL utilise une syntaxe de typeA OR B AND C . Puisque lemoteur SQL se préoccupe d'abord des conditions avecAND, il exécute le code comme si c'étaitA OR (BAND C), peu importe que la condition OR soit en première position ou non.La figure 13 montre le résultat de la requête :

Figure 13 : A OR (B AND C)

Dans l'exemple suivant, on force le moteur SQL à évaluer l'opérateurOR en premier en encapsulant lacondition entre parenthèses. Remarquez le code SQL simplifié par rapport au code 4D utilisant desensembles :

`Montre tous les clients de Californie dont le nom est Jean ou Brendan.

`(A OR B) AND C

`4D code:

15 / 26

Page 16: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

CHERCHER([Customers];[Customers]State="CA") NOMMER ENSEMBLE([Customers];"set1") CHERCHER([Customers];[Customers]Name="Jean";*) CHERCHER([Customers]; | ;[Customers]Name="Brendan") NOMMER ENSEMBLE([Customers];"set2") REUNION ("set1";"set2";"set3") UTILISER ENSEMBLE("set3")

VISUALISER SELECTION([Customers])

`SQL code:

Debut SQL SELECT Cust_ID, Name, State FROM Customers WHERE (Name = 'Jean' OR Name = 'Brendan') AND State = 'CA' INTO <<Box1>>

Fin SQL

Analyse du code :

Le code 4D est sensiblement différent dans les deux exemplesprécédents. Tandis que la seule différencedans le code SQL par rapport aux exemples précédents sont simplement les parenthèses. En entourant laclauseOR conditionnelle par des parenthèses, le moteur SQL a évalué d'abord cette conditionOR. Larequête est donc interprétée comme (A OR B) AND C. Le résultat est présenté dans la figure 14 ci-dessous :

Figure 14 : (A OR B) AND C

Autres astuces de sélection

Il est possible de créer temporairement à la volée une nouvelle colonne en effectuant un calcul sur les valeursde la colonne courante et en renommant l'en-tête de la colonne. Cela va stocker le champ en mémoire et necréera pas de champ permanent dans la table 4D. Voici un code exemple :

`Supposons que une TVA à 8.25% et affichons le prix de tous les produits

`4D code: `Avec 4D, vous pourriez créer un formulaire de sortie incluant le champ contenant les valeurs calculées sur les autreschamps. `En code SQL: Debut SQL SELECT Prod_ID, Item, Unit_Price, Unit_Price * 1.0825 AS With_Tax FROM Products INTO <<Box1>>

Fin SQL

16 / 26

Page 17: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Analyse de code :

Nouvelle colonnes contenant des valeurs calculées

En plus de sélectionner les champs Prod_ID, Item et Unit_Price, nous avons une autre colonne,Unit_Price*1,0825. Cette colonne est créée en mémoire pourafficher le coût d'un article après que la TVAde 8,25% ait été appliquée. Bien évidemment, les autres opérateurs arithmétiques sont permis.

Les alias

Donner à une colonne un nom temporaire est aussi connu sous leterme d'alias. Dans la figure 15, la dernièrecolonne est appelée "With_Tax". L'alias a été assigné en utilisant le mot-cléAS tout de suite après la valeurcalculée. Si aucun alias n'avait été défini, la colonne se serait appelée "<expression>".

Figure 15 : avec une colonne temporaire, With_Tax, contenant une valeur calculée

Les fonctions d'aggrégation

Les fonctions d'aggrégation sont utilisées pour calculer les résultats de plusieurs enregistrements et champs.Les fonctions les plus communes sont listées ci-dessous. Notez qu'elle ne sont appliquées qu'à des champsqui contiennent des valeurs non NULL. Soyez également avertis que l'exécution de ces fonctions sur destables contenant des centaines de milliers d'enregistrements est un peu plus lente de quelques secondes quel'exécution du code 4D équivalent. Sur des bases plus petites, la différence en vitesse d'exécution estinsignifiante.

Fonction Description COUNT() Retourne le nombre d'enregistrements dans le champ spécifié. SUM() Retourne la somme des valeurs dans le champ spécifié.AVG() Retourne la valeur moyenne des données dans le champ spécifié.MAX() Retourne la valeur la plus grande dans le champ spécifié. MIN() Retourne la valeur la plus petite dans le champ spécifié.

COUNT()

Voici un exemple qui montre comment utiliser l'une des fonctions d'agrégation,COUNT, pour retourner lenombre d'enregistrements dans la table [Customers] :

`Compte le nombre de clients

17 / 26

Page 18: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

`4D code: TOUT SELECTIONNER([Customers]) $var:=Enregistrements trouves([Customers])

ALERTE("Il y a "+chaine($var)+" clients")

`SQL code:

Debut SQL SELECT COUNT(*) AS TotalCustomers FROM Customers INTO <<Box1>>

Fin SQL

Analyse du code :

Le code ci-dessus compte le nombre d'enregistrements dans la table [Customers], et retourne 20, ce qui sevérifie avec les requêtes exécutées plus tôt dans cette notetechnique et qui renvoient bien ce même nombred'enregistrements.

GROUP BY et HAVING

Gérer les résultats obtenus par les fonctions d'agrégationest un peu différent des exemples vusprécédemment. Deux clauses s'occupent de cela. La première, GROUP BY, groupe les résultats obtenus paragrégation selon les colonnes. Vous trouverez ci-dessous un exemple qui illustre le propos pour la clauseGROUP BY :

`Montre le nombre de commandes pour chaque produit

` Debut SQL SELECT Product_ID, SUM(Quantity) AS All_Units FROM Invoice_Line GROUP BY Product_IDINTO <<Box1>>

Fin SQL

Analyse du code :

La clauseSELECT utilise le GROUP BY pour fournir la quantité totale pour chaque produit. Voyez lafigure 16 qui nous montre le résultat obtenu :

18 / 26

Page 19: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Figure 16 : résultats groupés par Product_ID

La seconde clause,HAVING , est utilisée pour filtrer les données groupées. Elle est précédée de la clauseGROUP BY, comme ORDER BY est précédée de WHERE .

L'exemple ci-dessous montre comment retrouver uniquement les états qui ont plus d'un (1) client :

`Trouve le nombre de clients dans chaque état et affiche seulement les états où

`il y a plus de 1 client

`4D code: ceci sera affiché dans une listbox avec le nombre adéquat de colonnes. TABLEAU ALPHA(2;$state;0) TABLEAU ALPHA(2;$newstate;0) TABLEAU ENTIER($count;0) TABLEAU ENTIER($newcount;0) `Stocke les états individuellement dans un tableau $state. TOUT SELECTIONNER([Customers]) VALEURS DISTINCTES([Customers]State;$state) $var:=Taille tableau($state) `Pour chaque état, compte le nombre de clients.`Si plus de 1 client par état, copier nombre et état `dans tableaux $newcount & $newstate. Pour ($i;1;$var) CHERCHER([Customers];[Customers]State=$state{$i}) INSERER DANS TABLEAU($count;$i;1) $count{$i}:=Enregistrements trouves([Customers]) Si ($count{$i}>1) AJOUTER A TABLEAU($newcount;$count{$i}) AJOUTER A TABLEAU($newstate;$state{$i}) Fin de siFin de boucle`Affiche les résultats dans les colonnes d'une listbox. COPIER TABLEAU($newstate;Column1)

COPIER TABLEAU($newcount;Column2)

`SQL code:

Debut SQL SELECT State, COUNT(Cust_ID) As Customers FROM Customers GROUP BY State HAVING COUNT(Cust_ID)>1 INTO <<Box1>>

Fin SQL

19 / 26

Page 20: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Analyse du code :

La simplicité d'écriture du code SQL, dans ce cas, comparé aucode 4D, est complètement évident :sélectionner les colonnes de la table [Customers], les grouper par état, et retourner uniquement ceux quicomportent plus d'un (1) client. Le résultat final est affiché dans la List Box comme le présente la figure 17 :

Figure 17 : Etats ayant plus d'un client

JOINS (les jointures)

Il est parfois nécessaire de rechercher des enregistrements selon les critères d'une table liée. La manière laplus simple d'effectuer une telle recherche est d'exécuterun JOIN . En langage SQL, les jointures sontdéclarées à l'intérieur de la clause WHERE . Un exemple ci-dessous :

` Affiche tous les clients et leur factures

Debut SQL SELECT Customers.Name, Invoices.Invoice_ID FROM Customers, Invoices WHERE Customers.Cust_ID=Invoices.Cust_ID INTO <<Box1>>

Fin SQL

Avec 4D, un lien relationnel doit exister pour être en mesured'exécuter une requête à travers plusieurstables. Avec SQL, ce n'est pas nécessaire. Tant que les valeurs du champ Cust_ID dans la table [Customers](clients) correspondent à la valeur du champ Cust_ID de la table [Invoices] (factures), une jointure peut êtreeffectuée.

Il est possible de créer plus d'une jointure en utilisant le mot-cléAND. Référez-vous à la figure 2 présentéeplus tôt dans cette note technique pour regarder la structure de la base de données. Les exemples suivantsmontrent comment joindre la table [Customers] à la table [Invoices], la table [Invoices] à la table[Invoice_Line], et la table [Invoice_Line] à la table [Product]. Ensuite, nous cherchons les clients selon desconditions établies pour les tables [Products] et [Invoice_Line] :

` trouve tous les clients qui ont commandé au moins 3 cafés en grain en une fois

` et qui sont en Californie (CA) ou au Tennessee (TN)Debut SQL SELECT Customers.Name, Customers.State, Invoices.Invoice_ID, Products.Prod_ID FROM Customers, Invoices, Invoice_Line, Products WHERE Customers.Cust_ID=Invoices.Cust_ID AND Invoices.Invoice_ID=Invoice_Line.Invoice_ID AND Invoice_Line.Product_ID=Products.Prod_ID AND

20 / 26

Page 21: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Products.Item='Coffee Beans' AND Invoice_Line.Quantity > 3 AND Customers.State IN ('CA', 'TN') INTO <<Box1>>

Fin SQL

La figure 18 affiche le résultat de la requête :

Figure 18 : Résultats de l'utilisation de plusieurs jointures

Sous-requêtes

Une autre façon d'exécuter des recherches sur plusieurs tables est d'utiliser les sous-requêtes. Celles-ci sonten fait des requêtes à l'intérieur de requêtes :

`Trouver toutes les factures avec le code produit FOOD001

`4D code: CHERCHER([Invoice_Line];[Invoice_Line]Product_ID="FOOD001") JOINTURE([Invoice_Line];[Invoices])

VISUALISER SELECTION([Invoices])

`SQL code:

Debut SQL SELECT Invoice_ID FROM Invoices WHERE Invoice_ID IN (SELECT Invoice_ID FROM Invoice_Line WHERE Product_ID = 'FOOD001') INTO <<Box1>>

Fin SQL

Analyse du code :

Le but est de limiter les résultats pour ne montrer que les factures qui contiennent la ligne de facturecorrespondant au produit FOOD001. Pour cela, dans la clauseWHERE , puisqu'il n'y est pas possible dedéfinir cette condition pour la table [Invoices], on insèreune nouvelle clauseSELECT. Incorporer les sous-requêtes de cette manière forme une sous-requête. Si vous regardez le contenu entre les parenthèses -- doncla sous-requête intérieure, en opposition à une requête extérieure --, c'est simplement une requête SELECT.La voici sortie de son contexte pour plus de clareté :

21 / 26

Page 22: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

SELECT Invoice_ID FROM Invoice_Line

WHERE Product_ID = 'FOOD001'

Cette clauseSELECT est exécutée en premier, comme toutes les requêtes internes(inner query), avant lesrequêtes externes (outer query).

Une dernière remarque à propos des sous-requêtes : le nombrede résultats retournés sera zéro, un ouplusieurs. Si c'est un, le développeur peut chercher une égalité (=), un 'supérieur à' (>), un 'est différent de'(NOT IN), etc... Si plusieurs résultats sont retournés, il faut vérifier que la valeur est présente dans cesrésultats (IN).

La commande INSERT

En plus de la commandeSELECT pour chercher des enregistrements dans les tables, il existe descommandes pour créer et modifier des enregistrements. La commande utilisée pour créer des enregistrementsest INSERT. Le fait d'utiliser cette commande permet au développeur decréer un enregistrementcomportant des données pour un ou plusieurs champs dans une table qui existe déjà. Le reste des exemplesdans cette note technique requiert l'utilisation de la basede données fournie en exemple à partir du modeDéveloppement, pour voir les résultats :

`Crée un nouvel enregistrement client dont Cust_ID = C00021, Name = Raleigh et

`State = ‘TN’

`4D code: CREER ENREGISTREMENT([Customers]) [Customers]Cust_ID:="C00021" [Customers]Name:="Raleigh" [Customers]State:="TN"

STOCKER ENREGISTREMENT([Customers])

`SQL code:

Debut SQL INSERT INTO Customers (Cust_ID, Name, State) VALUES ('C00021', 'Raleigh', 'TN')

Fin SQL

Analyse du code :

Dans la première ligne de code, la commandeINSERT requiert le nom des colonnes qui se verront assignéesdes valeurs. Quand on ajoute un enregistrement avec des valeurs dans toutes les colonnes, il n'est pasnécessaire de les spécifier. Nous l'avons fait ici dans un souci de lisibilité.

La seconde ligne de code est celle où les valeurs sont définies, après le mot-cléVALUE . Soyez prudentsquand vous insérez des enregistrements avec la commandeINSERT. Une bonne connaissance des champsde la table, leur nom et leur type, est nécessaire, sinon les données peuvent ne pas être insérées correctement.

22 / 26

Page 23: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Il n'y a pas d'affichage de résultat pour le code donné en exemple ci-dessus. Mais vous pouvez jeter un oeil àla table [Customers] et vous apercevoir qu'un enregistrement a été ajouté dans la table : le client Raleigh.

La commande UPDATE

La commandeUPDATE est utilisée pour la modification des enregistrements déjàexistants dans une table.Dans l'exemple ci-dessous, nous modifions un seul enregistrement. Gardez à l'esprit que cette commande,comme tout autre commande qui modifie les données, est délicate à utiliser parce qu'elle peutpotentiellement rendre les données invalides, dans le sensoù, si les conditions passées à la commande pourque la modification ne soit appliquée qu'aux enregistrements voulus sont mal énoncées, la commandeUPDATE modifiera des enregistrements qui ne devraient pas l'être. Soyez donc prudents et précis !

`Modifie l'enregistrement client en changeant le nom Raleigh en Chris.

`4D Code: CHERCHER([Customers];[Customers]Name="Raleigh") [Customers]Name:="Chris"

STOCKER ENREGISTREMENT([Customers])

`SQL Code:

Debut SQL UPDATE Customers SET Name = 'Chris' WHERE Name = 'Raleigh'

Fin SQL

Analyse du code :

UPDATE : signifie qu'un enregistrement existant va être modifié. Cette commande est suivie deSET.Comme son nom l'indique, SET fixe la nouvelle valeur à appliquer à l'enregistrement ou aux enregistrements.

La seconde ligne du code SQL établit les conditions : ne modifier le nom que pour les enregistrements dontle champ Name est Raleigh. Vérifiez le résultat de la mise à jour en jetant un oeil aux enregistrements dansla table [Customers].

La commande DELETE

Nul besoin de rappeler que cette commande est de nature à effacer. Elle supprime un ou plusieursenregistrements dans une table. Soyez prudents !

Voici un exemple :

`Supprimer les entrées pour Raleigh dans la table Customers.

23 / 26

Page 24: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

`4D Code: CHERCHER([Customers];[Customers]Name="Raleigh")

SUPPRIMER ENREGISTREMENT([Customers])

`SQL Code:

Debut SQL DELETE FROM Customers WHERE Name = 'Raleigh'

Fin SQL

Analyse du code :

La syntaxe ici est aussi parlante que celle de l'exemple précédent. Tout enregistrement dont la colonne(champs) Name contient la valeur 'Raleigh' sera supprimé.

La commande CREATE TABLE

CREATE TABLE est utilisée pour créer des tables par programmation. Il faut passer le nom de la table etles noms des colonnes. Les colonnes doivent également avoirleur type déclaré. Notez que la possibilité decréer des tables par programmation a été supprimée dans le langage de 4D. Elle était auparavant incluse dansle plug-in 4D Pack, mais la version du plug-in pour 4D v11 SQL ne contient plus la commande quipermettait de créer des tables dans 4D. Par contre, grâce au moteur SQL intégré, cette possibilité existeencore de cette manière :

`Crée une table, Suppliers (fournisseurs), incluant des champs :

`noms, spécialités des produits fournis. Debut SQL CREATE Table Suppliers (S_Name VARCHAR(25), S_Specialty VARCHAR(25))

Fin SQL

Analyse du code :

La première ligne de code est limpide : on déclare la créationde la table [Suppliers]. Tout ce qui vient aprèsentre parenthèses contient les noms des champs et leur type.La figure 20 affiche la nouvelle table. Il existeplusieurs autres types de champs qui pourraient être utilisés. Vous trouverez la liste complète des types dechamps dans le manuel "Mise à jour" de 4D v11 SQL disponible à cette URL :http://www.4d.fr/support/docs/4thdimensionmanuals.html

24 / 26

Page 25: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

Figure 20 : table créée en SQL

La commande ALTER TABLE

Une autre action possible sur les tables est la modificationd'une table elle-même. Cela s'effectue par lacommande ALTER TABLE .

Le mot-clé ADD ajoute une colonne. Un exemple :

`Dans la table [Customers], ajouter une colonne City de type alpha

Debut SQL ALTER Table Customers ADD City VARCHAR(20)

Fin SQL

Analyse du code :

La table [Customers] est mise à jour et affiche maintenant unnouveau champ : City. Ce champ peut êtremanipulé comme tout autre champ 4D ou colonne SQL. La figure 21 montre le nouveau champ dans la table.

Figure 21 : utilisation du SQL pour créer le champ City

Le mot-clé DROP supprime une colonne :

`Supprimer la colonne City dans la table [Customers].

Debut SQL ALTER Table Customers DROP City

Fin SQL

Analyse du code :

25 / 26

Page 26: 4D v11 SQL - introduction au SQL Résumé · 4D v11 SQL - introduction au SQL Par Christopher VISAYA, Technical Support Engineer, 4D Inc. Note technique 4D-200801-02-FR Version 1

L'utilisation de DROP avec la commandeALTER TABLE permet de supprimer une colonne, enl'occurence dans notre exemple, la colonne City. Il n'est pas nécessaire de préciser le type de la colonne.

La commande DROP TABLE

Voici comment supprimer une table :

`Supprimer la table des fournisseurs [Suppliers].

` Debut SQL DROP TABLE Suppliers

Fin SQL

La commande DROP TABLE supprime toute la table. Et c'est une action irréversible.

Conclusion

Cette note technique vous a décrit les utilisations de base du langage SQL dans l'éditeur de méthode 4D, àl'aide de plusieurs exemples de requêtes simples et plus complexes s'appliquant à une seule ou plusieurstables. Le développeur peut utiliser cette note technique comme une introduction au SQL dans 4D. La baseexemple jointe à cet article vous permettra d'expérimenter, tester et écrire du code SQL.

26 / 26