Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. SQL Server 2022
  3. Les ordres du SQL
Extrait - SQL Server 2022 SQL, Transact SQL - Conception, réalisation et utilisation d'une base de données (avec exercices pratiques et corrigés)
Extraits du livre
SQL Server 2022 SQL, Transact SQL - Conception, réalisation et utilisation d'une base de données (avec exercices pratiques et corrigés)
4 avis
Revenir à la page d'achat du livre

Les ordres du SQL

Les bases du langage SQL

1. Les expressions

Dans la plupart des syntaxes Transact-SQL, il est possible d’utiliser des expressions ou des combinaisons d’expressions pour gérer des valeurs ou pour tirer parti de la programmabilité du langage. Les expressions peuvent prendre différentes formes :

Les valeurs constantes

Exemple

Caractère      'AZERTY', 'Ecole Nantaise d''Informatique'  

Les chaînes de caractères sont entourées d’apostrophes. S’il doit y avoir une apostrophe dans la chaîne de caractères, il est nécessaire d’en mettre deux pour ne pas le confondre avec la fin de la chaîne de caractères. 

Numérique      10, -15.26, 1.235e-5 

Les valeurs numériques peuvent être écrites avec des chiffres en utilisant le point pour séparer la partie entière de la partie décimale. Il est possible d’utiliser la notation scientifique en utilisant le e avant la puissance de :

Date  
constante            date              heure 
'231205'             5 Décembre 2023   00:00:00.000 
'05/12/2023'         5 Décembre 2023   00:00:00.000 
'05-12-23 8:30'      5 Décembre 2023   08:30:00:000 
'8:30:2'             1 Janvier 1900    08:30:02:000 
'5.12.2023 8:30pm'   5 Décembre 2023   20:30:00:000  

Le format français jj/mm/aaaa est l’un des formats possibles pour les dates. 

Binaire         0x05,  0xFF,  0x5aef1b 
Nulle           NULL 

Les données binaires doivent être données en hexadécimal et sont préfixées par 0x.

Les noms de colonne

Un nom de colonne pourra être employé comme expression, la valeur de l’expression étant la valeur "stockée" de la colonne.

Les fonctions

On peut utiliser comme expression n’importe quelle...

Les instructions du Data Manipulation Language

Le langage de manipulation de données ou DML (Data Manipulation Language) est composé des instructions permettant la gestion, la visualisation et l’extraction des lignes des tables et des vues.

1. L’insertion de lignes

L’insertion de lignes dans une table, ou au travers d’une vue selon certaines conditions, se fait par la commande INSERT.

Les contraintes sont contrôlées et les triggers sont déclenchés lors de l’exécution de la commande. La forme "INSERT ..... VALUES ....." crée une seule ligne, alors que "INSERT ..... SELECT ....." permet de créer éventuellement plusieurs lignes.

Syntaxe

INSERT [INTO] nom_objet [(col,...)]{DEFAULT VALUES|VALUES 
(val,...)|requête| EXECUTE procedure} 

nom_objet

Nom valide de table ou de vue.

(col,...)

Liste des colonnes à valoriser. Les colonnes non citées prendront la valeur par défaut ou NULL si la colonne n’a pas de valeur par défaut. Si la liste est omise, toutes les colonnes devront être associées à une valeur.

Il est préférable de nommer la liste des colonnes valorisées afin d’éviter de se tromper dans l’ordre des colonnes.

DEFAULT VALUES

Toutes les colonnes citées prendront leur valeur par défaut ou NULL si elles n’en ont pas.

VALUES(val, ...)

Liste de valeurs composée d’expressions constantes, des mots-clés NULL ou DEFAULT, ou de variables. Il doit y avoir autant de valeurs que de colonnes à valoriser, du même type, et dans le même ordre.

requête

Instruction SELECT renvoyant autant de valeurs, dans le même ordre et du même type que les colonnes à valoriser. Cette forme de syntaxe permet d’insérer plusieurs lignes en une seule opération.

procedure

Nom d’une procédure stockée locale ou distante. Seules les valeurs des colonnes renvoyées par un ordre SELECT contenu dans la procédure valoriseront les colonnes concernées par l’INSERT.

Exemples

NULL et valeurs par défaut

INSERT INTO Clients VALUES(138, 'Dubois', 'Zoé', '12/07/1998', 
'Tours', '0777666555', '0413223140'); 
INSERT INTO Clients VALUES(142...

Les vues

SQL Server permet la gestion d’objets associés aux tables : les vues (VIEWS). Une vue est une table virtuelle, c’est-à-dire un objet ayant la même utilisation qu’une table par rapport au langage de manipulation de données, à quelques restrictions près, mais n’occupant pas d’espace disque pour les données. Une vue ne "stocke" que la requête correspondant à l’extraction.

Les intérêts d’utilisation d’une vue sont multiples :

  • Simplification des structures des tables. Certaines tables peuvent comporter de nombreuses colonnes avec des noms et des types peu pratiques à manipuler. Une vue fournira à l’utilisateur les mêmes données dans une forme simplifiée.

  • Réutilisation de requêtes. Lorsque les requêtes sont souvent exécutées (jointures, calculs), une vue permettra de stocker l’instruction et de l’utiliser plus simplement.

  • Sécurité d’accès. Il est possible de cacher des lignes et des colonnes aux utilisateurs en ne mettant à leur disposition que des vues de projection ou de restriction à la place des tables initiales.

La modification des données au travers d’une vue n’est autorisée que si une seule table correspondant à la vue est modifiée et si la requête de la vue n’utilise pas de calculs.

Une vue est définie à partir d’une requête de type SELECT. Cette requête est enregistrée dans la base sous un nom (le nom de la vue). Dès que la vue est définie, elle est utilisée de la même façon...

Exercices

1. La suppression des données

Supprimez toutes les données présentes dans la base de données et réinitialisez les valeurs auto-incrémentées des tables Fiches et Modeles afin de pouvoir réexécuter ce script à chaque fois que vous aurez besoin de réinitialiser votre jeu d’essai.

Le ON DELETE CASCADE positionné sur une contrainte d’intégrité référentielle vous permet de limiter le nombre de requêtes à effectuer.

2. L’insertion du jeu d’essai

Insérez le jeu d’essai présenté dans l’exercice L’identification des clés primaires et des clés secondaires du chapitre Le modèle relationnel.

3. Le test des contraintes d’intégrité

Essayez d’insérer un enregistrement qui viole l’une des contraintes (clé primaire, intégrité référentielle, unicité et vérification) ainsi que la valeur obligatoire. Testez l’ensemble des contraintes présentées dans l’exercice La création des tables du chapitre Implémentation des bases de données.

4. La traduction de l’algèbre relationnelle en requêtes SQL

Transformez les requêtes écrites en algèbre relationnel dans l’exercice L’algèbre relationnelle du chapitre Le modèle relationnel, en requêtes SQL.

5. L’écriture de requêtes SQL

Pour effectuer les requêtes suivantes, il est conseillé de compléter votre jeu d’essai en exécutant le script jeuEssaiAdditionnel.sql présent dans...

Correction des exercices

1. La suppression des données

USE Location;  
  
ALTER TABLE LignesFic DROP CONSTRAINT fk_lignesFic_fiches; 
ALTER TABLE Articles DROP CONSTRAINT fk_articles_modeles; 
DELETE FROM LignesFic; 
TRUNCATE TABLE Fiches; 
TRUNCATE TABLE Modeles; 
DELETE FROM Articles; 
DELETE FROM Clients; 
DELETE FROM GrilleTarifs; 
DELETE FROM Gammes; 
DELETE FROM Categories; 
ALTER TABLE LignesFic ADD CONSTRAINT fk_lignesFic_fiches FOREIGN 
KEY(noFic) REFERENCES Fiches(noFic) ON DELETE CASCADE; 
ALTER TABLE Articles ADD CONSTRAINT fk_articles_modeles FOREIGN 
KEY(noModele) REFERENCES Modeles(noModele); 

2. L’insertion du jeu d’essai

-- clients  
 
INSERT INTO clients VALUES(1, 'Albert', 'Anatole', 'Rue des acacias', '61000', 
'Amiens');  
INSERT INTO clients VALUES(2, 'Bernard', 'Barnabé', 'Rue du bar', 
'01000', 'Bourg en Bresse');  
INSERT INTO clients VALUES(3, 'Dupond', 'Camille', 'Rue Crébillon', 
'44000', DEFAULT);  
INSERT INTO clients VALUES(4, 'Desmoulins', 'Daniel', 'Rue descendante', '21000', 
'Dijon');  
INSERT INTO clients VALUES(5, 'Ernest', 'Etienne', 'Rue de l''échafaud', '42000', 
'Saint Étienne');  
INSERT INTO clients VALUES(6, 'Ferdinand', 'François','Rue de la convention', 
'44100', DEFAULT);  
INSERT INTO clients VALUES(9, 'Dupond', 'Jean', 'Rue des mimosas', 
'75018', 'Paris');  
INSERT INTO clients VALUES(14, 'Boutaud', 'Sabine', 'Rue des platanes', '75002', 
'Paris');  
  
-- fiches  
  
INSERT INTO fiches VALUES(14, GETDATE()-15, GETDATE()-13, 'SO');  
INSERT INTO fiches VALUES(4,  GETDATE()-13, NULL, DEFAULT);  
INSERT INTO fiches VALUES(1,  GETDATE()-12, GETDATE()-10, 'SO');  
INSERT INTO fiches VALUES(6, GETDATE()-11, NULL, DEFAULT);  
INSERT INTO fiches VALUES(3, GETDATE()-10, NULL, DEFAULT);  
INSERT INTO fiches VALUES(9, GETDATE()-10, NULL, 'RE');  
INSERT INTO fiches VALUES(1, GETDATE()-3...