Le langage de requête structuré est un langage de base de données standard qui est utilisé pour créer, maintenir et récupérer la base de données relationnelle. Voici quelques faits intéressants sur SQL.
- SQL n’est pas sensible à la casse. Mais il est recommandé d’utiliser les mots-clés (comme SELECT, UPDATE, CREATE, etc) en lettres majuscules et d’utiliser les choses définies par l’utilisateur (comme le nom de la table, le nom de la colonne, etc) en lettres minuscules.
- Nous pouvons écrire des commentaires en SQL en utilisant « – » (double trait d’union) au début de n’importe quelle ligne.
- SQL est le langage de programmation des bases de données relationnelles (expliquées ci-dessous) comme MySQL, Oracle, Sybase, SQL Server, Postgre, etc. D’autres bases de données non relationnelles (également appelées NoSQL) comme MongoDB, DynamoDB, etc n’utilisent pas SQL
- Bien qu’il existe une norme ISO pour SQL, la plupart des implémentations varient légèrement dans la syntaxe. Nous pouvons donc rencontrer des requêtes qui fonctionnent dans SQL Server mais pas dans MySQL.
Qu’est-ce qu’une base de données relationnelle ?
Une base de données relationnelle signifie que les données sont stockées ainsi que récupérées sous la forme de relations (tables). Le tableau 1 montre la base de données relationnelle avec une seule relation appelée STUDENT qui stocke ROLL_NO, NAME, ADDRESS, PHONE et AGE des étudiants.
Étudiant
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
1 | RAM | DELHI | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9652431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | DELHI | 9156768971 | 18 |
Tableau 1
Voici quelques terminologies importantes qui sont utilisées en termes de relation.
Attribut : Les attributs sont les propriétés qui définissent une relation. par exemple ; ROLL_NO, NAME etc.
Tuple : Chaque ligne de la relation est connue sous le nom de tuple. La relation ci-dessus contient 4 tuples, dont l’un est présenté comme :
1 | RAM | DELHI | 9455123451 | 18 |
Degree : Le nombre d’attributs dans la relation est connu comme le degré de la relation. La relation STUDENT définie ci-dessus a le degré 5.
Cardinalité : Le nombre de tuples dans une relation est connu sous le nom de cardinalité. La relation STUDENT définie ci-dessus a une cardinalité de 4.
Colonne : La colonne représente l’ensemble des valeurs d’un attribut particulier. La colonne ROLL_NO est extraite de la relation STUDENT.
ROLL_NO
Les requêtes pour traiter la base de données relationnelle peuvent être des catégories comme:
Langage de définition des données : Il est utilisé pour définir la structure de la base de données, par exemple : CREATE TABLE, ADD COLUMN, DROP COLUMN et ainsi de suite.
Langage de manipulation des données : Il est utilisé pour manipuler les données dans les relations. par exemple ; INSERT, DELETE, UPDATE et ainsi de suite.
Langage de requête de données : Il est utilisé pour extraire les données des relations. par exemple ; SELECT
Donc, nous allons d’abord considérer le langage de requête de données. Une requête générique pour extraire d’une base de données relationnelle est:
- Select Attribute_List FROM R1,R2….RM
- ]
- ];
Une partie de la requête représentée par l’énoncé 1 est obligatoire si vous voulez extraire d’une base de données relationnelle. Les déclarations écrites à l’intérieur sont facultatives. Nous allons examiner la combinaison de requêtes possible sur la relation présentée dans le tableau 1.
Cas 1 : Si nous voulons récupérer les attributs ROLL_NO et NAME de tous les étudiants, la requête sera :
SELECT ROLL_NO, NAME FROM STUDENT;
ROLL_NO | NAME |
RAM | |
RAM | |
2 | RAMESH |
3 | SUJIT |
4 | SURESH |
Cas 2 : Si nous voulons récupérer le ROLL_NO et le NOM des étudiants dont le ROLL_NO est supérieur à 2, la requête sera :
SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO | NAME |
3 | SUJIT |
4 | SURESH |
CASE 3 : Si nous voulons récupérer tous les attributs des étudiants, nous pouvons écrire * au lieu d’écrire tous les attributs comme :
SELECT * FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO | NOM | ADDRESS | PHONE | AGE |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | DELHI | 9156768971 | 18 |
CASE 4 : Si nous voulons représenter la relation dans l’ordre croissant par AGE, nous pouvons utiliser la clause ORDER BY comme :
SELECT * FROM STUDENT ORDER BY AGE;
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
1 | RAM | DELHI | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9652431543 | 18 |
4 | SURESH | DELHI | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
Note : ORDER BY AGE est équivalent à ORDER BY AGE ASC. Si nous voulons récupérer les résultats dans l’ordre décroissant de l’AGE, nous pouvons utiliser ORDER BY AGE DESC.
CASE 5 : Si nous voulons récupérer des valeurs distinctes d’un attribut ou d’un groupe d’attributs, DISTINCT est utilisé comme dans :
SELECT DISTINCT ADDRESS FROM STUDENT;
ADDRESS
DELHI
GURGAON
ROHTAK
Si DISTINCT n’est pas utilisé, DELHI sera répété deux fois dans le jeu de résultats. Avant de comprendre GROUP BY et HAVING, nous devons comprendre les fonctions d’agrégation en SQL.
FONCTIONS D’AGRÉGATION : Les fonctions d’agrégation sont utilisées pour effectuer des opérations mathématiques sur les valeurs de données d’une relation. Certaines des fonctions d’agrégation courantes utilisées en SQL sont :
- COMPTER : La fonction Count est utilisée pour compter le nombre de lignes dans une relation. ex;
SELECT COUNT (PHONE) FROM STUDENT;
COUNT(PHONE)
- SUM : La fonction SUM est utilisée pour ajouter les valeurs d’un attribut dans une relation. Par exemple;
SELECT SUM (AGE) FROM STUDENT;
SUM(AGE)
De la même manière, MIN, MAX et AVG peuvent être utilisés. Comme nous l’avons vu plus haut, toutes les fonctions d’agrégation ne retournent qu’une seule ligne.
AVERAGE : Elle donne les valeurs moyennes des tupples. Elle est également définie comme la somme divisée par les valeurs de comptage.
Syntaxe:AVG(attributaire)
OR
Syntaxe:SUM(attributaire)/COUNT(attributaire)
La syntaxe mentionnée ci-dessus permet également de récupérer la valeur moyenne des tupples.
MAXIMUM:Il extrait la valeur maximale parmi l’ensemble des tupples.
Syntaxe:MAX(attributaire)
MINIMUM:Il extrait la valeur minimale parmi l’ensemble des tupples.
Syntaxe:MIN(attributaire)
GROUPE PAR : Le group by est utilisé pour regrouper les tuples d’une relation en fonction d’un attribut ou d’un groupe d’attributs. Il est toujours combiné avec une fonction d’agrégation qui est calculée sur le groupe. par exemple;
SELECT ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);
Dans cette requête, SUM(AGE) sera calculé mais pas pour la table entière mais pour chaque adresse. c’est-à-dire ; somme d’AGE pour l’adresse DELHI(18+18=36) et de la même manière pour les autres adresses également. La sortie est :
ADDRESS | SUM(AGE) |
DELHI | 36 |
GURGAON | 18 |
ROHTAK | 20 |
Si nous essayons d’exécuter la requête donnée ci-dessous, il en résultera une erreur car bien que nous ayons calculé SUM(AGE) pour chaque adresse, il y a plus d’un ROLL_NO pour chaque adresse que nous avons regroupée. Il ne peut donc pas être affiché dans le jeu de résultats. Nous devons utiliser des fonctions d’agrégation sur les colonnes après l’instruction SELECT pour donner un sens à l’ensemble de résultats chaque fois que nous utilisons GROUP BY.
SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);
NOTE : Un attribut qui ne fait pas partie de la clause GROUP BY ne peut pas être utilisé pour la sélection. Tout attribut qui fait partie de la CLAUSE GROUP BY peut être utilisé pour la sélection mais ce n’est pas obligatoire. Mais on pourrait utiliser des attributs qui ne font pas partie de la clause GROUP BY dans une fonction d’agrégation.
Quiz sur SQL