C’est quoi le 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 qu’une des méthodes la plus simple pour stocker des données c’est d’utiliser un Système de Gestion des Bases de Données (SGBD). (Il existe d’autres méthodes mais ce n’est pas le sujet de cet article).
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 les parties suivantes, je vous propose des exemples concrets.
C’est quoi le SQL ? – Partie 2 : Exemple de requête SQL pour apprendre.
Salut, je veux bien des exercices de bases du langage spl
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
Quelqu’un pourrait m’envoyer le lien de la deuxième partie là ou il y’a les exercices SVP ? Merci.
Bonjour Yassine,
je n’ai pas le temps de rédiger la suite pour l’instant, désolé
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 Cyril et merci pour le commentaire très sympa.
C’est en cours de rédaction mais je manque de temps.
A bientôt
je découvre, c’est trés intéressant. bonne continuation
Bonsoir,
ou est ce que l’on introduit les instructions que vous avez mentionné svp ? il nous faut un logiciel ? !
Bonjour Sabrina,
je suis en train de rédiger des nouveaux articles. Ceux-ci devraient sortir avant la fin novembre.
Patience …
A bientôt
Bonsoir, la suite va t-elle bientôt être disponible?
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,
je ne vois pas les exemples SQL, est ce normal?
cordialement
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
le nom de l’auteur svp pour une ref
Bonjour Ahlem,
pour les références : mettre uniquement le nom du site ou le lien vers la page.
Merci,
A bientôt
bref et concis, j’suis content. j’attend impatiemment l’exemple pour pouvoir créer ma propre base de donnée!
Bonjour AK47,
je suis très débordé en ce moment, mais dès que je peux, je le fais.
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
Excellent, comme d’hab quoi… Merci pour ce partage !! 😉
À bientôt
Merci Mathieu,
A bientôt
Encore une belle explication. Et cette fois-ci sur le SQL
Merci
Merci Olivier,
je vais bientôt mettre en ligne les exemples de requêtes SQL.
A bientôt
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.