C’est quoi le SQL ?

sql

 

sql
SQL by phatplus from flaticon.com

Au sommaire :

 

Définition de SQL

Allez soyons très scolaire pour une fois et commençons par la définition de SQL. SQL veut dire Langage de requête structurée. (en anglais : Structured Query Language). Bon avec ça, vous en savez plus mais je ne suis pas sûr que vous avez compris de quoi on parle.

Alors essayons de regarder de quoi il s’agit précisément.

 

Petit rappel sur les bases de données.

Si vous avez lu les articles sur les bases de données (c’est quoi une base de données ? et comment ça marche une base de données ?), vous avez compris que le plus simple pour stocker des données c’est d’utiliser un Système de Gestion des Bases de Données (SGBD).

Les données sont stockées de façon structurée et c’est le moteur de base qui s’occupe de l’enregistrement et de la mise à disposition des données. C’est donc le système (moteur) qui va gérer la lecture et  l’écriture. En conséquence, il suffit de dire au moteur ce qu’il doit faire et il s’occupe de tout.

L’avantage d’utiliser une base de données, c’est que le point d’entrée pour tous les logiciels est le même et  les logiciels s’adressent directement au moteur de base de données (SGBD). Comme dans le schéma ci-dessous :

 

Schéma avec utilisation d’une base de données

 

A quoi ça sert le SQL ?

Comme dans la vie, pour que des personnes puissent se comprendre, elles doivent parler le même langage et bien en informatique, c’est pareil.

Pour que les différents logiciels et le moteur de base de données puissent se comprendre, ils utilisent un langage appelé SQL.

Ce langage est complet. Il va être utilisé pour :

  • Lire les données,
  • Ecrire les données,
  • Modifier les données,
  • Supprimer les données
  • Il permettra aussi de modifier la structure de la base de données :
    • Ajouter des tables,
    • Modifier les tables,
    • les supprimer
    • Ajouter, ou supprimer des utilisateurs,
    • Gérer les droits des utilisateurs,
    • Gérer les bases de données  : en créer de nouvelles, les modifier, etc …

Comme vous pouvez le voir, les possibilités sont nombreuses.

Ce langage est structuré (comme son nom l’indique), c’est à dire que la syntaxe est toujours la même et respecte des normes très précises.

 

Les avantages du SQL

Comme nous l’avons vu au-dessus, un des principal intérêt du SQL est la portabilité. Cela veut dire qu’un logiciel qui utilise une base de données peut fonctionner avec n’importe quelle base de données. Il suffira de lui indiquer avec quelle base de données il doit dialoguer.

Le gros avantage, c’est que si pour une raison X, on doit changer la base, il suffit de modifier la relation entre le logiciel et la base de données. Et hop, le tour est joué !

Je m’adresse ici, à tous les étudiants en informatique:

  • Du fait de son utilisation sur un très grand nombre de bases de données, une bonne connaissance de SQL est souvent un gros plus sur un CV.
  • Un autre avantage, est que ce langage étant un langage à part entière, il existe des formations spécifiques et qu’un spécialiste SQL peut très bien intégrer une équipe de développeurs programmant dans différents langages de programmation.

 

Les inconvénients

Le principal inconvénient est qu’il faut à nouveau apprendre un langage pour utiliser correctement le SQL.
Un autre inconvénient, mais qui n’est pas lié directement au SQL, est que certains éditeurs de logiciels n’hésitent pas à proposer des versions de SQL différentes du standard pour proposer de nouvelles fonctionnalités ou être le plus près possible de leur base de données. Cela à pour effet de diminuer la portabilité entre les logiciels et les bases de données. (la portabilité est le fait de pouvoir inter changer certaines parties d’un système : le logiciel ou la base de données).

 

Les principales instructions du SQL

Instruction SELECT

L’instruction SELECT va interroger la base de données pour fournir le contenu de certaines tables en fonction de critères.

Dans l’instruction SELECT, on peut :

  • Choisir les champs à afficher,
  • Choisir les tables d’ou proviennent les données,
  • faire des tris pour afficher les résultats dans un ordre choisi,
  • regrouper certaines valeurs en fonction de critères,
  • réaliser des calculs (des sommes par exemple), des tris pour affiner les résultats,
  • etc …

Vous l’aurez compris, l’instruction SELECT est sans aucun doute la plus utilisée.

Syntaxe de l’instruction SELECT

Syntaxe des principales de l’instruction SELECT et de ses principales options :
(toutes les options écrites en italique sont facultatives)

SELECT champ1[, champ2, champ…] Instruction et la liste des champs à afficher (le champ * remplace tous les champs)
FROM table1[, table2, table…] Extraire à partir de la ou les tables …
WHERE condition [AND/OR/NOT condition2, …] N’afficher que les valeurs dont les conditions sont respectées
GROUP BY champ, expression Regrouper les données en fonction du champ ou de l’expression (cela est utilisé pour les calculs)
ORDER BY champ, expression Trier les résultats en fonction de champs ou d’expression
LIMIT x Limiter les résultats aux x premiers .

Exemples

Voici quelques exemples de « SELECT »
(j’ai volontairement mis en GRAS et ROUGE les mots réservés du langage SQL)

Instructions SQL Explications
SELECT nom, prenom
FROM tb_salaries
Extrait les valeurs des champs « nom » et « prenom » de toutes les personnes présentes dans la table « tb_salaries »
SELECT *
FROM tb_salaries
Extrait les valeurs de tous les champs de toutes les personnes présentes dans la table « tb_salaries »
SELECT *
FROM tb_salaries
ORDER BY date_naissance
idem au-dessus mais en triant le résultat sur la valeur du champs « date_naissance »
SELECT *
FROM tb_salaries
WHERE date_sortie is null
ORDER BY date_naissance
idem au-dessus mais en sélectionnant uniquement les salariés présents (ceux dont la date de sortie est nulle) et toujours en triant sur la valeur du champs « date_naissance »
SELECT *
FROM tb_salaries s, bulletins_salaire bs
WHERE s.date_sortie is null AND bs.salaire_net_mensuel < 10000
AND s.id_salarie = bs.id_salarie
ORDER BY date_naissance
Attention : ça se corse, on fait une requête sur 2 tables : il faut faire ce qu’on appelle une jointure. La jointure est le lien entre plusieurs tables.

La jointure dans ce cas est la condition  : s.id_salarie=bs.id_salarie, elle indique à la requête qu’il ne faut prendre les résultats que des champs qui correspondent entre ces champs.

Notez au passage qu’en tant que bon informaticien fainéant, j’ai ajouté un alias sur les tables. En effet, j’aurai pu écrire la jointure sous la forme : tb_salaries.id_salarie=bulletins_salaire.id_salarie mais en ajoutant une lettre (« s » pour « id_salarie ») ou un groupe de lettre (« bs » pour « bulletins_salaire »), la requête comprend que lorsque j’utilise ces abréviations, je veux parler des tables.

on pourrait continuer longtemps comme ça tellement les possibilités sont nombreuses.

Nous allons nous arrêter ici pour l’instant.

 

Instructions INSERT, UPDATE et DELETE

Ces instructions, vous l’aurez compris vont permettre d’ajouter, de modifier ou de supprimer des données.

Instructions SQL Explications
INSERT INTO tb_salaries (nom, prenom), (« ARMSTRONG », « Louis ») Ajoute le salarié « Louis ARMSTRONG » dans la table « tb_salarie ». Dans ce cas, je précise les champs dans lesquels il faut mettre les valeurs passées en paramètres.
INSERT INTO tb_salaries (« ARMSTRONG », « Neil », « 1930/08/05 ») Ajoute le salarié « Neil ARMSTRONG » avec sa date de naissance dans la table « tb_salarie ». Les champs n’étant pas spécifiés, ils doivent forcément être donnés dans l’ordre de la structure de la table.
UPDATE tb_salaries
SET date_naissance = « 1901/08/04 »
WHERE nom= »ARMSTRONG » AND prenom= »Louis »
Comme au-dessus, j’ai oublié de renseigner la date de naissance de Louis Armstrong, je vais modifier l’enregistrement en indiquant la date de naissance sur l’enregistrement dont le nom et le prénom correspondent aux critères.
DELETE FROM tb_salaries OUPS : je viens de supprimer tous les enregistrements de la table : tb_salaries !
DELETE FROM tb_salaries
WHERE nom= »ARMSTRONG » AND prenom= »Louis »
C’est mieux de ne supprimer qu’un seul salarié. (ou plusieurs en fonction des critères de la classe WHERE)
Je pense que vous avez compris le principe. Nous explorerons les différentes possibilités dans la partie Exemples.

 

Deux instructions importantes : COMMIT ou ROLLBACK

Ces 2 instructions permettent d’écrire définitivement toutes les actions effectuées précédemment (toutes les actions qui modifient les données ou la structure des tables).

L’instruction COMMIT valide définitivement toutes les opérations en attente. Par exemple, si vous avez effectué plusieurs ajouts dans des tables, ces données ne seront réellement écrites qu’après l’instruction COMMIT.

Et vous l’aurez compris, l’instruction ROLLBACK annule toutes les opérations qui n’auraient pas encore été écrites par un COMMIT. Dans l’exemple ci-dessus, j’écrivais « OUPS : je viens de tout supprimer » : pas de panique, tapez ROLLBACK et tout redevient comme avant … OUF !

 

Attention toutefois, ces 2 instructions ne sont pas prises en compte pour toutes les bases de données. En effet, certaines « petites bases de données » n’acceptent pas ces instructions. Par contre, toutes les bases professionnelles autorisent ces fonctions.

 

Autres instructions :  CREATE TABLE, ALTER TABLE, DROP TABLE

Et enfin, pour terminer voici les instructions qui permettent de créer, de modifier et de supprimer des tables. Je vous ai mis des exemples de CREATE TABLE et d’ALTER TABLE dans les exemples que vous pourrez retrouver dans la 2ème partie de cet article.

 

 

Exemples de requêtes SQL

Pour tout bien comprendre, rien ne vaut des exemples.

Dans la 2ème partie, je vous propose des exemples concrets.

La 2 ème partie de cet article est en cours de rédaction. Revenez dans quelques jours …

 

 

 

Comme d'habitude, tous les commentaires sont les bienvenus.
Inscrivez-vous à la lettre d'information. Celle-ci vous parviendra dès la parution de nouveaux articles. Vous trouverez la zone d'inscription à la lettre d'information en haut à droite de l'écran.
 
Et enfin, pour toutes vos questions techniques, utilisez le forum. D 'autre utilisateurs pourront vous répondre et vous aider. Cliquez ici pour accéder au forum...

23 réponses pour “C’est quoi le SQL ?”

    • Bonjour Goumou,
      est-ce que tu as un environnement pour tester les requêtes ou il faut que je fasse un article sur comment faire pour en installer un ?
      A bientôt

  • Bonjour,
    Avec de tels explications cela pârait simple et non rebutant !!
    Merci pour cette vulgarisation et cette première approche.
    J’attends avec impatience la suite de cette article !

    Bravo et merci.

    • Bonjour Sabrina,
      je suis en train de rédiger des nouveaux articles. Ceux-ci devraient sortir avant la fin novembre.
      Patience …
      A bientôt

    • Bonjour,
      oui, je suis en train de terminer un autre projet et je pense que je vais pouvoir m’y remettre avant la fin mai.
      A bientôt

    • Bonjour Caroline,
      oui, c’est normal parce que je n’ai pas eu le temps de les faire. Mais chose promise, chose due : je m’en occupe dans les jours qui viennent.
      A bientôt

      • bonjour suite à la demande de certains pour crée leurs base de données
        je disais donc . qu’une petite mise en garde peut pas faire de mal ici .

        je parle ici des injections de code sql et de leurs dangers pour une base de données .
        sans toute fois trop en dire pour des raison bien évidente de sécurité.

        attention cette exemple reste uniquement éducatifs .
        l’article 321-1 du code pénal. punie le piratage frauduleux d’au moins deux ans
        d’emprisonnement et de 60 000 euros d’amende.

        1 quelles sont les conséquences d’une injection sql ?
        2 l’attaque par injection sql est l’une des failles les plus communes
        sur un site internet. il est donc primordial de la comprendre
        pour s’en protéger. depuis 1998 et jusqu’à lors les attaques par injection sql.

        restent la faille de sécurité la plus fréquente sur les site internet.
        pour cause une trop grande méconnaissance du sujet et un manque de
        sensibilisation des développeurs web à la sécurité dans sa globalité.

        la divulgation d’information confidentielle. étant donné que les bases de données
        contienne en règle générale des données à caractères sensibles.

        empreinte des mots de passe et vecteur de salage.
        e-mail information bancaires . la possibilité d’une authentification
        fallacieuse. car si une mauvaise commande peut être exécuté à la place
        de la commande attendue. rien n’empêche une élévation de privilège
        mal attentionné.

        l’essentiel d’une attaque par injection sql s’accomplit
        en plaçant un méta caractère.
        dièse ou dollar ou deux tirets dans l’entrée destinée aux données.

        pour ensuite placer une commande qui sera interprété en plus la la
        requête initiale prévue par le système.

        les différents types d’attaques par injection sql.
        injection sql en aveugle.

        sql qui soumet des modifications de requêtes en aveugle à la base de
        donnée. l’objectif de cette approche est de déterminer la réponse en fonction
        du retour de l’application absence de données.
        message d’erreur ou délais de réponse de la base.
        cette attaque est principalement utilisée quand une application est configurée
        pour afficher des message d’erreur générique.

        il est aisé d’envisager une requête testant l’existence de l’id d’un utilisateur.
        puis grâce à une condition if d’exiger du moteur d’attendre quelques
        seconde s’il n’existe pas.

        ce type d’attaque par injection sql est relativement compliquée
        mais pas impossible. elle sert en règle générale en phase de reconnaissance.
        pour définir le moteur sql employé.
        ou pour se faire une idée du schéma de la table de la base.
        ou pour contrôler si un enregistrement existe par des tests sur les
        clés primaires.

        injection sql par l’erreur . error sqli est une méthode d’exploitation
        qui vise au moyen de soumission de requêtes sql erronées.
        à récupérer des informations sur le modèle de la base.
        donnée grâce aux messages d’erreurs natifs du moteur de base de données.

        injection sql par union. union sqli est une exploitation basée sur
        l’utilisation de l’opérateur union. pour combiner différents jeux de résultats
        de plusieurs instruction select en un seul jeu de données. ce type d’attaque
        par injection sql.

        sert à infiltrer très rapidement de fortes volumétries de données d’une application.

        injection sql par sous requête et empilement. stacked queries sqli.
        est de loin l’attaque la plus dangereuse pour une infrastructure.
        elle permet d’exécuter plusieurs instructions dans la même requête.

        pour étendre les possibilités de l’injection sql initiale.
        une requête par empilement offre un très grand niveau de contrôle
        à un attaquant. ce type d’attaque par injection sql.
        permet à l’attaquant de ne pas exécuter la requête d’origine et de la remplacer
        par une nouvelle requête sql. il pourra à partir de là faire ce qu’il souhaite.
        le risque le plus grand est que l’environnement de la base de données.

        puisse avoir accès à des commandes comme xp-shellcmd qui permettent
        d’exécuter du code shell directement via une procédure stockée.

        voilà pour la petite info bonne de prendre en contre quand l’on veut
        crée une base de données . afin dans comprendre les risque et voir
        surtout comment sans protéger. sur ceux bonne soirée

        mal

      • bonjour très bon sujet que cela . mais peut tu faire un article
        sûr les injections de code sql et leurs danger pour une base de données.
        cela ne semble important de savoir cela pour les personnes qui débute
        dans le domaine. sûr ceux très belle explication comme toujours
        de ta part . merci pour la petite introduction de se sujet
        bien sympathique. au plaisir et belle journée à toi.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *