Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

Binay Dreams: La programmation SQL
 
Welcome to binary dreams
cette page peut vous apporter une aide dans vos débuts en programmation SQL
programmer
le HTML 4.0
Dbase 3 +
S Q L



communiquer
Liste de diffusion
forum
Le Chat-box
mailing list
Livre d'or



liens
recherches
liens utiles

Le langage S Q L


Le SQL (Structured Query Language) permet de créer / gérer des bases de données. Les requêtes SQL peuvent être définies dans plusieurs langages de programmation: Dbase, Java etc. d'où l'utilité de connaitre les bases de ces requêtes.


Si vous avez envie d'essayez les exemples sans devoir créer de table. Téléchargez celles qui m'on servit à verifier mes exemples: base_sql.zip
Il vous faut aussi Winzip pour décompresser le fichier.




Sommaire
  • Les différents types de données du SQL
  • Les bases de données sous SQL
  • Manipuler des tables SQL
  • Le verbe SELECT est les clauses
  • La clause FROM
  • La clause WHERE
  • La clause ORDER BY
  • La clause GROUP BY
  • La clause HAVING
  • La clause SAVE TO TEMP
  • La clause DISTINCT
  • Remarques sur le format DATE et les combinaison de clauses
  • La clause WHERE et les PREDICATS
  • Le prédicat BETWEEN
  • Le prédicat LIKE
  • Le prédicat IN
  • Remarques sur les sous-interrogation
  • Le prédicat ANY
  • Le prédicat ALL
  • Le prédicat EXISTS
  • Les fonctions SQL / DBASE 4
  • Les fonctions de DBASE 4
  • Utilisation du verbe SELECT dans la commande INSERT INTO

  • Navigation à l'intérieur du site
     

     



    Introduction

    Pour expliquer le SQL je me base sur Dbase 4 /SQL. Pour pouvoir utiliser SQL sous Dbase 4, vous devez sur la ligne de commande de Dbase tapez la commande: SET SQL ON. pour quitter le mode SQL vous devez taper SET SQL OFF.

    Passons maintenant au petit lexique du SQL. Au début on crée un base données. Dans cette base de données on crée des TABLES, que l'on pourrait apparenter à un fichier en Dbase. Cette table est elle composée de COLONNE que l'on pourrai apparenter à des champs en Dbase.


    Les différents types de données du SQL

    sommaire

    Quand vous créez une table, vous devez specifier le type des données qui entrerons dans les colonnes.
    Les types de données
    Type de donnéeValeur
    CHARToute chaîne de 254 caractères max. entourée de " "
    DATEToute date au format MM/JJ/AA par défaut mais peut etre changé avec SET DATE
    DECIMAL(x,y)Nombre de 19 chiffres max. (x le nombre total de chiffre, y la place du point décimal en partant de la droite
    FLOAT(x,y)idem mais + de chiffres
    INTEGERde - 9999999999 à 99999999999
    LOGICAL.T./.Y. .F./.N.
    NUMERIC(x,y)idem décimal
    SMALLINTde -99999 à 999999



    Les bases de données sous SQL

    sommaire

    Voici toutes les commandes utiles à la création d'une base de données et de ses tables sous SQL

    REMARQUE: faite attention à ne pas oublier le point-virgule!

    Création de bases de données sous SQL
    CommandesValeurs
    CREATE DATABASE <nom de la bdf> ;permet de créer un repertoire correspondant à une nouvelle base de données
    SHOW DATABASE;affiche toutes les bases de données
    START DATABASE;ouvre, initialise une base de données
    STOP DATABASE;ferme une base de données
    DROP DATABASE <nom de la bdf> ;supprime une base de données ( y compris ses tables), une base de données doit être fermée pour pouvoir être éffacée
    CREATE TABLE <nom de la table> (col1 type taille, col2 type taille, etc.);crée une table dans la base de données ouvertes (comme un fichier de base de données en Dbase)
    ALTER TABLE <nom de table> ADD (col1 type taille, col2 type taille, etc);permet d'ajouter une ou plusieur colonnes à la table spécifiée
    DROP TABLE <nom de la table> ;permet de supprimer la table indiquée

    Exemples:

    CREATE DATABASE AMIS;
    START DATABASE AMIS;
    CREATE TABLE FRIENDS (nom CHAR(30), prenom CHAR(30), cpost CHAR(5), ville CHAR(20),age SMALLINT);
    STOP DATABASE;

    Ici nous venons de créer une base de données AMIS (ligne 1).
    On ouvre ensuite cette base de données (ligne 2).
    On y crée une table de nom FRIENDS, qui contient 5 colonnes.(ligne 3)
    On ferme la base de donnée (ligne 4)

    Et voila, vous venez de voir comment créer une base de données en SQL. Nous allons voir maintenant comment manipuler les tables d'une base de données SQL (ici la table s'appelle FRIENDS).


    La manipulation des tables en SQL

    sommaire

    Maintenant si vous avez bien suivi le chapitre précédent vous avez une base de donnée nommée AMIS qui contient une table FRIENDS. Voyons maintenant comment placer des données à l'interieur de cette table.

    Insérer des données dans les tables:

    INSERT INTO <nom de table> [(nom col1, nom col2,...)] VALUES (valeur1, valeur2,...);

    Introduit les valeurs indiquées dans les colonnes spécifiées de la table. Si les colonnes ne sont pas spécifiée, la commande insère à partir de la colonne de gauche. Voici un exemple avec notre table FRIENDS, sans spécification de colonnes:

    INSERT INTO friends VALUES ('Lebout','Thierry','7033','Cuesmes',19);

    Copie d'un fichier de données vers une table SQL:

    LOAD DATA FROM [chemin d'accès] <nom de fichier> INTO TABLE <nom de la table>

    Charge les informations du fichier spécifié (Dbase par défaut) dans une table ayant la même structure de fichier que le fichier source. On peut définir le type de fichier en ajoutant à la fin [TYPE DBASE2\DIF\RPD\ETC...]. Voici un exemple, le fichier amigo.dbf doit exister pour que la commande fonctionne, ne l'oubliez si vous voulez essayez cette commande!

    LOAD DATA FROM C:\DBASE4\amigo.dbf INTO TABLE friends;

    Copie d'une table SQL vers un fichier de données:

    sommaire

    UNLOAD DATA TO [chemin] <nom de fichier> FROM TABLE <nom de table>

    Charge le contenus de la table vers un fichier (par défaut Dbase 4) qui doit être de même structure que la source (on peut aussi spécifier le type de fichier, voir ci-dessus). L'exemple suivant passe les données de friends vers amigo:

    UNLOAD DATA TO C:\DBASE4\amigo.dbf FROM TABLE friends;

    Afficher le contenus d'une table:

    SELECT <nom de col1>,<nom de col2>,etc. FROM <nom de table> ;

    Affiche le contenus des colonnes sélectionnées. Si on remplace les noms de colonnes par le symbole * on affiche tous. L'exemple affiche le contenus de notre table FRIENDS. Essayez de rajouter une ligne puis regardez à nouveaux:

    SELECT * FROM friends;

    Remplacer le contenus d'une table:

    UPDATE <nom de table> SET <nom de col1> = <nouvelle valeur1> etc... [WHERE <condition>];

    Remplace les valeurs existantes des colonnes par les nouvelles valeurs indiquées. La clause WHERE permet d'ajouter une ou plusieurs conditions. Exemple, la colonne nom et la colonne cpost seront remplaçée si le nom est Franck:

    UPDATE friends SET prenom='Albert', cpost='1602' WHERE nom='Lebout';

    Supprimer une ligne de la table:

    sommaire

    DELETE FROM <nom de table> WHERE <nom col> = <valeur>

    Supprime une ligne de la table. Exemple:

    DELETE FROM friends WHERE nom='Lebout';


    Le verbe SELECT et les clauses

    sommaire

    Les clauses sont des mots indiquant une table ou un groupe de table sur lesquelles le verbe doit porter. Ici le verbe SELECT permet d'interroger la base de données

    Je vous conseille de bien remplir votre table friends, histoire pouvoire essayez les exemples qui vont suivre. Nous allons maintenant interroger notre table friends.

    La clause FROM

    sommaire

    Elle permet d'indiquer que la commande porte sur la table dont le nom est spécifié juste après. Exemple:

    SELECT * FROM friends;

    La clause WHERE

    sommaire

    La clause WHERE permet d'indiquer une ou plusieurs conditions. Dans l'exemple suivant on verra à l'écran les information des personnes de nom Lebout ET dont le cpost est 7033:

    SELECT * FROM friends WHERE nom='Lebout' AND cpost='7033';

    La clause ORDER BY

    sommaire

    Cette clause permet de spécifier l'ordre dans lequel les informations seront affichées. Il est possible de voir apparaître les lignes d'une table dans l'ordre ascendant, option ASC (par défaut) ou descendant option DESC. Exemple, on affiche tous les noms par ordre descendant:

    SELECT * FROM friends ORDER BY nom DESC;

    La clause GROUP BY

    sommaire

    Elle permet de grouper les lignes d'une table ayant les même valeurs. Généralement associèe aux fonctions statistiques (SUM,AVG etc.), elle permet d'effectuer des totaux pour les lignes de même valeur. Pour l'exemple qui suit vous devez avoir plusieur personnes de même noms dans votre table:

    SELECT nom,SUM(age) FROM friends GROUP BY nom;

    Dans cet exemple on groupe les lignes par nom et on effectue la somme des âges des personnes portant le même nom, pour chaque nom.

    La clause HAVING

    sommaire

    Cette clause est généralement utilisée si la clause GROUP BY a été spécifiée. En effet, HAVING permet de définir une condition sur l'ensemble des lignes groupées par la clause GROUP BY, au même titre que la clause WHERE permet de définir une conditions sur les lignes de la tables. Exemples:

    SELECT nom,SUM(age) FROM friends GROUP BY nom HAVING SUM(age)>20;

    Dans cet exemple on groupe les lignes par nom et on effectue la somme des âges des personnes portant le même nom, pour chaque nom. Mais en plus il faut, pour être affiché, que la somme de ces âges soient supérieur à 20.

    La clause SAVE TO TEMP

    sommaire

    Cette clause permet de créer une nouvelle table a partire de la commande select. Le résultat de la sélection est enregistré dans une table pour laquelle il est possible de définir un nom et éventuellement des nouveaux nom pour les colonnes. Cette disparaîtra au changement de base de données.

    Avec l'option KEEP, un fichier Dbase (avec extention .DBF) est créé, de sorte qu'il est possible de manipuler directement les résultats à partir de Dbase 4. Syntaxe:

    SAVE TO TEMP <nom de table> (nom col1, nom col2, etc)] [KEEP];

    Exemple:

    SELECT nom,prenom,age FROM friends ORDER BY prenom DESC SAVE TO TEMP friends_2(nom_per,prenom,age);

    Cette exemple crée donc une table temporaire FRIENDS_2, dans laquelle ont trouve le nom, le prenom et l'age. Remarquez que la 1er colonne change de nom au passage.

    La clause DISTINCT

    sommaire

    Cette clause permet d'afficher toutes les lignes distinctes de la table. Les informations redondantes ne seront pas affichées (les lignes identiques). Exemples:

    SELECT DISTINCT nom FROM friends;

    Tous les nom différent de la tables seront affichés


    Remarques sur le format DATE et les combinaison de CLAUSES:

    sommaire

    Pour utiliser le format date comme condition avec un WHERE on place la date entre { et }. Exemple, imaginons que nous aurions dans notre table friends une colonne annee, représentant par exemple une date de naissance:

    SELECT nom,prenom,age FROM friends where annee >={01/01/85};

    Ici la condition est donc que le contenu de la colonne annee soit plus grand ou égal au 01/01/85.

    Il existe un ordre pour les clauses:

    1. La clause GROUP BY vient immédiatement après la clause FROM, s'il n'existe pas de WHERE, sinon elle vient après cette dernières;

    2. La clause HAVING se place toujours après la clause GROUP BY;

    3. La clause ORDER BY est toujours la dernière clause dans une command SELECT. Mais doit être avant la clause SAVE TO TEMP si cette dernière existe;

    4. La clause DISTINCT doit toujours se placer avant la liste de colonnes de la table à sélectionner.

    La clause WHERE et les PREDICATS

    sommaire

    Voici des autres prédicats (autre que <, >, <=, >=, <>) permettant de définir une conditions dans la clause WHERE:

    ALL - ANY - EXISTS - BETWEEN - IN - LIKE


    Le prédicat BETWEEN

    sommaire

    Le prédicat BETWEEN permet de définir une borne inférieure et une borne supérieure utilisée pour une condition, BETWEEN veux dire ENTRE borne1 et borne2, l'utilisation de NOT permet de faire une condition "si le nombre ne se trouve pas dans les limites de BETWEEN". Exemples:

    SELECT nom,prenom FROM friends WHERE age BETWEEN 17 AND 25;
    SELECT nom,prenom FROM friends WHERE age NOT BETWEEN 17 AND 25;

    Le prédicat LIKE

    sommaire

    Le prédicat LIKE permet de faire une comparaison entre une colonne et une chaine de caractères. Remarque, on peut utiliser les symboles suivants:

    • % qui représente une chaine de caractere ( * en MS-DOS)
    • _ qui représente un caractère ( ? en MS-DOS)
    On peut également utiliser le NOT pour inverser la condition. Exemple pour afficher tous les nom commençant par 'LE':

    SELECT nom,prenom FROM friends WHERE nom LIKE 'LE%';

    Exemple pour afficher tous les nom ne commençant pas par la lettre j de 6 lettres:

    SELECT nom,prenom FROM friends WHERE nom NOT LIKE 'j_ _ _ _ _';

    Le prédicat IN

    sommaire

    Ce prédicat permet de tester si l'information d'une colonne se trouve dans une liste de valeurs, celles-ci étant indiquées derrière le prédicat lui- même. Cette liste se trouve entre parenthèses et chaque éléments entre cote ou double cote séparés par une virgule, ou par OR. On peut également effectuer le test inverse grace à NOT. Exemples:

    SELECT nom,prenom FROM friends WHERE nom IN ('lebout','dehut');
    SELECT nom,prenom FROM friends WHERE nom NOT IN ('lebout','dehut');

    Remarques sur les sous-interrogation

    sommaire

    La commande SELECT permet d'interroger une base de données; c'est une commande d'interrogation. Un verbe SELECT dans une commande SELECT est donc une sous-interrogation. Les 3 prédicats suivant sont généralement utilisé dans une sous-interrogation (ANY - ALL - EXISTS).

    Syntaxe d'une sous interrogation:

    SELECT <liste de colonnes> FROM <table> WHERE (SELECT... sous-interrogation);

    Le prédicat ANY

    sommaire

    Le prédicat ANY ressemble beaucoup au prédicat IN. La différence étant que la liste de valeurs est fournie implicitement par une sous- interrogation. La comparaison de l'information avec la liste doit être vraie pour au moins une des valeurs.

    Pour cet exemple on doit créer une nouvelle table, ayant en commun avec la table friends une colonne. Imaginons une table cops avec comme colonne commune nom et une nouvelle table rue, placez enfin dans la nouvelle colonne nom un nom déjà présent dans la table friends, plusieurs fois avec des rues differentes. Placé maintenant d'autre nom présent dans la table friends. Voici un exemple de sous-interrogation:

    SELECT nom,prenom FROM friends WHERE nom = ANY (SELECT nom FROM cops WHERE rue='rue des iris');

    Dans cet exemple on affiche l'information (nom et prenom) si le nom est égal au nom d'une personne habitant à la rue des iris dans la table cops. On remarque que le lien entre les deux tables est fait avec la colonne nom.

    Le prédicat ALL

    sommaire

    Si ANY retourne vrai si un élément de la liste satisfait à la condition, ALL demande à ce que TOUTE la liste réponde à la condition. Exemple:

    SELECT nom,prenom FROM friends WHERE nom <> ALL (SELECT nom FROM cops WHERE rue='rue de wasmes');

    Ici on affichera le nom et prenom des personnes de la table friends, n'habitant pas la rue de wasmes.

    Le prédicat EXISTS

    sommaire

    Le prédicat EXIST permet de vérifier l'existence d'une information dans une sous-interrogation. Pour chaque information existant dans la sous- interrogation, la commande SELECT de l'interrogation affichera les informations des colonnes demandées.

    L'exemple suivant fait entrer en jeux le terme d'ALIAS, il s'agit de la marque que l'on place devant des noms de colonnes identique de table différente pour les différencier.

    SELECT nom,prenom FROM friends WHERE EXISTS (SELECT nom FROM cops WHERE friends.nom = auto.nom);

    Ici on affichera le nom et prenom des personne de la table friends, dont le nom se trouve également dans la table cops.
    On peut également utiliser l'opérateur logique NOT pour effectuer la condition inverse (non-existence) donc NOT EXISTS.


    Les fonctions SQL/DBASE IV

    sommaire

    Dans une commande SELECT il est possible d'utiliser des fonctions mises à la disposition de l'utilisateur par SQL/DBASE 4. Ces fonctions (au nombre de six) effectuent des opérations sur les informations des colonnes désignées à la suite du verbe SELECT, fonctions qui peuvent également porter sur un groupe de lignes défini par une condition éventuelle.

    Les fontions SQL/DBASE 4
    FonctionsActions
    AVG (<nom d'une colonne>)Effectue la moyenne arithmétique des informations désignées
    COUNT(DISTINCT <nom de colonne>)Comptabilise le nombre de ligne différentes (clause distinct) de la colonne spécifiée
    COUNT(*)Comptabilise le nombre de ligne de la table. Ce nombre comprend d'éventuelles valeurs égale.
    SUM(<nom de colonne>)Renvoie la somme des information de la colonne spécifiée
    MAX(<nom de colonne>)Renvoie un nombre correspondant à la valeur maximale de la colonne spécifiée
    MIN(<nom de colonne>)Renvoie un nombre correspondant à la valeur minimale de la colonne spécifiée


    Exemples:

    sommaire

    Voici plusieurs exemples reprenant les fonction ci-dessus:

    SELECT AVG(age) FROM friends;
    SELECT SUM(age) FROM friends;
    SELECT COUNT(*) FROM friends;
    SELECT MIN(age) FROM friends;
    SELECT MAX(age) FROM friends;
    SELECT COUNT(DISTINCT nom) from friends;


    Les fontions Dbase 4

    sommaire

    La pluspart des fonctions DBASE IV sont utilisable sous SQL. Il est tout a fait permis de combiner des fonctions SQL/DBASE 4 et les fonctions propre à Dbase 4, exemples:

    CDOW( ) retourne le jour de la semaine indiquée en toutes lettre:
    SELECT annee,CDOW(annee) FROM friends;

    LOWER( ) convertit une chaine de caractères majuscules en minuscules:
    SELECT nom,LOWER(prenom) FROM friends;


    Utilisation du verbe SELECT dans la commande INSERT INTO

    sommaire

    Le verbe SELECT peut également être utilisé dans la commande INSERT INTO de la manière suivante:

    INSERT INTO <nom table> [(nom col1, nom col2)] SELECT [(nom col1, nom col2)] FROM <nom table 2> [WHERE <condition>];

    Il doit y avoir correspondance entre les différents noms de colonnes des deux tables. Exemple:

    Après avoir créer une table friends2 on fait:
    INSERT INTO friends2 (nom,prenom,age,cpost) SELECT (nom,prenom,age,cpost) FROM friends WHERE nom='Lebout';

    Ici entre les informations de la table friends dans la table friends2 si le nom = Lebout





    retour au sommaire






    Créé par Thierry Lebout, etudiant en programmation à l'ICET PS Cuesmes (Mons)
    pour contacter le webmaster :Thierry Lebout