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
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. SQL Server 2019 - SQL, Transact SQL
  3. SQL, Transact SQL
Extrait - SQL Server 2019 - SQL, Transact SQL Conception et réalisation d'une base de données (avec exercices pratiques et corrigés)
Extraits du livre
SQL Server 2019 - SQL, Transact SQL Conception et réalisation d'une base de données (avec exercices pratiques et corrigés)
6 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 
 
Date  
constante           date              heure 
'201205'            5 Décembre 2020   00:00:00:000 
'05/12/2020'        idem              idem 
'5-12-20 8:30'     idem              8:30:00:000 
'8:30:2'            1er Janvier 1900  08:30:02:000 
'5.12.2020 8:30pm' 15 Décembre 2020  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 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 fonction, la valeur de l’expression est le résultat retourné par la fonction.

Exemple

expression                      valeur 
SQRT(9)                         3 
substring('ABCDEF',2,3)         'BCD' 

Les variables

Les variables peuvent être employées en tant qu’expression...

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.

(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, 'Duchemin'...

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 la valeur auto-incrémentée de la table Fiches 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). 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 les fichiers en téléchargement...

Correction des exercices

1. La suppression des données

USE Location;  
  
-- supprime également les données présentes dans Fiches et dans 
LignesFic en raison du ON DELETE CASCADE 
DELETE FROM clients;  
DELETE FROM articles;  
DELETE FROM grilleTarifs;  
DELETE FROM tarifs;  
DELETE FROM gammes;  
DELETE FROM categories;  
  
DBCC CHECKIDENT('Fiches', RESEED, 1000) WITH NO_INFOMSGS; 

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,  NULL, DEFAULT);  
INSERT INTO fiches VALUES(2, DEFAULT,      NULL, DEFAULT);  
  
-- gammes  
   
INSERT INTO gammes VALUES('PR', 'Matériel...