Vous êtes sur la page 1sur 74

1

ENSEIGNEMENT SUPERIEUR ET UNIVERSITAIRE


INSTITUT SUPERIEUR DE COMMERCE
ISC-GOMA

QUESTION APPROFONDIE D’INFORMATIQUE DE GESTION


AVEC SQL Server

Dispensé par Ir. Héritier Kangela NT

ANNEE ACADEMIQUE 2020-2021

Ir. Héritier K. SQL Server- L1 Info Isc-Goma 2021-2022


i

Les Objectifs
1. Comprendre des notions de SQL SERVER.
2. Maitriser les Aspects du langage SQL sous SQL SERVEUR
3. Ecrire et lire des Requêtes SQL simples et complexes.
4. Interroger efficacement une Base des données Relationnelle conçue dans SQL Server
5. De Programmer en SQL SERVER

PLAN DU COURS
CHAP.I. INTRODUCTION GENERALE
CHAP II. LA SYNTAXE DU LANGAGE SQL et LANGAGE SQL COMME LANGAGE DE
DEFINITION DES DONNEES
CHAP III. LANGAGE SQL COMME LANGAGE DE MANIPULATION DES DONNEES.
CHAP.IV. SQL COMME LANGAGE D'INTERROGATION ET CONTROLE DES DONNEES
CHAP.V. LA PROGRAMMATION ET GESTION RESEAU EN SQL SERVER

Ir. Héritier K. SQL Server- L1 Info Isc-Goma 2021-2022


ii

BIBLIOGRAPHIE
1. Livres
 Cristian Soutou, SQL pour Oracle : Application avec Java, Php et XML, Eyrolles
, Paris, 2006.
• Cristian Soutou, Apprendre SQL avec MySQL Eyrolles, 3ieme Edition, Paris , 2008.
• Jérôme GABILLAUD, SQL Server 2008 Express: Administrez et développez vos bases
de données, Eyrolles, Paris , octobre 2009
• Rudi Bruchez, OPTIMISER SQL, Dimensionnement, supervision, performances du
moteur et du code SQL, Dunod, Paris, 2008, ISBN 978-2-10-053750-1
2. Cours
• Cyril Gruau, Notes de Cour: SQL Server 2000: Analysis Services et DTS, 2014
• Tony Archambeau, Cours SQL : Base du langage SQL et des bases de données, 2014
3. Autres Sources
• Articles en ligne sur Developpez.com. (2005a). LE SQL de A à Z : Le simple ( ?) SELECT
et les fonctions SQL. (http : // sql.developpez.com/ sqlaz/ select).
• Articles en ligne sur Developpez.com. (2005b). LE SQL de A à Z : Les jointures, ou
comment interroger plusieurs tables. (http : // sql.developpez.com/ sqlaz/ jointures).
• Articles en ligne sur Developpez.com. Les fonctions dans
SQL (http://sqlpro.developpez.com/cours/sqlaz/fonctions/).
• http://blog.dbi-services.com/il-tait-une- fois-sql-server/

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


1

CHAP.I. INTRODUCTION GENERALE


1.0. BREVE HISTORIQUE DU LANGAGE SQL ET LE SQL SERVER
1.0.1 LE SQL SERVER
Bien qu'il ait été initialement Co-développé par Sybase et Microsoft, Ashton-Tate a également
été associé à sa première version, sortie en 1989. Cette version est sortie sur les plates-formes
Unix et OS/2. Depuis, Microsoft a porté ce système de base de données sous Windows et il est
désormais uniquement pris en charge par ce système.
En 1987, Microsoft et Sybase annoncent leur partenariat technique et marketing. De cette union
est né en 1989, SQL Server 1.0 en 16 bits sur OS/2. Puis, 2 ans plus tard, la version 1.1 sort.
Avec l’arrivée des Système d’exploitation Windows NT (NT 3.1 en 1993), en 1993 sort la version
SQL Server 4.21. Depuis cette version, Microsoft attribut à chaque projet un nom de code. Cette
version avait pour nom de code : SQLNT.
Puis en 1995, sous le nom de code SQL95, sort SQL server 6.0 et enchaine l’année suivante avec
la version 6.5 dont le nom code est Hydra.
Le projet Sphink, abouti en 1998 à SQL Serveur 7.0 et sous le nom de code Plato, sort en 1999
SQL serveur 7.0 OLAP Tools.
En 2000, la version 8.0 de SQL Serveur sort sous le nom de SQL Server 2000 et ayant eu le nom
de code Shiloh et est la première version à pouvoir être lancé sur un environnement 64 bits.
SQL server 2005 (nom de code Yukon) est le successeur de SQL Server 2000 et à pour version
9.0. Elle sort en même temps que Visual Studio 2005 et inclus nativement la manipulation de
données en XML. Il permet également d’exposer des données à travers des web services en
utilisant des paquets TDS encapsulé dans des requêtes SAOP. L’outil SQL Server Management
Studio (SSMS) est également inclus dans les versions payantes et permet d’administrer les
différents moteurs SQL Server.
En 2008, Microsoft sort la version 10.0 sous le nom SQL Server 2008 (nom de code Katmai).
Cette version vise à rendre la gestion des données d’auto-tuning, auto-organisation et auto-
maintenance avec le développement de SQL Server Always On technologies, afin d’être le plus
près possible du zéro temps d’arrêt. D’autres évolutions sont également présentes comme le
FILESTREAM et les types de données géographiques.
Les 2 derniers nés sont SQL Azure (version 10.25 – nom de code Matrix) et SQL server 2008 R2
(version 10.5 – nom de code Kilimanjaro). SQL Azure est la base de données utilisée pour l’offre
de Cloud Computing : Windows Azure (externalisation des ressources informatiques d’une
entreprise vers des datacenters distants).

Ir. Héritier K. SQL Server- L1 Info Isc-Goma 2021-2022


2

On utilise la base de données comme service. SQL server 2008 R2 propose un ensemble
d’améliorations connu sous le nom d’AMM (Application and Multi-server Management) visant
à réduire le coût et la complexité de la gestion des serveurs de bases de données et applications.
SQL 2008 R2 a également un ensemble de nouveaux outils comme Power Pivot pour Excel et
SharePoint, Master Data Services, StreamInsight, ReportBuilder 3.0 ou encore Reporting
Services Add-in pour SharePoint.
La version 2008 de SQL Server (nom de code Katmaï) est sortie en août 2008. La version mineure
2008 R2 est sortie en 2010.
La version 2012 de SQL Server est sortie en avril 2012.
La version 2014 de SQL Server est sortie le 1 er avril 2014 avec un moteur « in memory »
complémentaire au moteur relationnel.
La version 2016 de SQL Server est actuellement disponible sous forme de bêta test (RC 2.1)
Lors du développement de la version 2005, le projet était à l'époque l'un des plus grands projets
informatiques du monde. Plus de 1 600 développeurs ont participé au codage du noyau et l'on
estime que plus de 10 000 autres personnes y ont travaillé de près ou de loin (Interactions homme-
machine, documentation, traduction...)
1.0.2 Brève Historique du langage SQL
En 1970, Edgar Frank Codd (E.F. CODD), Directeur de recherche du centre IBM de San José,
invente le modèle relationnel qui repose sur une algèbre relationnelle. Ce modèle provoque une
révolution dans l’approche des bases des données.
En 1977, création du langage SEQUEL (Structured English Query Language) et mise en place
du Système R, prototype de base de données reposant sur la théorie de CODD.
SEQUEL continue de s’enrichir pour devenir SQL (Structured Query Language).
C’est IBM, à tout seigneur tout honneur, qui, avec System-R, a implanté le modèle relationnel au
travers du langage SEQUEL (Stuctured English as QUEry Language), rebaptisé par la suite SQL
(Structured Query Language).
La première norme (SQL1) date de 1987. Elle était le résultat de compromis entre constructeurs,
mais elle était fortement influencée par le dialecte d’IBM.
SQL2 a été normalisée en1992. Elle comporte de nombreuses parties (concepts objets, entrepôts
de données, séries temporelles, accès à des sources non SQL, réplication des données, etc.).
NB. : SQL est désormais un langage incontournable pour tout SGBD moderne.
Par contre, bien qu’une norme existe, on assiste à une prolifération de dialectes propres à chaque
produit : soit des sous-ensembles de la norme (certaines fonctionnalités n’étant pas implantées),
soit des sur-ensembles (ajout de certaines fonctionnalités, propres à chaque produit).

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


3

1.1. Qu’est-ce qu’un SQL SERVER ?


SQL Server est un Système de Gestion de Base de Données Relationnelle (SGBDR), ce qui lui
confère une très grande capacité à gérer les données tout en conservant leur intégrité et leur
cohérence.
SQL Server est chargé de :
 Stocker les données,
 Vérifier les contraintes d’intégrité définies,
 Garantir la cohérence des données qu’il stocke, même en cas de panne (arrêt brutal) du
système,
 Assurer les relations entre les données définies par les utilisateurs.
SQL server est un système de gestion de base de données relationnelle et utilise pour ces requêtes
le langage Transact-SQL (aussi connu sous le nom T-SQL). Ce langage est compatible avec le
PL/SQL d’Oracle et prend en charge les procédures stockées et les triggers. SQL Server permet
de gérer des bases de données transactionnelles (OLTP – OnLine Transaction Processing) et
décisionnelles (OLAP- OnLine Analytical Processing). Les bases de données sont contenues dans
des fichiers sur le serveur et portent par défaut les extensions suivantes :
• MDF (Main Database File) pour le premier fichier de données
• NDF (Next Database File) pour les autres fichiers de données
• LDF (Log Database File) pour les fichiers du journal de transaction
Microsoft commercialise ce système de plusieurs manières ayant chacun son adaptation aux
différents types d’entreprise sous forme d’éditions.
1.1.1 Les différentes éditions, leurs caractéristiques et les licences
Dans ce chapitre, nous nous basons sur les éditions de production de SQL Server 2014.
Edition Entreprise : Destiné aux grandes entreprises ou ayant besoin de l’ensemble des services
et outils de la plate-forme SQL Server 2014.
Edition Standard : Destiné aux petites et moyennes entreprise n’ayant pas besoin de toutes les
fonctionnalités qu’offre la l’édition Entreprise. Il existe également la version SQL Server
Standard for Small Business pour les PME de moins de 75 postes de travail.
Edition Workgroup : Destiné à de petits projets départementaux à fonctionnalités limitées.
Edition Express : Version gratuite redistribuable pour des applications embarquées ou des
besoins sommaires en matière de base de données pour des applications sur serveur avec peu
d’utilisateurs.
Edition Compact : Base de données embarquées

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


4

L’édition développeur est la même que l’édition Entreprise mais ne peut pas être mise sur un
environnement de production.
Il existe une version d’évaluation de 180 jours pour pouvoir effectuer des tests et voir toute la
panoplie de fonctionnalités de +SQL Server.
Les différentes éditions ont également des caractéristiques (limites) matériels et logiciels dont
voici un petit tableau non exhaustif des 5 principales caractéristiques. Ces différences sont
également dans chaque composant serveur.

1 pétaoctet (Po) = 1 024 To


1.1.2 Les Licences de SQL
SQL Server supporte 3 types de licences qu’on appelle CALs (Licence d’Accès Client en français)
:
Licence par utilisateur : Chaque personne physique se servant d’une application utilisant SQL
Server est considérée comme un utilisateur. Le nombre de connexion à la base est limité à ce
nombre maximum d’utilisateur de licence définie.
Licence par périphérique : Chaque périphérique physique (PC, serveur, portable, Tablet PC,
etc..) accédant directement ou indirectement à SQL Server est considéré comme un utilisateur de
la base de données
Licence par processeur : SQL Server utilise le nombre de processeurs pour mesurer le nombre
de licence et peut accepter un nombre indéfini d’utilisateurs. La solution idéale pour des
applications Web.
Le choix du type de licence à définir dépend de l’architecture que l’on souhaite mettre en place
suivant l’utilisation des bases de données du serveur.
1.2. Mode de fonctionnement Client/serveur
Toutes les applications qui utilisent SQL Server pour gérer les données, s’appuient sur une architecture
client/serveur. L’application cliente est chargée de la mise en place de l’interface utilisateur. Cette
application s’exécute généralement sur plusieurs postes clients simultanément. Le serveur, quant à lui,
est chargé de la gestion des données, et répartit les ressources du serveur entre les différentes demandes
(requêtes) des clients. Les règles de gestion de l’entreprise se répartissent entre le client et le serveur.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


5

On peut distinguer trois cas :


• Les règles sont entièrement implémentées sur le client, appelé alors client lourd. Cette
solution permet de libérer des ressources au niveau du serveur, mais les problèmes de
mise à jour des clients et de développement d’autres applications se posent.
• Les règles sont entièrement définies sur le serveur, le client est alors un client léger. Cette
solution permet d’obtenir des clients qui possèdent peu de ressources matérielles, et
autorise une centralisation des règles ce qui rend plus souples les mises à jour. Cependant
de nombreuses ressources sont consommées sur le serveur et l’interaction avec
l’utilisateur risque d’être faible, puisque l’ensemble des contraintes est vérifié lorsque
l’utilisateur soumet sa demande (requête) au serveur.
• Les règles d’entreprises sont définies sur une tierce machine, appelée Middle Ware, afin
de soulager les ressources du client et du serveur, tout en conservant la centralisation des
règles.
1. 3. Les plates-formes possibles
Il est important de distinguer deux cas : d’un côté les plates-formes possibles pour le client et de
l’autre les plates-formes pour le serveur. Les plates-formes clientes présentées ici sont les postes
sur lesquels les outils d’administration SQL Server peuvent être installés. Il ne s’agit pas des
postes qui hébergent une application qui se connecte à une instance SQL Server pour gérer les
données. D’une façon synthétique, les outils clients d’administrations peuvent être installés sur
tous systèmes d’exploitation Windows 2003, Windows XP Pro ou tout système plus récent. Par
contre, pour la partie serveur, les disponibilités en termes de plateformes sont fonctions de
l’édition SQL Server choisie. Néanmoins pour héberger une instance de base de données en
production, il est nécessaire de disposer d’un serveur performant et fiable. Une plateforme
Windows 2003 ou 2008 est donc recommandée.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


6

1.4. Les composants de SQL Server


Microsoft SQL Server est un système de gestion de base de données (abrégé en SGBD)
incorporant entre autres un SGBDR (SGBD relationnel ») développé et commercialisé par la
société Microsoft. Il fonctionne sous les OS Windows, Linux, Mac OS via docker; une version
docker existe en téléchargement sur le site de Microsoft.
Le moteur de base de données de SQL Server ou Database Engine est composé de plusieurs
logiciels. Certains s’exécutent sous forme de services alors que d’autres possèdent une interface
utilisateur graphique ou en ligne de commande. SQL Server s’exécute sous forme de services
Windows. Suivant les options d’installation choisies, il peut y avoir plus de services. Les
principaux services sont :
• SQL Server : c’est le serveur de base de données à proprement parlé. Si ce service n’est
pas démarré, il n’est pas possible d’accéder aux informations. C’est par l’intermédiaire de
ce service que SQL Server assure la gestion des requêtes utilisateurs. Ce service est
référencé sous le nom MSSQLSERVER pour l’instance par défaut et MSSQLSERVER
$nomInstance dans le cas d’une instance nommée.
• Le moteur décisionnel (OLAP) appelé SSAS (SQL Server Analysis Services) incluant un
moteur de stockage pour les cubes, des algorithmes de forage (data mining) et différents
outils de BI (Business Intelligence) ;
• Un ETL (Extract Transform and Load) appelé SSIS (SQL Server Integration Services)
destiné à la mise en place de logiques de flux de données, notamment pour alimenter des
entrepôts de données (data warehouse) ;
• Un outil de génération d'état appelé SSRS (SQL Server Reporting Services) permettant
de produire des rapports sous différentes formes et exploitant les ressources du moteur
décisionnel (bases "resportServer...") à la fois pour y stocker les rapports mais aussi y
cacher les données de ces derniers afin de faire du "warmup" ;
• Un système de planification de travaux et de gestion d'alerte appelé Agent SQL qui utilise
lui aussi les services du moteur SQL (base msdb).
D'autres services lui sont associés pour certains besoins :
• SQL Full-Text Filter Daemon launcher : pour charger certains documents
(Thésaurus et dll ifilter) externe nécessaires à la recherche "plain texte"
• SQL Browser : service de diffusion des services SQL destiné à faciliter la recherche des
services SQL sur le réseau

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


7

1.5 Base de données SQL Server


1.5.1. Objets de base de données
Les bases de données contiennent un certain nombre d’objets logiques. Il est possible de
regrouper ces objets en trois grandes catégories :
• Gestion et stockage des données : tables, type de données, contraintes d’intégrité, valeur
par défaut, règles et index.
• Accès aux données : vues et procédures stockées.
• La Gestion de l’intégrité complexe : déclencheur (procédure stockée s’exécutant
automatiquement lors de l’exécution d’un ordre SQL modifiant le contenu d’une table :
INSERT, UPDATE et DELETE). Le déclencheur est toujours associé à une table et à une
instruction SQL. Il permet de mettre en place des règles d’intégrité complexes à cheval
sur plusieurs tables ou de maintenir des données non normalisées.
1.5.2. Bases de données système et tables système
1.5.2.1 Bases de données système
Pour gérer l’ensemble des données stockées, SQL Server s’utilise lui-même.
Il existe donc des bases de données système et sur chaque base utilisateur, quelques tables
système. L’insertion et la mise à jour de données dans ces tables ne s’effectuent jamais
directement, mais via des commandes Transact SQL ou des procédures stockées.
Master
C’est la base de données principale de SQL Server. L’ensemble des données stratégiques pour le
bon fonctionnement du serveur y est stocké (comptes de connexion, options de configuration,
l’existence des bases de données utilisateurs et les références vers les fichiers qui composent ces
bases...).
Model
Cette base contient l’ensemble des éléments inscrits dans toute nouvelle base utilisateur. Par
défaut, il n’y a que les tables système, mais il est possible de rajouter des éléments.
Tempdb
La base Tempdb est un espace temporaire de stockage partagé. Il permet de gérer les tables
temporaires locales ou globales, les tables de travail intermédiaires pour faire des tris par exemple,
mais aussi les jeux de résultats des curseurs. La base Tempdb est recréée, avec sa taille initiale,
lors de chaque démarrage de l’instance. Ainsi, aucune information ne peut être conservée de façon
persistante à l’intérieur de la base Tempdb. Les objets temporaires sont, quant à eux, supprimés
lors de la déconnexion de leur propriétaire.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


8

Bases de données utilisateur


Les bases de données utilisateurs vont héberger les données fournies par les utilisateurs.
1.5.2.2 Les tables système
Les tables système sont toujours présentes dans SQL Server. Cependant, il est recommandé de ne
pas travailler directement avec ces tables. Pour rechercher l’information, il faut passer par le
schéma d’information et plus exactement les vues définies sous le schéma de l’utilisateur sys
lorsque cela est possible. Dans le tableau ci-dessous, quelques tables système sont référencées.

Les tables système sont utilisées directement par le moteur de SQL Server. Les applications qui
utilisent SQL Server ne doivent en aucun cas accéder directement à ces tables, même en lecture.
En effet, comme la structure de ces tables évolue avec les versions de SQL Server, si certaines
applications accèdent de façon directe aux tables système, on peut se trouver dans l’impossibilité
de migrer vers une nouvelle version de SQL Server tant que l’application n’a pas été réécrite.
1.6 Installer SQL Server
L’installation de SQL Server permet de présenter les différentes éditions de SQL Server ainsi que
de détailler les options d’installation possibles. Un point tout particulier sera mis en place pour
détailler l’exécution des services associés à SQL Server (logiciels serveur). Une fois le serveur
installé, il faut s’assurer que l’installation s’est déroulée correctement puis il faut configurer le
serveur et certains outils clients pour réaliser les différentes étapes d’administration. Bien que
facile à réaliser, l’installation de SQL Server doit être une opération réfléchie. En effet, de
nombreuses options d’installation existent et leur choix doit correspondre à un réel besoin, ou
permettre de couvrir une évolution future du système.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


9

1.6.1. Les éditions de SQL Server


SQL Server est disponible sous la forme de plusieurs éditions. Chaque édition se distingue par
des caractéristiques spécifiques. En fonction des possibilités souhaitées, le choix se portera sur
une édition ou bien une autre. Certaines éditions (Standard et Entreprise) sont plus destinées à la
gestion des données d’une entreprise tandis que certaines éditions (Developer, Workgroup, Web,
Express) ont pour objectif de satisfaire des besoins bien particuliers.
Toutes ces éditions de SQL Server sont disponibles pour des plates-formes 32 et 64 bits.
Enfin, l’édition Compact est quant à elle destinée aux périphériques mobiles.
L’édition Express de SQL Server 2008 possède la particularité d’être utilisable en production sans
qu’il soit nécessaire de s’acquitter d’une licence de SQL Server. Cette version n’est pas une
version dégradée de SQL Server, mais il s’agit bien du moteur SQL Server pleinement
fonctionnel. Il n’existe pas de limite quant au nombre d’utilisateurs connectés.
Les seules limitations qui existent concernent le volume de données : 4 Go et le fait que le moteur
ne puisse pas exploiter plus d’un gigaoctet de mémoire. Il est toutefois raisonnable de penser que
lorsqu’une application atteint ces limites, l’entreprise possède les moyens nécessaires pour
acquérir une version complète de SQL Server
1.6.2 Déroulement de l’installation
Comme pour de nombreux produits le processus d’installation se déroule en trois temps bien
distincts :
• L’analyse de l’environnement et l’installation de composants nécessaires à la bonne
exécution du processus d’installation.
• Le paramétrage des différents composants à installer.
• L’installation des composants sélectionnés au préalable.
L’installation des composants sélectionnés au préalable. Le processus d’installation commence
par s’assurer que la version 3.5 du Framework .Net est bien présente sur le système et lance son
installation si ce n’est pas le cas. Par la suite, le premier écran permet de planifier au mieux
l’installation de SQL Server 2008 en consultant la documentation relative aux différents cas
possibles d’installation/migration de données et en s’assurant que la plateforme choisie est prête
pour une installation de SQL Server 2008. Ce dernier point est assuré par l’outil d’analyse de
configuration système. Lors du processus d’installation d’une nouvelle instance de SQL Server
2008, l’outil d’analyse de configuration système est également exécuté. Après saisie de la clé du
produit et acceptation du contrat de licence, les fichiers de support du programme d’installation
de SQL Server sont installés.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


10

Le processus d’installation de SQL Server 2008 commence par exécuter un certain nombre de
règles afin de valider la configuration de la plateforme.
On commence par lancer l’installation :

Le système va effectuer des tests pour chercher les éventuels problèmes qui pourraient compromettre
l’installation. : À noter qu’on peut également utiliser l’outil d’identification des problèmes avant
d’effectuer l’installation. Celui-ci se trouvant dans l’onglet Outils du programme d’installation qu’on
peut voir si dessus.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


11

On installe le support qui va permettre l’installatio n :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


12

Le système test les prérequis d’installation :


A noter ici que le pare-feu est activé ce qui émet un avertissement. Vous pouvez continuer
l’installation (celui-ci ayant préalablement été configuré) ou bien désactiver votre pare-feu
temporairement.

On choisit la version à installer : ici la version est Express with Advanced Services :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


13

On accepte ensuite les termes du contrat de licence :

On sélectionne les composants suivant pour l’installation :

On configure une instance nommée qu’on appelle WITSQL :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


14

Le système nous résume l’espace disque nécessaire ainsi que les répertoires où vont être installé
les composants :

On configure les services SQL de la manière suivante : On utilise le compte de « service réseau
» pour démarrer le service SQL Server Database Engine (ne nécessite pas de mot de passe) et on
automatise le démarrage du service SQL Server Browser.

On spécifie le mode d’authentification (en ajoutant l’utilisateur actuel en tant qu’administrateur


SQL Serveur) :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


15

C’est Le mot de passe de l’utilisateur sa qui est fourni ici. Il convient de ne pas l’oublier puisque
c’est avec ce mot de passe qu’on pourra accéder aux bases de données.
L’installation continue :

Il suffit de cliquer sur suivant pour passer les différents écrans qui se finaliseront par le bouton «
Installer ». Le programme d’installation exécutera un dernier test pour déterminer s’il sera bloqué
ou non lors de l’installation.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


16

L’installation est réussite. Il ne reste plus qu’à cliquer sur Suivant et Fermer.
Pour établir la première connexion au serveur, plusieurs outils sont disponibles. En mode
graphique, il convient de lancer SQL Server Management Studio. Au lancement de l’outil, la
fenêtre suivante de connexion est présentée.

1.7. Classification des ordres SQL


O rdre s SQ L Aspect du langage SQ L comme
CREAT E – ALT ER – DROP - RENAME – T RUNCAT E Définition des données Langage de définition
(LDD) des Données
INSERT – UPDAT E – DELET E - LOCK T ABLE Manipulation des Langage de
données (LMD) Manipulation de
Données
SELECT Interrogation des Langage
données (LID) d'Interrogation
des données
GRANT – REVOKE – COMMIT – ROLLBACK – Contrôle des données Langage de contrôle des
SAVEPOINT - SET T RANSACT ION
(LCD) données
1.8. DATABASE
a) CREATE DATABASE
La création d’une base de données en SQL est possible en ligne de commande. Même si les
systèmes de gestion de base de données (SGBD) sont souvent utilisés pour créer une base, il
convient de connaitre la commande à utiliser, qui est très simple.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


17

Syntaxe
CREATE DATABASE nomBaseDeDonnées
Exemple :
CREATE DATABASE papeterie -- le nom de la base
b) Modification de la base des données
Pour modifier une base de données existante, on utilise l’instruction ALTER DATABASE.
Modification du Nom de la Base des données
. Par exemple :
• SQL Server 2000:
ALTER DATABASE papeterie
MODIFY NAME cartoleria
• SQL SERVER 2008

Exec sp_renamedb ancienNomDB, nouveauNomdB


c) DROP DATABASE
En SQL, la commande DROP DATABASE permet de supprimer totalement une base de données
et tout ce qu’elle contient. Cette commande est à utiliser avec beaucoup d’attention car elle permet
de supprimer tout ce qui est inclus dans une base : les tables, les données, les index …
Syntaxe
Pour supprimer la base de données ma_base, la requête est la suivante :
DROP DATABASE ma_base

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


18

CHAP II. LA SYNTAXE DU LANGAGE SQL et LANGAGE SQL COMME


LANGAGE DE DEFINITION DES DONNEES
Ce chapitre décrit les instructions SQL qui constituent l’aspect LDD (langage de définition des
données) de SQL. À cet effet, nous verrons notamment comment déclarer une table, ses éventuels
contraints.
2.1 Les Syntaxes du Langage SQL
a) Commentaires
On peut insérer des commentaires de deux façons :
– sur une ligne, à partir de deux tirets -- ;
– dans un bloc délimité par /* et par */.
b) Noms d'objets
Tous les noms d’objets (table, colonne, variable, etc.) doivent respecter les règles suivantes :
– Les noms d'objets peuvent comporter des lettres majuscules ou minuscules (accentuées ou pas),
des chiffres et les symboles, par exemple : _, $ et #.
– Commencer par une lettre ;
– Ne pas contenir d’espace
Par ailleurs, on n’est pas obligé de respecter la casse (i.e. il n’y a aucune différence entre les
majuscules et les minuscules). Mais on prendra l’habitude de laisser en majuscule les mots clés
du langage et seulement les mots-clés du langage.
c) Opérateurs
– Les opérateurs arithmétiques disponibles sont : +, -, *, / et % le reste par division entière ;
– Les opérateurs de comparaison logique sont : <, <=, =, >=, > et <> (différent) ;
– Les autres opérateurs logiques sont : AND, OR et NOT ;
d) Variables
Les principaux types disponibles sont :
• INT entier
• DECIMAL (9,2) montant à 9 chiffres (décimaux) dont 2 après la virgule
• REAL réel flottant codé sur 24 bits
• CHAR (64) chaîne de caractère de longueur fixe 64
• VARCHAR (64) chaîne de caractère de longueur variable mais inférieure ou égale à 64
• DATETIME date et/ou heure avec une précision de 3.33 ms

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


19

2.2. LANGAGE SQL COMME LANGAGE DE DEFINITION DES DONNEES


2.2.1. LES TABLES
a) CREATE TABLE
La commande CREATE TABLE permet de créer une table en SQL. Un tableau est une entité qui est
contenu dans une base de données pour stocker des données ordonnées dans des colonnes. La création
d’une table sert à définir les colonnes et le type de données qui seront contenus dans chacune des
colonnes (entier, chaine de caractères, date, valeur binaire …).

Syntaxe
La syntaxe générale pour créer une table est la suivante :
CREATE TABLE nom_de_la_table
(
colonne1 type_donnees, colonne2
type_donnees, colonne3
type_donnees,
colonne4 type_donnees
)

Imaginons que l'on souhaite créer une table utilisateur, dans laquelle chaque ligne correspond à
un utilisateur inscrit sur un site web. La requête pour créer cette table peut ressembler à ceci
:
CREATE TABLE utilisateur
(id INT PRIMARY KEY, nom VARCHAR (100), prenom VARCHAR (100), email
VARCHAR(255), date_naissance DATE, pays VARCHAR(255), ville
VARCHAR(255), code postal VARCHAR(5), nombre_achat INT)
b) ALTER TABLE
La commande ALTER TABLE en SQL permet de modifier une table existante. Il est ainsi possible
d’ajouter une colonne, d’en supprimer une ou de modifier une colonne existante, par exemple pour
changer le type.
Syntaxe de base
D'une manière générale, la commande s’utilise de la manière suivante :
ALTER TABLE nom_table
Instruction

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


20

Le mot-clé " instruction " ici sert à designer une commande supplémentaire, qui sera détaillée ci-
dessous selon l’action que l’on souhaite effectuer : ajouter, supprimer ou modifier une colonne.

b.1) Ajouter une colonne


Syntaxe
L’ajout d’une colonne dans une table est relativement simple et peut s’effectuer à l’aide d’une
requête ressemblant à ceci :
ALTER TABLE nom_table
ADD nom_colonne type_donnees

Exemple
Pour ajouter une colonne qui correspond à une rue sur une table utilisateur, il est possible d’utiliser
la requête suivante :
ALTER TABLE utilisateur
ADD adresse_rue VARCHAR(255)
b.2) Supprimer une colonne
Une syntaxe permet également de supprimer une colonne pour une table. Il y a 2 manières
totalement équivalentes pour supprimer une colonne :
ALTER TABLE nom_table
DROP nom_colonne
Ou (le résultat sera le même)
ALTER TABLE nom_table
DROP COLUMN nom_colonne
b.3) Modifier une colonne
SQL server
ALTER TABLE nom_table
ALTER COLUMN nom_colonne Type_donne
Ici, le mot-clé " type données " est à remplacer par un type de données tel qu’INT,
VARCHAR, TEXT, DATE …
c) Renommer une colonne
Pour renommer une colonne, il convient d’indiquer l’ancien nom de la colonne et le nouveau nom
de celle-ci.
SQL Server
Pour SQL server, il existe une procédure Stockée qui permet de renommer le nom d'une
colonne.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


21

Exec Sp_Rename 'Table.AncienNom','NouveauNom','COLUMN'


EXemple
exec
sp_rename'dbo.TBRANCHE1.createdate','createdate1','COLUMN'
C) SQL DROP TABLE
La commande DROP TABLE en SQL permet de supprimer définitivement une table d’une base
de données. Cela supprime en même temps les éventuels index, trigger, contraintes et permissions
associées à cette table.
Attention : il faut utiliser cette commande avec attention car une fois supprimée, les données sont
perdues. Avant de l’utiliser sur une base importante il peut être judicieux d’effectuer un backup
(une sauvegarde) pour éviter les mauvaises surprises.
Syntaxe
Pour supprimer une table " nom_table "il suffit simplement d’utiliser la syntaxe suivante :
DROP TABLE nom_table
A savoir : s’il y a une dépendance avec une autre table, il est recommandé de les supprimer avant
de supprimer la table. C’est le cas par exemple s’il y a des clés étrangères.
Intérêts
Il arrive qu’une table soit créée temporairement pour stocker des données qui n’ont pas vocation
à être réutilisé. La suppression d’une table non utilisée est avantageuse sur plusieurs aspects :
• Libérer de la mémoire et alléger le poids des backups
• Eviter des erreurs dans le futur si une table porte un nom similaire ou qui porte à confusion •
Lorsqu’un développeur ou administrateur de base de données découvre une application, il est
plus rapide de comprendre le système s’il n’y a que les tables utilisées qui sont présente
Exemple de requête
Imaginons qu’une base de données possède une table " client_2009 " qui ne sera plus jamais
utilise et qui existe déjà dans un ancien backup. Pour supprimer cette table, il suffit d’effectuer
la requête suivante :
DROP TABLE client_2009
L’exécution de cette requête va permettre de supprimer la table. d)
TRUNCATE TABLE
En SQL, la commande TRUNCATE permet de supprimer toutes les données d’une table sans
supprimer la table en elle-même.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


22

En d’autres mots, cela permet de purger la table. Cette instruction diffère de la commande DROP
qui a pour but de supprimer les données ainsi que la table qui les contient.
A noter : l’instruction TRUNCATE est semblable à l’instruction DELETE sans utilisation de
WHERE.
Parmi les petites différences TRUNCATE est toutefois plus rapide et utilise moins de ressource.
Ces gains en performance se justifie notamment parce que la requête n’indiquera pas le nombre
d’enregistrement supprimes et qu’il n’y aura pas d’enregistrement des modifications dans le
journal.
Syntaxe
Cette instruction s’utilise dans une requête SQL semblable à celle-ci :
TRUNCATE TABLE `table`
Dans cet exemple, les données de la table " table " seront perdues une fois cette requête exécutée.
2.2.3 Contraintes
Les contraintes ont pour but de programmer des règles de gestion au niveau des colonnes des
tables. Elles peuvent alléger un développement côté client (si on déclare qu’une note doit être
comprise entre 0 et 20, les programmes de saisie n’ont plus à tester les valeurs en entrée mais
seulement le code retour après connexion à la base ; on déporte les contraintes côté serveur).
Quatre types de contraintes sont possibles :
CONSTRAINT nomContrainte
• UNIQUE (colonne1 [, colonne2]…)
• PRIMARY KEY (colonne1 [, colonne2]…)
• FOREIGN KEY (colonne1 [, colonne2]…)
REFERENCES [schéma.]nomTablePere (colonne1 [, colonne2]…)
[ON DELETE { CASCADE | SET NULL }]
• CHECK (condition)
NB: Les contraintes peuvent être déclarées de deux manières :
● En même temps que la colonne (valable pour les contraintes monocolonnes), ces
contraintes sont dites « en ligne » (inline constraints).
● Une fois la colonne déclarée, ces contraintes ne sont pas limitées à une colonne et peuvent
être personnalisées par un nom (out-of-line constraints).
● La contrainte UNIQUE impose une valeur distincte au niveau de la table (les valeurs
nulles font exception à moins que NOT NULL soit aussi appliquée sur les colonnes).

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


23

Exemples
CREATE TABLE personne
(
id int not null identity primary key, nom varchar(20) not
null , prenom varchar(20) null, date_naissance
smalldatetime null, lieu_naissance varchar(255),
nombre_enfant int not null default 0,Constraint UniqueNomPrenocombine unique (nom, prenom)
)
● La contrainte PRIMARY KEY déclare la clé primaire de la table. Un index est généré
automatiquement sur la ou les colonnes concernées. Les colonnes clés primaires ne peuvent être
ni nulles ni identiques (en totalité si elles sont composées de plusieurs colonnes).
Exemple 1;
CREATE TABLE personne
(
id int not null primary key, nom varchar(20) not null ,
prenom varchar(20) null, date_naissance datetime null,
lieu_naissance varchar(255), nombre_enfant int not null
default 0
)
Exemple 2
CREATE TABLE telephone
(
id int not null, id_personne int not null, numero varchar(20) not null,constraint
Pk_Personne primary key (id, id_personne)
)
● La contrainte FOREIGN KEY déclare une clé étrangère entre une table enfant (child) et une
table père (parent). Ces contraintes définissent l’intégrité référentielle que nous aborderons plus
tard. La directive ON DELETE dispose de deux options : CASCADE propagera la suppression
de tous les enregistrements fils rattachés à l’enregistrement père supprimé, SET NULL
positionnera seulement leur clé étrangère à NULL.
CREATE TABLE telephone
(
id int not null, id_personne int not null,
numero varchar(20) not null,
primary key (id),Constraint Fktelephone personne foreign key (id_personne)
references personne (id) )

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


24

La commande foreign key (id_personne) references personne (id) indique que id_personne de la
table telephone référence la clé primaire id de la table personne.Le SGBD vérifiera alors, pour
toute modification pouvant affecter le lien entre les deux tables, que la valeur de id_personne
correspond bien à une ligne de personne.
● La contrainte CHECK impose un domaine de valeurs ou une condition simple ou complexe
entre colonnes (exemple : CHECK (note BETWEEN 0 AND 20), CHECK (grade='Copilote' OR
grade='Commandant')).
2.2.4 Vues
Une vue est une vision partielle ou particulière des données d'une ou plusieurs tables de la base.
La définition d'une vue est donnée par un SELECT qui indique les données de la base qui seront
vues. Les utilisateurs pourront consulter la base, ou modifier la base (avec certaines restrictions)
à travers la vue, c'est-à-dire manipuler les données renvoyées par la vue comme si c'était des
données d'une table réelle.
Seule la définition de la vue est enregistrée dans la base, et pas les données de la
vue. On peut parler de table virtuelle.
a) CREATE VIEW
La commande CREATE VIEW permet de créer une vue en spécifiant le SELECT
constituant la définition de la vue :
CREATE VIEW nom_vue (col1, col2...) AS SELECT ...
Ou
CREATE VIEW nom_vue AS SELECT ...
CREATE VIEW nom
AS requête
nom
Nom d’objet, doit être unique dans la base.
requête Instruction SELECT ne comportant pas de clause ORDER BY, UNION,
COMPUTE ou INTO.

CREATE VIEW EMP2 (MATR, NOM, DEPT)


AS SELECT MATR, NOM, DEPT FROM EMP

b) DROP VIEW
Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022
25

DROP VIEW vue_Name


Supprime la vue.
c) Utilisation des vues
Une vue peut être référencée dans un SELECT de la même façon qu'une table. Ainsi, il est possible de
consulter la vue EMP10. Tout se passe comme s'il existait une table EMP10 des employés du
département 10 :
SELECT * FROM EMP10
d) Utilité des vues
De façon générale, les vues permettent de dissocier la façon dont les utilisateurs voient les données,
du découpage en tables. On sépare l'aspect externe (ce que voit un utilisateur particulier de la base)
de l'aspect conceptuel (comment a été conçu l'ensemble de la base). Ceci favorise l'indépendance
entre les programmes et les données. Si la structure des données est modifiée, les programmes ne
seront pas à modifier si l'on a pris la précaution d'utiliser des vues (ou si on peut se ramener à travailler
sur des vues).

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


26

CHAP III. LANGAGE SQL COMME LANGAGE DE


MANIPULATION DES DONNEES
Ce chapitre décrit l’aspect LMD (langage de manipulation des données) de SQL. Il existe
une autre possibilité, que nous ne détaillerons pas, pour insérer des données dans les tables
en utilisant des outils d’importation propre à chaque SGBD. Nous verrons que SQL propose
trois instructions pour manipuler des données :
● L’insertion d’enregistrements : INSERT ;
● La modification de données : UPDATE ;
● La suppression d’enregistrements : DELETE
3.1 SQL INSERT INTO
L’insertion de données dans une table s’effectue à l’aide de la commande INSERT INTO. Cette
commande permet au choix d’inclure une seule ligne à la base existante ou plusieurs lignes d’un
coup.
Insertion d’une ligne à la fois
Pour insérer des données dans une base, il y a 2 syntaxes principales :
 Insérer une ligne en indiquant les informations pour chaque colonne existante (en
respectant l’ordre)
 Insérer une ligne en spécifiant les colonnes que vous souhaitez compléter. Il est possible
d’insérer une ligne en renseigner seulement une partie des colonnes
Insérer une ligne en spécifiant toutes les colonnes
La syntaxe pour remplir une ligne avec cette méthode est la suivante :
INSERT INTO table VALUES ('valeur 1', 'valeur 2', ...)
Cette syntaxe possède les avantages et inconvénients suivants :
 Obliger de remplir toutes les données, tout en respectant l’ordre des colonnes
 Il n’y a pas le nom de colonne, donc les fautes de frappe sont limitées. Par ailleurs, les
colonnes peuvent être renommées sans avoir à changer la requête
 L’ordre des colonnes doit rester identique sinon certaines valeurs prennent le risque d’être
complétée dans la mauvaise colonne
Insérer une ligne en spécifiant seulement les colonnes souhaitées
Cette deuxième solution est très similaire, excepte qu’il faut indiquer le nom des colonnes avant
" VALUES ". La syntaxe est la suivante :
INSERT INTO table (nom_colonne_1, nom_colonne_2, ...) VALUES ('valeur 1', 'valeur 2', ...)

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


27

NB : il est possible de ne pas renseigner toutes les colonnes. De plus, l’ordre des colonnes n’est
pas important.
Insertion de plusieurs lignes à la fois
Il est possible d’ajouter plusieurs lignes à un tableau avec une seule requête. Pour ce faire, il
convient d’utiliser la syntaxe suivante :
INSERT INTO NomTable(colonne1,colonne2,...)
SELECT colonne1,colonne2,... FROM NomTable2
WHERE CONDITION

OU
INSERT INTO client (prenom, nom, ville, age)
VALUES
('Rebecca', 'Armand', 'Saint-Didier-des-Bois', 24),
('Aimee', 'Hebert', 'Marigny- le-Chatel', 36), ('Marielle', 'Ribeiro', 'Mailleres', 27),
('Hilaire', 'Savary', 'Conie-Molitard', 58)
A noter : lorsque le champ a remplir est de type VARCHAR ou TEXT il faut indiquer le texte
entre guillemet simple. En revanche, lorsque la colonne est un numérique tel que INT ou BIGINT
il n’y a pas besoin d’utiliser de guillemet, il suffit juste d’indiquer le nombre.
3.2 SQL UPDATE
La commande UPDATE permet d’effectuer des modifications sur des lignes existantes. Très
souvent cette commande est utilisée avec WHERE pour spécifier sur quelles lignes doivent porter
la ou les modifications.
Syntaxe
La syntaxe basique d’une requête utilisant UPDATE est la suivante :
UPDATE table SET nom_colonne_1 = 'nouvelle valeur' WHERE condition
Cette syntaxe permet d’attribuer une nouvelle valeur a la colonne nom_colonne_1 pour les lignes
qui respectent la condition stipule avec WHERE. Il est aussi possible d’attribuer la même valeur
a la colonne nom_colonne_1 pour toutes les lignes d’une table si la condition WHERE n’était pas
utilisée. A noter, pour spécifier en une seule fois plusieurs modification, il faut séparer les
attributions de valeur par des virgules. Ainsi la syntaxe deviendrait la suivante :
UPDATE table SET colonne_1 = 'valeur 1', colonne_2 = 'valeur 2', colonne_3 = 'valeur 3' WHERE
condition
Cette syntaxe permet d’attribuer une nouvelle valeur a la colonne nom_colonne_1 pour les lignes
qui respectent la condition stipule avec WHERE.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


28

Il n’est aussi possible d’attribuer la même valeur à la colonne nom_colonne_1 pour toutes les
lignes d’une table si la condition WHERE n’était pas utilisé. A noter, pour spécifier en une seule
fois plusieurs modification, il faut séparer les attributions de valeur par des virgules. Ainsi la
syntaxe deviendrait la suivante :
UPDATE table SET colonne_1 = 'valeur 1', colonne_2 = 'valeur 2', colonne_3 = 'valeur 3' WHERE
condition
3.3 DELETE
La commande DELETE en SQL permet de supprimer des lignes dans une table. En utilisant cette
commande associe à WHERE il est possible de sélectionner les lignes concernées qui seront
supprimées.
Attention : Avant d’essayer de supprimer des lignes, il est recommandé d’effectuer une
sauvegarde de la base de données, ou tout du moins de la table concernée par la suppression.
Ainsi, s’il y a une mauvaise manipulation il est toujours possible de restaurer les données.
Syntaxe
La syntaxe pour supprimer des lignes est la suivante :
DELETE FROM table WHERE condition
Attention : s’il n’y a pas de condition WHERE alors toutes les lignes seront supprimées et la
table sera alors vide.
Exemple
Si l’on souhaite supprimer les utilisateurs qui se sont inscrit avant le " 10/04/2012″, il va falloir
effectuer la requête suivante :
DELETE FROM utilisateur WHERE date_inscription < '2012-04-10'

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


29

CHAP. IV. SQL COMME LANGAGE D'INTERROGATION ET


CONTROLE DES DONNEES
4.1 SQL COMME LANGAGE D'INTERROGATION DES DONNEES
4.1.0 SQL SELECT
L’utilisation la plus courante de SQL consiste à lire des données issues de la base de données.
Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un tableau
de résultat. Cette commande peut sélectionner une ou plusieurs colonnes d’une table.
Commande basique
L’utilisation basique de cette commande s’effectue de la manière suivante :
SELECT nom_du_champ
FROM nom_du_tableau
Cette requête va sélectionner (SELECT) le champ " nom_du_champ " provenant (FROM) du
tableau appelé " nom_du_tableau ".
Exemple
Imaginons une base de données appelée " client" qui contient des informations sur les clients
d’une entreprise.
Table « client » :

Si l’on veut avoir la liste de toutes les villes des clients, il suffit d’effectuer la requête suivante :
SELECT ville FROM client
Avec la même table client il est possible de lire plusieurs colonnes à la fois. Il suffit tout
simplement de séparer les noms des champs souhaites par une virgule. Pour obtenir les prénoms
et les noms des clients il faut alors faire la requête suivante :
SELECT prenom, nom FROM client
Il est possible de retourner automatiquement toutes les colonnes d’un tableau sans avoir à
connaitre le nom de toutes les colonnes. Au lieu de lister toutes les colonnes, il faut simplement
utiliser le caractère " * " (étoile). C’est un joker qui permet de sélectionner toutes les colonnes. Il
s’utilise de la manière suivante :
SELECT * FROM client

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


30

4.1.1 Ordre des commandes du SELECT


Une requête SELECTE peut devenir assez longue. Juste à titre informatif, voici une requête
SELECT qui possède presque toutes les commandes possibles :
SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
{UNION | INTERSECT | EXCEPT}
ORDER BY expression
LIMIT count
OFFSET Start
4.1.2. DISTINCT
L’utilisation de la commande SELECT en SQL permet de lire toutes les données d’une ou
plusieurs colonnes. Cette commande peut potentiellement afficher des lignes en doubles. Pour
éviter des redondances dans les résultats il faut simplement ajouter DISTINCT après le mot
SELECT.
L’utilisation basique de cette commande consiste alors à effectuer la requête suivante :
SELECT DISTINCT ma_colonne FROM nom_du_tableau
Cette requete sélectionne le champ " ma_colonne " de la table " nom_du_tableau " en évitant de
retourner des doublons.
4.1.3 AS (alias) dans SQL
Alias sur une colonne
Permet de renommer le nom d’une colonne dans les résultats d’une requête SQL. C’est pratique
pour avoir un nom facilement identifiable dans une application qui doit ensuite exploiter les
résultats d’une recherche.
La syntaxe pour renommer une colonne de colonne1 à c1 est la suivante :
SELECT colonne1 AS c1, colonne2 FROM `table`
Cette syntaxe peut également s’afficher de la façon suivante :
SELECT colonne1 c1, colonne2 FROM `table`
Alias sur une table
La syntaxe pour renommer une table dans une requête est la suivante :
SELECT * FROM `nom_table` AS t1

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


31

Cette requête peut également s’écrire de la façon suivante :


SELECT * FROM `table`t1
4.1.4. WHERE
La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base de données
qui respectent une condition. Cela permet d’obtenir uniquement les informations désirées.
Syntaxe
La commande WHERE s’utilise en complément à une requête utilisant SELECT. La façon la plus
simple de l’utiliser est la suivante :
SELECT nom_colonnes FROM nom_table WHERE condition
Exemple: Pour obtenir seulement la liste des clients qui habitent à Paris, il faut effectuer la requête
suivante :
SELECT * FROM client WHERE ville = 'Paris'
Exemple
Imaginons une base de données appelée " client " qui contient le nom des clients, le nombre de
commandes qu’ils ont effectués et leur ville :

Pour obtenir seulement la liste des clients qui habitent a Paris, il faut effectuer la requête suivante
:
SELECT * FROM client WHERE Ville = 'Paris'
• Opérateurs de comparaisons
Il existe plusieurs opérateurs de comparaisons. La liste ci-jointe présente quelques-uns des
opérateurs les plus couramment utilises.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


32

• SQL AND & OR


Une requête SQL peut être restreinte à l’aide de la condition WHERE. Les opérateurs logiques
AND et OR peuvent être utilisées au sein de la commande WHERE pour combiner des conditions.
Syntaxe d’utilisation des opérateurs AND et OR
Les opérateurs sont à ajoutes dans la condition WHERE. Ils peuvent être combines à l’ infini pour
filtrer les données comme souhaites.
L’opérateur AND permet de s’assurer que la condition1 ET la condition2 sont vrai :
SELECT nom_colonnes FROM nom_table WHERE condition1 AND condition2
L’opérateur OR vérifie quant à lui que la condition1 OU la condition2 est vrai :
SELECT nom_colonnes FROM nom_table WHERE condition1 OR condition2
Ces opérateurs peuvent être combines à l’ infini et mélanges. L’exemple ci-dessous filtre les
résultats de la table " nom_table " si condition1 ET condition2 OU condition3 est vrai :
SELECT nom_colonnes FROM nom_table WHERE condition1 AND (condition2 OR condition3)
Attention : il faut penser à utiliser des parenthèses lorsque c’est nécessaire. Cela permet d’éviter
les erreurs car et ça améliore la lecture d’une requête par un humain.
4.1.5 IN
L’opérateur logique IN dans SQL s’utilise avec la commande WHERE pour vérifier si une
colonne est égale à une des valeurs comprise dans une liste des valeurs déterminées. C’est une
méthode simple pour vérifier si une colonne est égale à une valeur OU une autre valeur OU
une autre valeur et ainsi de suite, sans avoir à utiliser de multiple fois l’operateur OR.
Syntaxe
Pour chercher toutes les lignes ou la colonne «nom_colonne " est égale a ‘valeur 1′ OU ‘valeur 2′
ou ‘valeur 3′, il est possible d’utiliser la syntaxe suivante :
SELECT nom_colonne FROM table WHERE nom_colonne IN (valeur1, valeur2, valeur3,
...)
NB.
La syntaxe utilisée avec l’opérateur est plus simple que d’utiliser une succession d’opérateur OR.
Pour le montrer concrètement avec un exemple, voici 2 requêtes qui retourneront les mêmes
résultats, l’une utilise l’opérateur IN, tandis que l’autre utilise plusieurs OR.
Requête avec plusieurs OR
SELECT prenom FROM utilisateur WHERE prenom = 'Maurice' OR prenom = 'Marie' OR prenom
= 'Thimote'
Requête équivalent avec l’opérateur IN
SELECT prenom FROM utilisateur WHERE prenom IN ( 'Maurice', 'Marie', 'Thimote' )

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


33

4.1.6 BETWEEN
L’opérateur BETWEEN est utilisé dans une requête SQL pour sélectionner un intervalle de
données dans une requête utilisant WHERE. L’intervalle peut être constitue de chaines de
caractères, de nombres ou de dates. L’exemple le plus concret consiste par exemple à récupérer
uniquement les enregistrements entre 2 dates définies.
Syntaxe
L’utilisation de la commande BETWEEN s’effectue de la manière suivante :
SELECT * FROM table WHERE nom_colonne BETWEEN 'valeur1' AND 'valeur2'
La requête suivante retournera toutes les lignes dont la valeur de la colonne " nom_colonne " sera
comprise entre valeur1 et valeur2.
Exemple1:
Si l’on souhaite obtenir les membres qui se sont inscrit entre le 1 avril 2020 et le 20 avril 2020 il
est possible d’effectuer la requête suivante :
SELECT * FROM utilisateur WHERE date_inscription BETWEEN ’2020-04-01′ AND ’2020-04-
20′
Exemple2:
Si l’on souhaite obtenir tous les résultats dont l’identifiant n’est pas situé entre 4 et 10, il faudra
alors utiliser la requête suivante :
SELECT * FROM utilisateur WHERE id NOT BETWEEN 4 AND 10
4.1.7 LIKE
L’opérateur LIKE est utilisé dans la clause WHERE des requêtes SQL. Ce mot-clé permet
d’effectuer une recherche sur un modèle particulier. Il est par exemple possible de rechercher
les enregistrements dont la valeur d’une colonne commence par telle ou telle lettre. Les modèles
de recherches sont multiple.
Syntaxe
La syntaxe à utiliser pour utiliser l’opérateur LIKE est la suivante :
SELECT * FROM table WHERE colonne LIKE modele
Exemples:
• LIKE ‘%a’ : le caractère " % " est un caractère joker qui remplace tous les autres
caractères.
Ainsi, ce modèle permet de rechercher toutes les chaines de caractère qui se termine par un " a ".
• LIKE ‘a%’ : ce modèle permet de rechercher toutes les lignes de " colonne " qui
commence par un " a ".

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


34

• LIKE ‘%a%’ : ce modèle est utilisé pour rechercher tous les enregistrements qui utilisent
le caractère " a ".
• LIKE ‘pa%on’ : ce modèle permet de rechercher les chaines qui commence par " pa " et
qui se terminent par " on ", comme " pantalon " ou " pardon ".
4.1.8 SQL IS NULL / IS NOT NULL
Dans le langage SQL, l’opérateur IS permet de filtrer les colonnes qui contiennent la valeur
NULL. Cet opérateur est indispensable car la valeur NULL est une valeur inconnue et ne peut
par conséquent pas être filtrée par les opérateurs de comparaison (cf. égal, inferieur, supérieur ou
différent).
Syntaxe
Pour filtrer les résultats ou les champs d’une colonne sont à NULL il convient d’utiliser la syntaxe
suivante :
SELECT * FROM `table` WHERE nom_colonne IS NULL
A l’inverse, pour filtrer les résultats et obtenir uniquement les enregistrements qui ne sont pas
null, il convient d’utiliser la syntaxe suivante :
SELECT * FROM `table` WHERE nom_colonne IS NOT NULL
NB :
L’opérateur IS retourne en réalité un booléen, c’est à dire une valeur TRUE si la condition est
vrai ou FALSE si la condition n’est pas respectée. Cet opérateur est souvent utilisé avec la
condition WHERE mais peut aussi trouve son utilité lorsqu’une sous-requête est utilisée.
4.1.9. Utilisation d’autres fonctions de statistiques
Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs enregistrements,
il s’agit des fonctions d’agrégations statistiques, les principales sont les suivantes :
• AVG () pour calculer la moyenne d’un set de valeur. Permet de connaitre le prix du panier
moyen pour de chaque client
• COUNT () pour compter le nombre de lignes concernées. Permet de savoir combien
d’achats ont été effectué par chaque client
• MAX () pour récupérer la plus haute valeur. Pratique pour savoir l’achat le plus cher •
MIN () pour récupérer la plus petite valeur. Utile par exemple pour connaitre la date du premier
achat d’un client
• SUM () pour calculer la somme de plusieurs lignes. Permet par exemple de connaitre le
total de tous les achats d’un client Ces petites fonctions se révèlent rapidement indispensable pour
travailler sur des données.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


35

4.1.10 GROUP BY
La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et utiliser une
fonction de totaux sur un groupe de résultat. Sur une table qui contient toutes les ventes d’un
magasin, il est par exemple possible de lister et regrouper les ventes par clients identiques et
d’obtenir le cout total des achats pour chaque client.
Syntaxe d’utilisation de GROUP BY
De façon générale, la commande GROUP BY s’utilise de la façon suivante :
SELECT colonne1, fonction(colonne2) FROM table GROUP BY colonne1
Exemple :
Pour obtenir le cout total de chaque client en regroupant les commandes des mêmes clients, il faut
utiliser la requête suivante :
SELECT client, SUM(tarif) FROM achat GROUP BY client
4.1.11 SQL HAVING
La condition HAVING en SQL est presque similaire a WHERE a la seule différence que
HAVING permet de filtrer en utilisant des fonctions telles que SUM (), COUNT(), AVG(), MIN()
ou MAX().
Syntaxe
L’utilisation de HAVING s’utilise de la manière suivante :
SELECT colonne1, SUM(colonne2) FROM nom_table GROUP BY colonne1 HAVING
fonction(colonne2) operateur valeur
Exemple
Pour utiliser un exemple concret, imaginons une table " achat " qui contient les achats de différents
clients avec le cout du panier pour chaque achat.

Si dans cette table on souhaite récupérer la liste des clients qui ont commandé plus de 40€, toutes
commandes confondues alors il est possible d’utiliser la requête suivante :
SELECT client, SUM(tarif) FROM achat GROUP BY client HAVING SUM(tarif) > 40
Résultat :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


36

4.1.12 SQL ORDER BY


La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL. Il
est possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou
descendant. Syntaxe
Une requête ou l’on souhaite filtrer l’ordre des résultats utilise la commande ORDER BY de la
sorte :
SELECT colonne1, colonne2 FROM table ORDER BY colonne1
Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible d’inverser l’ordre
en utilisant le suffixe DESC après le nom de la colonne. Par ailleurs, il est possible de trier sur
plusieurs colonnes en les séparant par une virgule. Une requête plus élabore ressemblerais alors
cela :
SELECT colonne1, colonne2, colonne3 FROM table ORDER BY colonne1 DESC, colonne2
ASC
A noter : il n’est pas obligé d’utiliser le suffixe " ASC " sachant que les résultats sont toujours
classe par ordre ascendant par défaut. Toutefois, c’est plus pratique pour mieux s’y retrouver,
surtout si on a oublié l’ordre par défaut.
EXEMPLE

En utilisant deux méthodes de tri, il est possible de retourner les utilisateurs par ordre alphabétique
ET pour ceux qui ont le même nom de famille, les trier par ordre décroissant d’inscription. La
requête serait alors la suivante :
SELECT * FROM utilisateur ORDER BY nom, date_inscription DESC

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


37

Cette requête permet de récupérer seulement les 10 premiers résultats d’une table. Bien entendu,
si la table contient moins de 10 résultats, alors la requête retournera toutes les lignes. Bon à savoir
: la bonne pratique lorsque l’on utilise LIMIT consiste à utiliser également la clause ORDER BY
pour s’assurer que quoi qu’il en soit-ce sont toujours les bonnes données qui sont présentées. En
effet, si le système de tri est non spécifié, alors il est en principe inconnu et les résultats peuvent
être imprévisibles
4.1.13 SQL UNION
La commande UNION de SQL permet de mettre bout-a-bout les résultats de plusieurs requêtes
utilisant elles-mêmes la commande SELECT. C’est donc une commande qui permet de
concaténer les résultats de 2 requêtes ou plus. Pour l’utiliser il est nécessaire que chacune des
requêtes à concaténer retournes le même nombre de colonnes, avec les mêmes types de
données et dans le même ordre.
A savoir : par défaut, les enregistrements exactement identiques ne seront pas répétés dans les
résultats. Pour effectuer une union dans laquelle même les lignes dupliquées sont affichées il faut
plutôt utiliser la commande UNION ALL.
Syntaxe La syntaxe pour unir les résultats de 2 tableaux sans afficher les doublons est la suivante
:
SELECT * FROM table1
UNION
SELECT * FROM table2
Syntaxe La syntaxe pour unir les résultats de 2 tableaux en affichant les doublons est la suivante
:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


38

4.1.14. Jointure SQL


Les jointures en SQL permettent d’associer plusieurs tables dans une même requête. Cela permet
d’exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui
combinent les données de plusieurs tables de manière efficace.
Exemple
En général, les jointures consistent à associer des lignes de 2 tables en associant l’égalité des
valeurs d’une colonne d’une première table par rapport à la valeur d’une colonne d’une seconde
table. Imaginons qu’une base de 2 données possède une table " utilisateur " et une autre table "
adresse " qui contient les adresses de ces utilisateurs. Avec une jointure, il est possible d’obtenir
les données de l’utilisateur et de son adresse en une seule requête. On peut aussi imaginer qu’un
site web possède une table pour les articles (titre, contenu, date de publication …) et une autre
pour les rédacteurs (nom, date d’inscription, date de naissance …). Avec une jointure il est
possible d’effectuer une seule recherche pour afficher un article et le nom du rédacteur. Cela
évite d’avoir à afficher le nom du rédacteur dans la table " article ". Il y a d’autres cas de jointures,
incluant des jointures sur la même table ou des jointures d’inégalité. Ces cas étant assez
particulier et pas si simple à comprendre, ils ne seront pas élaborés sur dans ce cours.
Types de jointures
Il y a plusieurs méthodes pour associer 2 tables ensemble. Voici la liste des différentes techniques
qui sont utilisées :
• INNER JOIN : jointure interne pour retourner les enregistrements quand la condition est
vraie dans les 2 tables. C’est l’une des jointures les plus communes.
• CROSS JOIN : jointure croisée permettant de faire le produit cartésien de 2 tables. En
d’autres mots, permet de joindre chaque ligne d’une table avec chaque ligne d’une seconde table.
Attention, le nombre de résultats est en général très élevé.
• LEFT JOIN (ou LEFT OUTER JOIN) : jointure externe pour retourner tous les
enregistrements de la table de gauche (LEFT = gauche) même si la condition n’est pas vérifiée
dans l’autre table.
• RIGHT JOIN (ou RIGHT OUTER JOIN) : jointure externe pour retourner tous les
enregistrements de la table de droite (RIGHT = droite) même si la condition n’est pas vérifiée
dans l’autre table.
• FULL JOIN (ou FULL OUTER JOIN) : jointure externe pour retourner les résultats
quand la condition est vrai dans au moins une des 2 tables.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


39

a) SQL INNER JOIN


Dans le langage SQL la commande INNER JOIN, aussi appelée EQUIJOIN, est un type de
jointures très communes pour lier plusieurs tables entre-elles. Cette commande retourne les
enregistrements lorsqu’il y a au moins une ligne dans chaque colonne qui correspond à la
condition.
Syntaxe
Pour utiliser ce type de jointure il convient d’utiliser une requête SQL avec cette syntaxe :
SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.fk_id
Exemple
Imaginons une application qui possède une table utilisateur ainsi qu’une table commande qui
contient toutes les commandes effectuées par les utilisateurs. Table utilisateur :

Table commande :

Pour afficher toutes les commandes associées aux utilisateurs, il est possible d’utiliser la requête
suivante :
SELECT id, prenom, nom, date_achat, num_facture, prix_total
FROM utilisateur
INNER JOIN commande ON utilisateur.id = commande.utilisateur_id
Résultats :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


40

b)
CROSS JOIN
Dans le langage SQL, la commande CROSS JOIN est un type de jointure sur 2 tables SQL qui
permet de retourner le produit cartésien. Autrement dit, cela permet de retourner chaque ligne
d’une table avec chaque ligne d’une autre table. Ainsi effectuer le produit cartésien d’une table
A qui contient 30 résultats avec une table B de 40 résultats va produire 1200 résultats (30 x 40 =
1200). En général la commande CROSS JOIN est combinée avec la commande WHERE pour
filtrer les résultats qui respectent certaines conditions.
Attention, le nombre de résultat peut facilement être très élevé. S’il est effectué sur des tables
avec beaucoup d’enregistrements, cela peut ralentir sensiblement le serveur.
Syntaxe
Pour effectuer une jointure avec CROSS JOIN, il convient d’effectuer une requête SQL respectant
la syntaxe suivante :
SELECT *
FROM table1
CROSS JOIN table2
Méthode alternative pour retourner les mêmes résultats :
SELECT *
FROM table1, table2
L’une ou l’autre de ces syntaxes permettent d’associer tous les résultats de table1 avec chacun
des résultats de table2.
Exemple
Imaginons une application de recettes de cuisines qui contient 2 tables d’ingrédients, la table
légume et la table fruit.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


41

Pour une raison quelconque l’application doit associer tous les légumes avec tous les fruits.
Toutes les combinaisons doivent être affichées. Pour cela il convient d’effectuer l’une ou l’autre
des requêtes suivantes :
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_fr FROM legume CROSS JOIN fruit
ou :
SELECT l_id, l_nom_fr_fr, f_id, f_nom_fr_fr FROM legume, fruit

c) SQL LEFT JOIN


Dans le langage SQL, la commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) est un type
de jointure entre 2 tables. Cela permet de lister tous les résultats de la table de gauche (left =
gauche) même s’il n’y a pas de correspondance dans la deuxième table.
Syntaxe
Pour lister les enregistrements de table1, même s’il n’y a pas de correspondance avec table2, il
convient d’effectuer une requête SQL utilisant la syntaxe suivante.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


42

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.fk_id
La requête peux aussi s’écrire de la façon suivante :
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id = table2.fk_id
Cette requête est particulièrement intéressante pour récupérer les informations de table1 tout en
récupérant les données associées, même s’il n’y a pas de correspondance avec table2. A savoir,
s’il n’y a pas de correspondance les colonnes de table2 vaudront toutes NULL.
Exemple
Imaginons une application contenant des utilisateurs et des commandes pour chacun de ces
utilisateurs. La base de données de cette application contient une table pour les utilisateurs et
sauvegarde leurs achats dans une seconde table. Les 2 tables sont reliées grâce à la colonne
utilisateur_id de la table des commandes. Cela permet d’associer une commande à un utilisateur.
Table utilisateur :

Table commande :

Pour lister tous les utilisateurs avec leurs commandes et afficher également les utilisateurs qui
n’ont pas effectuées d’achats, il est possible d’utiliser la requête suivante :
SELECT * FROM utilisateur LEFT JOIN commande ON utilisate ur.id = commande.utilisateur_id
Résultats

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


43

d) SQL RIGHT JOIN


En SQL, la commande RIGHT JOIN (ou RIGHT OUTER JOIN) est un type de jointure entre 2
tables qui permet de retourner tous les enregistrements de la table de droite (right = droite) même
s’il n’y a pas de correspondance avec la table de gauche. S’il y a un enregistrement de la table de
droite qui ne trouve pas de correspondance dans la table de gauche, alors les colonnes de la table
de gauche auront NULL pour valeur.
Syntaxe
L’utilisation de cette commande SQL s’effectue de la façon suivante :
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.fk_id
La syntaxe de cette requête SQL peut aussi s’écrire de la façon suivante :
SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id = table2.fk_id
Cette syntaxe stipule qu’il faut lister toutes les lignes du tableau table2 (tableau de droite) et
afficher les données associées du tableau table1 s’il y a une correspondance entre ID de table1 et
FK_ID de table2. S’il n’y a pas de correspondance, l’enregistrement de table2 sera affiché et les
colonnes de table1 vaudront toutes NULL.
Exemple
Prenons l’exemple d’une base de données qui contient des utilisateurs et un historique d’achat de
ces utilisateurs. Cette 2 tables sont reliées entre grâce à la colonne utilisateur_id de la table des
commandes. Cela permet de savoir à quel utilisateur est associe un achat.
Table utilisateur :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


44

Table commande :

Pour afficher toutes les commandes avec le nom de l’utilisateur correspondant il est normalement
d’habitude d’utiliser INNER JOIN en SQL. Malheureusement, si l’utilisateur a été supprimé de
la table, alors ça ne retourne pas l’achat. L’utilisation de RIGHT JOIN permet de retourner tous
les achats et d’afficher le nom de l’utilisateur s’il existe. Pour cela il convient d’utiliser cette
requête :
SELECT id, prenom, nom, utilisateur_id, date_achat, num_facture FROM utilisateur
RIGHT JOIN commande ON utilisateur.id = commande.utilisateur_id
Résultats :

e) SQL FULL JOIN


Dans le langage SQL, la commande FULL JOIN (ou FULL OUTER JOIN) permet de faire une
jointure entre 2 tables. L’utilisation de cette commande permet de combiner les résultats des 2
tables, les associer entre eux grâce à une condition et remplir avec des valeurs NULL si la
condition n’est pas respectée.
Syntaxe
Pour retourner les enregistrements de table1 et table2, il convient d’utiliser une requête SQL avec
une syntaxe telle que celle-ci :
SELECT *
FROM table1
FULL JOIN table2 ON table1.id = table2.fk_id

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


45

Cette requête peut aussi être conçue de cette façon :


SELECT *
FROM table1
FULL OUTER JOIN table2 ON table1.id = table2.fk_id
La condition présentée ici consiste à lier les tables sur un identifiant, mais la condition peut être
définie sur d’autres champs.
Exemple
Prenons l’exemple d’une base de données qui contient une table utilisateur ainsi qu’une table
commande qui contient toutes les ventes. Table utilisateur :

Il est possible d’utiliser FULL JOIN pour lister tous les utilisateurs ayant effectué ou non une
vente, et de lister toutes les ventes qui sont associées ou non à un utilisateur. La requête SQL est
la suivante :
SELECT id, prenom, nom, utilisateur_id, date_achat, num_facture
FROM utilisateur
FULL JOIN commande ON utilisateur.id = commande.utilisateur_id

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


46

4.1.15. Quelques autres fonctions


a) Fonctions sur les dates
Avec date de type DATETIME :
DATEADD (year, 4, date) ajoute 4 ans à date
DATEADD(month, 4, date)
DATEADD(week, 4, date)
DATEADD(day, 4, date)
DATEADD(hour, 4, date)
DATEDIFF(minute, date début, date fin) donne la différence en minutes entre
DATEDIFF(second, date debut, date fin) date fin et date début
DATEPART(month, date) renvoie le numéro du mois de date
Remarque : DATEDIFF et DATEPART renvoient un entier
b) Fonctions sur les chaines de caractères
Notamment : LEN (longueur), LOWER (convertit tout en minuscule), REPLACE, SUBSTRING
et UPPER (tout en majuscule).
• SPACE : Génération d'espaces
• substring. récupération des chaines de caractères
• LCASE: Mise en minuscule
• LTRIM : TRIM à gauche
• RTRIM : TRIM à gauche
• Reverse Renverse de caractères
d) Principales fonctions mathématiques
ABS (valeur absolue), CEILING (partie entière +1), COS, EXP, FLOOR (partie entière), LOG
(Logarithme népérien), LOG10, PI, POWER, SIGN, SIN, SQRT, SQUARE et TAN.
d) Autres Fonctions
• USER: Utilisateur courant
• CURRENT_USER: Utilisateur courant
• CAST : Transtypage
4.1.16 SQL Sous-requête
Dans le langage SQL une sous-requête (aussi appelé " requête imbriquée " ou " requête en cascade
") consiste à exécuter une requête à l’intérieur d’une autre requête. Une requête imbriquée est
souvent utilisée au sein d’une clause WHERE ou de HAVING pour remplacer une ou plusieurs
constantes. Le langage SQL étend la notion de valeur de référence au résultat d’une requête.
Ainsi, l’expression d’une clause WHERE peut prendre la forme :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


47

… WHERE attribut opérateur (SELECT …).


Il y a plusieurs façons d’utiliser les sous-requêtes. De cette façon il y a plusieurs syntaxes
Envisageables pour utiliser des requêtes dans des requêtes.
4.1.16.1 Requête imbriquée qui retourne un seul résultat
L’exemple ci-dessous est un exemple typique d’une sous-requête qui retourne un seul résultat à
la requête principale.

SELECT *
FROM `table`

WHERE `nom_colonne` = (
SELECT `valeur`
FROM `table2`
)
Cet exemple montre une requête interne (celle sur " table2″) qui renvoi une seule valeur. La
requête externe quant à elle, va chercher le résultat de " table " et filtre les résultats à partir de la
valeur retournée par la requête interne.
4.1.14.2 Requêtes imbriquées renvoyant plusieurs lignes
ANY : la condition est vraie si elle est vérifiée Pour au moins une des valeurs renvoyées par la
sous-requête
ALL : la condition est vraie si elle est vérifiée
Pour chacune des valeurs renvoyées par la
Sous-requête
IN : la condition est vraie si elle est vérifiée Pour une
des valeurs renvoyées par la sous-requête La
condition de sélection emploie alors :
• L’opérateur IN (équivalent a = ANY)
• L’opérateur NOT IN (équivalent à != ALL)
• Un opérateur simple ( =, !=, <>, <, >, <=,
>=) suivi de ALL ou ANY
• L’opérateur EXISTS
Exemple de requête imbriquée renvoyant plusieurs lignes
Ex1 : Donner les numéros des voyages Passant pour une ville où passe aussi le Voyage numéro
4

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


48

SELECT DISTINCT numVoyage FROM Etape WHERE numVille IN (SELECT numVille


FROM Etape WHERE numVoyage = 4)
Ex2 : Numéros des voyages dont il n’y a pas eu de départs après le mois de septembre 2014
SELECT numVoyage FROM Voyage WHERE numVoyage NOT IN (SELECT numVoyage
FROM Tarif
WHERE dateDeb > '30-09-14')
A noter:
• Il est possible d’utiliser n’importe quel operateur d’égalité tel que =, >, <, >=, <= ou <>.
• Il est possible d’imbriquer plusieurs requêtes et il n’y a pas de limite dans le nombre de
niveaux d’imbrication. Le résultat de chaque requête imbriquée sert de valeur de référence
dans la condition de sélection de la requête de niveau supérieur, appelée requête principale.
• La sous-requête peut renvoyer soit une ligne, soit plusieurs.
Si la sous-requête renvoie plusieurs lignes, nous avons deux cas, selon que la sous-
requête est indépendante de la requête principale ou synchronisée avec elle.
Si la sous-requête est synchronisée avec la requête principale, on parle de requête
corrélée.
Exemple de requête imbriquée renvoyant une seule ligne Question :
Donner les numéros des voyages ayant le même type de pension que le voyage numéro 4
SELECT numVoyage FROM Voyage WHERE typePension = (SELECT typePension
FROM Voyage WHERE numVoyage = 4)
• Opérateur EXISTS
... WHERE EXISTS (sous-select)
Cet opérateur permet de construire un prédicat évalué à vrai si la sous-requête Renvoie au
moins une ligne
Exemple
Numéros des voyages qui font au moins 6 étapes
SELECT numVoyage FROM Voyage V
WHERE EXISTS (SELECT * FROM Etape E
WHERE numOrdre = 6
AND E.numVoyage = V.numVoyage)

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


49

Exemple
Numéros des voyages qui font au moins 6 étapes
SELECT numVoyage FROM Voyage V
WHERE EXISTS (SELECT * FROM Etape E
WHERE numOrdre = 6
AND E.numVoyage = V.numVoyage)
4.2 SQL COMME LANGAGE DE CONTROLE DES DONNES
4.2.0 APPROCHE
Les types d’utilisateurs, leurs fonctions et leur nombre peuvent varier d’une base à une autre.
Néanmoins, pour chaque base de données en activité, on peut classifier les utilisateurs de la
manière suivante :
● Le DBA (DataBase Administrator). Il en existe au moins un. Une petite base peut n’avoir qu’un
seul administrateur. Une base importante peut en regrouper plusieurs qui se partagent les tâches
suivantes :
– Installation et mises à jour de la base et des outils éventuels ;
– Gestion de l’espace disque et des espaces pour les données (tablespaces) ;
– Gestion des utilisateurs et de leurs objets ;
– Optimisation des performances ; – sauvegardes, restaurations et archivages ; – contact avec le
support technique.
● L’administrateur réseaux (qui peut être le DBA) se charge de la configuration de
l’intergiciel (middleware) au niveau des postes clients.
● Les développeurs qui conçoivent et mettent à jour la base. Ils peuvent aussi agir sur leurs
objets (création et modification des tables, index, séquences, etc.). Ils transmettent au DBA leurs
demandes spécifiques (stockage, optimisation, sécurité).
● Les administrateurs d’applications qui gèrent les données manipulées par l’application
ou les applications. Pour les petites et les moyennes bases, le DBA joue ce rôle.
● Les utilisateurs qui se connectent et interagissent avec la base à travers les applications
ou à l’aide d’outils (interrogations pour la génération de rapports, ajouts, modifications ou
suppressions d’enregistrements).
Il arrive que plusieurs personnes travaillent simultanément sur une base de données.
Cependant, en fonction de leurs besoins, elles n'auront pas toutes la même utilisation de la
base au même moment et les mêmes privilèges sur les objets de la base des données (tables,
vues, etc.).

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


50

Certaines peuvent par exemple avoir besoin de modifier ou supprimer des données dans la
table, pendant que d'autres ont seulement un besoin de consultation de données, etc.
Ainsi, il est possible de définir des permissions pour chaque personne sur les objets bien identifiés
de la base des données. Cette tâche incombe à l'administrateur de la base de données (en anglais
DBA, DataBase Administrator). Il doit dans un premier temps définir les besoins de chacun, puis
les appliquer à la base de données sous forme de permissions.
Le langage SQL permet d'effectuer ces opérations grâce à deux clauses :
GRANT permet d'accorder des droits à un utilisateur (parfois plusieurs sur certains SGBD) .
REVOKE permet de retirer des droits à un utilisateur
(Ou plusieurs sur certains SGBD). Les permissions (appelées aussi droits ou privilèges) peuvent
être définies pour chaque clause. D'autre part, il est aussi possible de définir des rôles, c'est-à-dire
de permettre à d'autres utilisateurs d'accorder des permissions.
Les privilèges sont les clauses qui peuvent être autorisées ou retirées à un utilisateur. Les
principales sont :
- DELETE : pour supprimer les données d'une table ;
- INSERT : pour ajouter des données à une table ; - SELECT : pour
accéder aux données d'une table ; - UPDATE : pour mettre à jour les
données d'une table.
Seule la personne qui a créé un élément (table, vue ou index) a le pouvoir d'accorder ou
de retirer des droits.
4.2.1 Connexions
L’objectif de ce point est d’apprendre à gérer ces utilisateurs, leurs droits et de protéger les développeurs.
4.2.1.1 Création
IL existe deux façons d’ajouter un nouveau compte de connexion :
– Syntaxe 1
sp_addlogin
’Paul’, -- le login
’luaP’, -- le mot de passe
’Northwind’ -- la base par defaut
– Syntaxe 2 : hériter d’une connexion Windows
sp_grantlogin ’STID/Henri’ -- STID étant le nom du domaine
sp_defaultdb ’STID/Henri’, ’Northwind’
Il reste ensuite à lui donner accès au serveur :
sp_grantdbaccess ’Paul’

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


51

NB:
On dispose ´évidemment des procédures :
sp_revokedbaccess ’Paul’
sp_droplogin "Paul"
4.2.1.2 Création Rôles de serveur
Ce sont des rôles prédéfinis qui donnent aux connexions un certain nombre de fonctionnalités. Il
n’est pas possible de définir des rôles de serveur, par contre leur utilisation facilite la gestion en
cas de nombreux utilisateurs. Les rôles de serveur sont au nombre de huit :
• Sysadmin
Exécute n’importe quelle opération sur le serveur, c’est l’administrateur du serveur.
• Serveradmin
Permet de configurer les paramètres au niveau du serveur.
• Setupadmin
Permet d’ajouter/supprimer des serveurs liés et d’exécuter certaines procédures stockées
système telles que sp_serveroptions.
• Securityadmin
Permet de gérer les connexions d’accès au serveur.
• Processadmin
Permet de gérer les traitements s’exécutant sur SQL Server.
• dbcreator
Permet de créer et modifier les bases de données.
• diskadmin
Permet de gérer les fichiers sur le disque.
• bulkadmin
Peut exécuter l’instruction BULK INSERT pour une insertion des données par blocs. L’intérêt de
ce type d’insertion réside dans le fait que l’opération n’est pas journalisée et donc les temps
d’insertion sont beaucoup plus rapides.
4.2.2 Création, Modification et Suppression des Utilisateurs
a) Création Utilisateur
C’est par l’intermédiaire de l’instruction CREATE USER qu’il est possible de définir des
comptes utilisateurs au niveau de la base de données.
Syntaxe
CREATE USER nomUtilisateur

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


52

Attention : Il y a d'autres options à ajouter à cette requête SQL selon qu'on utilise un ou un autre
SGBD.
• Pour SQL SERVER Syntaxe1
CREATE USER nom_User
FOR LOGIN nom_login
WITH DEFAULT_SCHEMA=schemaParDefaut
b) Modification d'un Utilisateur
• SQL server
Syntaxe pour changer le nom d'un utilisateur en SQL Server :
ALTER USER nomUtilisateur
WITH NAME=nouveauNomUtilisateur,
DEFAULT_SCHEMA = nomNouveauSchema
c) Suppressions
La syntaxe SQL est la suivante pour supprimer un utilisateur est :
DROP USER utilisateur
NB : Lors de l’installation, vous avez dû noter la présence de l’utilisateur SA (mot de passe saisi
à l’installation). Cet utilisateur est le DBA que SQL SERVER vous offre. Il vous permettra
d’effectuer vos tâches administratives en ligne de commande ou par une console graphique (créer
des utilisateurs par exemple).
d) Rôles de base de données
Les rôles de bases de données permettent toujours de regrouper les différentes autorisations ou
refus d’instructions ou d’objets et ainsi de faciliter la gestion des droits. Il existe des rôles
prédéfinis et il est possible de définir ses propres rôles. Les modifications sur les rôles sont
dynamiques et les utilisateurs n’ont pas besoin de se déconnecter/reconnecter de la base pour
bénéficier des changements.
db_owner
Ensemble de droits équivalents au propriétaire de la base. Ce rôle contient toutes les activités
possibles dans les autres rôles de la base de données, ainsi que la possibilité d’exécuter certaines
tâches de maintenance et de configuration de la base. Tous les membres de ce groupe vont créer
des objets dont le propriétaire est dbo. Il s’agit du propriétaire par défaut de tous les objets et il
n’est pas nécessaire de le préciser pour manipuler ses objets.
db_accessadmin
Permet d’ajouter ou de supprimer des utilisateurs dans la base de données. Ces utilisateurs
correspondent à des connexions SQL Server ou bien à des groupes ou utilisateurs Windows.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


53

db_datareader
Permet de consulter (SELECT) le contenu de toutes les tables de la base de données.
db_datawrite r
Permet d’ajouter (INSERT), modifier (UPDATE) ou supprimer (DELETE) des données dans
toutes les tables utilisateur de la base de données.
db_ddladmin
Permet d’ajouter (CREATE), modifier (ALTER) ou supprimer (DELETE) des objets de la base
de données.
db_securityadmin
Permet de gérer les rôles, les membres des rôles, et les autorisations sur les instructions et les
objets de la base de données.
db_backupope rator
Permet d’effectuer une sauvegarde de la base de données.
db_denydatareader
Interdit la visualisation des données de la base.
db_denydatawrite r
Interdit la modification des données contenues dans la base.
Pour attribuer rôle de base de données à un user on exécute la requête SQL suivante :
exec sp_addrolemember 'db_accessadmin','REALM'
4.2.3 GRANT
4.2.3.1. Droits d’utilisation d’instructions
Les droits d’utilisation des instructions SQL pour créer de nouveaux objets au sein de la base sont
des autorisations pour réaliser l’exécution de certains ordres SQL. Un utilisateur qui dispose de
tels droits est capable par exemple de créer ses propres tables, ses procédures... L’accord de ces
droits peut être dangereux et comme pour tous les droits, doivent être accordés uniquement
lorsque cela est nécessaire.
Les droits principaux d’instructions disponibles sont :
• CREATE DATABASE
• CREATE PROCEDURE
• CREATE FUNCTION
• CREATE TABLE
• BACKUP DATABASE
• CREATE VIEW
• BACKUP LOG

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


54

L’accord de privilèges s’effectue en utilisant l’instruction GRANT dont la syntaxe est détaillée
ci-dessous.
GRANT permission [,...]
TO utilisateur[,...]
[ WITH GRANT OPTION ] permission
Permission
Nom de la ou des permissions concernées par cette autorisation. Il est également possible
d’utiliser le mot clé ALL à la place de citer explicitement la ou les permissions accordées.
Toutefois ce terme ALL ne permet pas d’accorder des privilèges d’exécution de toutes les
instructions mais simplement sur les instructions pour créer des bases de données, des tables, des
procédures, des fonctions, des tables vues ainsi que d’effectuer des sauvegardes de la base et du
journal.
Utilisateur
Nom de l’utilisateur ou des utilisateurs de base de données qui reçoivent les permissions.
WITH GRANT OPTION
Si la permission est reçue avec ce privilège, alors l’utilisateur peut accorder la permission à
d’autres utilisateurs de base de données.
Exemple1
GRANT CREATE TABLE, CREATE TRIGGER TO Paul, Henri
Remarque : Paul et Henri doivent déjà posséder un compte utilisateur sur SQL Server.
4.2.3.2. Droits d’utilisation des objets
Ces droits permettent de fixer quelles opérations (lecture, modification, ajout ou suppression)
l’utilisateur peut réaliser sur des données contenues dans une table, ou bien donner le droit
d’exécution d’une procédure stockée. Ces droits sont en général gérés par le propriétaire de
l’objet. En ce qui concerne le droit de lecture des données contenues dans une table (Utilisation
de l’instruction SELECT), il est possible de préciser quelles colonnes l’utilisateur peut visualiser.
Par défaut, il s’agit de toutes les colonnes. Les principaux droits d’utilisation des objets
concernant les tables, vues, procédures stockées correspondent aux ordres :
• INSERT
• UPDATE
• DELETE
• SELECT
• EXECUTE : qui ne s’utilise que pour les procédures stockées.
Les droits sont accordés par la commande GRANT dont voici la syntaxe :

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


55

GRANT {ALL [PRIVILEGES]|permission[(colonne,[,...])] [,...]}


ON objet[,...]

T O utilisateur [,...]

[WIT H GRANT OPT ION ]

NB : Les instructions SELECT et UPDATE peuvent être limitées à certaines colonnes de la table ou
de la vue. Il est cependant préférable de ne pas trop explorer cette possibilité car il en résulte un plus
grand travail administratif au niveau de la gestion des droits. Il est préférable de passer par une vue ou
bien une procédure stockée pour limiter l’usage de la table.
Exemple :
GRANT INSERT, SELECT, DELETE, UPDATE(ISBN) ON LivreTO Paul ;
Privilège objet table level :
Paul peut insérer, extraire, supprimer et modifier la colonne ISBN de la table Livre
4.2.4 Revoke
Permet de retirer des droits à un utilisateur (ou plusieurs sur certains SGBD)
4.2.4.1 Revoke sur les Instructions
Exemple1 : pour lever les autorisations et les empêchements de Paul
REVOKE CREATE VIEW, CREATE TABLE TO Paul
Exemple 2 pour empêcher Paul de créer des vues
DENY CREATE VIEW TO Paul
4.2.4.2 Revoke sur les Objets
Syntaxe avec SQL SERVER
REVOKE [GRANT OPT ION FOR ]
{ALL [PRIVILEGES]|permission[(colonne,[,...])] [,...]}
ON object [(colonne [,...])]
{FROM | T O} utilisateur [,...]
[CASCADE ]
GRANT OPT ION FOR

Exemples avec SQL server :


1. Retirer le droit de sélection à l’utilisateur ‘Jean' à la table personne
revoke select on personne to Jean
2. Retirer le droit d'insertion, de sélection, de suppression et de Mis à jour de la colonne code à
l’utilisateur ‘Jean' à la table personne
revoke INSERT, SELECT, DELETE, UPDATE(CODE) ON personne from jean
ou
revoke INSERT, SELECT, DELETE, UPDATE(CODE) ON personne To jean

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


56

4.3. Le Sauvegarde et la Restauration des bases des données Utilisateur s


La gestion des sauvegardes reste une des tâches les plus importantes qui doit être réalisée par
l’administrateur de bases de données. Si les opérations de sauvegardes sont planifiées avec
exactitude et rigueur, il est tout à fait envisageable de réaliser les sauvegardes sous forme de
travaux automatisés et le responsable sera prévenu par email du bon déroulement des opérations.
Les sauvegardes sont réalisées pour se prémunir des pertes de données suite à :
• Une panne de support,
• Des erreurs utilisateur,
• Une perte permanente du serveur.
Les sauvegardes SQL Server permettent de sauvegarder la base de données alors que des
utilisateurs y sont connectés. Cette sauvegarde va prendre en compte tous les fichiers constituant
la base de données et va enregistrer leur emplacement.
Bien que la base reste accessible durant la sauvegarde, certaines opérations sont impossibles, à
savoir :
• La création ou la modification d’une base de données (notamment l’extension
automatique du journal des transactions),
• La création d’un index,
• L’exécution d’opérations non journalisées car le processus de sauvegarde utilise le
journal pour garantir la cohérence des données.
Les utilisateurs membres d’un des rôles suivants sont capables de réaliser une sauvegarde de base
de données :
• Rôle de serveur sysadmin,
• Rôle de base de données db_owner,
• Rôle de base de données db_backupoperator.
4.3.1. Syntaxes pour faire le backup de la BD en T-SQL
Full Type
Backup database <Your database name> to disk=' <Backup file location + file name>'
Exemple
Backup database BD1 to disk='D:\BD1.bak'
Differential Type
Backup database <Your database name> to disk='<Backup file location + file name>' with
differential

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


57

Exemple
Backup database TestDB to disk='D:\TestDB_diff.bak' with differential
Log Type
Backup log <Your database name> to disk=' <Backup file location + file name>'
Backup log TestDB to disk= 'D:\TestDB_log.trn'
4.3.2 Syntaxe pour faire la restauration de la BD en T-SQL
Restore database <Your database name> from disk=' <Backup file location + file name>
Restore database BD1 from disk='D:\BD1.bak' with replace

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


58

CHAP.V. LA PROGRAMMATION ET GESTION RESEAU EN


SQL SERVER
5.1. LES TRIGGERS (DECLENCHEURS)
Introduction
Les déclencheurs sont donc des objets de la base qui nous permettent d’automatiser des actions.
Quelle est la particularité des déclencheurs du DML ? Ils vont nous permettre d’effectuer une
instruction, à chaque fois qu’une instruction du DML est effectuée pour une table donnée. Prenons
un exemple pour mieux comprendre : Nous avons deux tables qui fonctionnent ensemble, table1
et table2. Nous définissons un déclencheur du DML sur table1, qui fait en sorte que, si la table
table1 est mise à jour, les valeurs correspondantes dans table2 soit mise à jour de la même
manière. C’est de cette manière que nous allons automatiser les actions sur les objets de la base.
Pour une instruction donnée sur un objet, une action liée s’exécutera à la suite.
Tout d’abord, l’instruction CREATE TRIGGER est l’instruction DDL qui va nous permettre de
créer un déclencheur. Il est nécessaire de préciser le nom du déclencheur à la suite de cette
instruction, puisque comme tout objet de la base, un déclencheur peut être mentionné dans du
code seulement grâce à son nom unique. La clause ON va nous permettre de définir sur quelle
table nous allons définir le déclencheur que nous créons et les clauses AFTER, INSTEAD OF
nous permettront par la suite, de données les conditions d’action du déclencheur.
- AFTER : le déclencheur s’exécutera après insertion, mise à jour ou suppression dans la
table qui contient le déclencheur.
- INSTEAD OF : le déclencheur s’exécutera avant insertion, mise à jour ou suppression
dans la table qui contient le déclencheur.
Les délimiteurs des actions dans un déclencheur sont les clauses AS BEGIN et END. Tout le code
présent entre ces deux délimiteurs sera exécuté, à la seule condition que l’action déclenchant le
déclencheur soit faite auparavant.
Remarque : Les instructions suivantes ne sont pas autorisées dans le corps du déclencheur, à savoir
CREATE, DROP, ALTER, TRUNCATE, GRANT, REVOKE, UPDATE STATISTICS, RECONFIGURE
et LOAD.
CREAT E T RIGGER nom_trigger ON { table | vue }
[ WIT H ENCRYPT ION ]
{FOR | AFT ER | INST EAD OF } { INSERT , UPDAT E ,DELET E }
[ WIT H APPEND ] [ NOT FOR REPLICAT ION ]
AS
[ IF UPDAT E ( colonne )
| IF ( COLUMNS_UPDAT ED ( )opérateur_comparaison_bits)]
Instructions_SQL

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


59

WITH ENCRYPTION
La définition du déclencheur est enregistrée de façon cryptée. Il n’est donc pas possible de
connaître le code du déclencheur a posteriori. Cette option évite également que le déclencheur
soit publié dans le cadre d’une réplication.
FOR
Permet de préciser à quel ordre SQL DML le déclencheur est associé (soit update, delete ou
insert). Par défaut, le déclencheur est de type AFTER.
AFTER
C’est le mode par défaut des déclencheurs. Le code est exécuté après vérification des
contraintes d’intégrité et après modification des données.
INSTEAD OF
Le corps du déclencheur est exécuté à la place de l’ordre SQL envoyé sur la table ou la vue.
Ce type de déclencheur est particulièrement bien adapté pour les vues.
INSERT, UPDATE, DELETE
Un déclencheur peut agir par rapport à une ou plusieurs actions. Dans ce cas, on séparera les
actions par des virgules.
WITH APPEND
Cette clause n’est nécessaire que si le niveau de compatibilité de la base est inférieur ou égal à
65. Elle permet alors d’ajouter plusieurs déclencheurs sur un même ordre SQL et un même objet.
Ce comportement est celui par défaut depuis la version (70).
NOT FOR REPLICATION
Indique que le déclencheur ne doit pas être exécuté lorsque la modification des données est
issue d’un processus de réplication.
IF UPDATE (colonne)
Ne peut être utilisé que pour les déclencheurs UPDATE ou INSERT et ne s’exécutera que si la
ou les colonnes sont concernées.
IF (COLUMNS_UPDATED ( ) opérateur_comparaison_bits)
Cette fonction permet de connaître les indices de la ou des colonnes qui ont été mises à jour.
Pour chaque colonne affectée par la mise à jour, un bit est levé. Pour savoir quelles ont été les
colonnes mises à jour, une simple comparaison binaire suffit.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


60

Exemple:
ALT ER T RIGGER [dbo].[trigger2] ON
[dbo].[T 1] with encryption
for update
AS BEGIN
declare @x as int
set @x=COLUMNS_UPDAT ED( )
print 'Nbr ligne'+ cast( @x as varchar)
INSERT T 2 SELECT * FROM inserted
END

5.1.1 Déclencheurs AFTER


Un déclencheur est une procédure attachée à un événement, en anglais on dit TRIGGER. Ces procédures
se déclenchent automatiquement après que l’événement concerné (donc bien souvent à l’insu de
l’utilisateur) et ne peuvent être appelées directement.
Exemple :la table articles contient une colonne qui précise le nombre d’articles en commande ; pour mettre
à jour cette colonne lors d’insertion de nouvelles commandes on crée un déclencheur.
CREATE TRIGGER commandes_insert -- le nom du déclencheur
ON commandes AFTER INSERT -- la table et l’événement concernes
AS -- la programmation du declencheur
UPDATE articles SET nb_commande = nb_commande + cmd_qte
FROM articles AS a
JOIN inserted AS b ON (a.art_num = b.cmd_art)
(si plusieurs instructions : utiliser un bloc BEGIN ... END)
Quelques mots sur les tables inserted et deleted :
– Il s’agit de tables temporaires créées et disponibles pendant l’´évènement ;
– Leurs colonnes sont identiques à celles de la table sur laquelle l’´événement à et élever ; – le
déclencheur AFTER INSERT peut utiliser la table inserted qui contient toutes les lignes insérées ;
– Le déclencheur AFTER DELETE peut utiliser la table deleted qui contient toutes les lignes
supprimées ;
Le déclencheur AFTER UPDATE peut utiliser les deux tables (ce qui est logique puisqu’une mise-`a-
jour consiste en une insertion et une suppression). Autre exemple avec cette fois-ci la table deleted :
CREATE TRIGGER commandes_delete
ON commandes AFTER DELETE
AS
UPDATE articles SET nb_commande = nb_commande - cmd_qte
FROM articles AS a
JOIN deleted AS b ON (a.art_num = b.cmd_art)

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


61

Troisième exemple, sur mise-à-jour cette fois-ci : pour être tout à fait complet, il faut également un
déclencheur qui réagisse si la colonne cmd_qte est touchée par une mise à jour.
CREATE TRIGGER commandes_update
ON commandes AFTER UPDATE
AS
IF UPDATE(cmd_qte) -- si la colonne cmd_qte est touchée par la modification BEGIN
UPDATE articles SET nb_commande = nb_commande - b.cmd_qte + c.cmd_qte FROM articles AS
a
JOIN deleted AS b ON (a.art_num = b.cmd_art)
JOIN inserted AS c ON (a.art_num = c.cmd_art) END
Dernier exemple : on veut empêcher la modification du numéro ISBN d’un ouvrage.
CREATE TRIGGER ouvrages_update
ON ouvrages AFTER UPDATE
AS
IF UPDATE(isbn)
BEGIN
RAISERROR (’Le numéro ISBN ne peut pas être modifie’, 0, 1)
-- 0 indique la gravite de l’erreur et 1 l’état (a oublier)
ROLLBACK TRANSACTION
-- on annulle la transaction qui a déclenche l’événement END

5.1.2 déclencheurs INSTEAD OF


On les utilise si on veut que leurs instructions se lancent à la place de l’insertion, de la suppression ou de
la mise-à-jour qui a soulevé l’événement. Avec un déclencheur AFTER la modification des données a lieu
puis le déclencheur est exécuté, tandis qu’avec un déclencheur INSTEAD OF le corps du déclencheur se
substitue à la modification des données. D’un point de vue syntaxique, il suffit de remplacer AFTER par
INSTEAD OF. Exemple : on historise automatiquement les commandes insérées dans une table historique
commandes.
CREATE TRIGGER commandes_insert2
ON commandes INSTEAD OF INSERT
AS
BEGIN
INSERT commandes SELECT * FROM inserted
-- cette ligne fais l’insertion prévue
INSERT historique_commmandes SELECT * FROM inserted END

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


62

-- on aurait donc pu se contenter d’un déclencheur AFTER


-- avec seulement le 2e INSERT
Remarques :
– Les tables provisoires inserted et deleted existent et sont remplies pour les déclencheurs
INSTEAD OF (heureusement) ;
– Les déclencheurs INSTEAD OF ne se déclenchent pas eux-mêmes (heureusement) ; – il ne
peut y avoir qu’un déclencheur INSTEAD OF par événement et par table (alors qu’il peut y
avoir plusieurs déclencheurs AFTER) ;
– S’il existe une clé étrangère avec une action en cascade (DELETE ou UPDATE) dans la table,
alors on ne peut pas écrire le déclencheur INSTEAD OF correspondant, et inversement.
Pour modifier un déclencheur on a :
ALTER TRIGGER commandes_insert
... -- son nouveau code
Pour supprimer un déclencheur on a :
DROP TRIGGER commandes_insert
5.2. LES PROCEDURES STOCKEES
Procédures stockées
Pour SQL Server une procédure stockée peut être définie comme une suite d’instructions
Transact SQL, stockée dans la base de données et parfaitement identifiée par son nom. Les
procédures stockées (Stored Procedures) sont des objets correspondant à un ensemble
d’instructions du LMD, pouvant être exécutées par simple appel de leur nom ou par l’instruction
EXECUTE. Ce sont de véritables programmes pouvant recevoir des paramètres, renvoyer des
valeurs, être exécutés à distance, ayant leurs propres droits d’accès (privilège EXECUTE). De
plus, les procédures stockées sont stockées dans le cache mémoire sous forme compilée lors de
leur première exécution, ce qui accroît les performances (pour les exécutions suivantes !).
Syntaxe
a) Creation d'une procédure
Le langage Transact-SQL permet de programmer ces procédures selon la syntaxe suivante : a.1)
syntaxe:
CREATE PROC[EDURE] nom[;numero][(param1[,...])][{FOR
REPLICATION|WITH RECOMPILE}][WITH ENCRYPTION]AS instructions.
nom
Nom d’objet unique dans la base. Précédé d’un signe #, la procédure sera temporaire locale, avec
deux # elle sera temporaire globale.
Numéro

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


63

Numéro d’ordre pour des procédures ayant le même nom.


param1,... [ OUTPUT ], pouvant être passé à la procédure. OUTPUT permet de spécifier un paramètre
retourné par la procédure. FOR REPLICATION
Permet de préciser que la procédure sera utilisée lors de la réplication.
WITH RECOMPILE
La procédure sera recompilée à chaque exécution.
WITH ENCRYPTION
Permet de crypter le code dans les tables système.
Autres syntaxes.
CREATE PROC ... le nom de la procédure
(...) les paramètres d’entrée et de sortie séparés par des virgules
AS
DECLARE ... les variables locales
BEGIN
... les instructions, les transactions
END
Remarques :
– On peut utiliser jusqu’`a 1024 paramètres ;
– La syntaxe d’une procédure stockée est limitée `a 128 Mo.
b) Exemples
b.1) Une requête paramétrée
CREATE PROC InfoDuClient
(@numero INT) -- ne pas oublier de préciser le type
AS
SELECT *
FROM clients
WHERE clt_num = @numero
PROC´EDURES STOCK´EES 45
b.2) Autre exemple avec un paramètre de sortie :
CREATE PROC NbClients
(@resultat INT OUTPUT) AS
SET @resultat = (SELECT COUNT(*) FROM clients)
Utilisation de la Procédure avec paramètre en sortie.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


64

DECLARE @NombreTotalDeClients INT


EXEC NbClients @NombreTotalDeClients OUTPUT
Et après, on peut utiliser le contenu de la variable @NombreTotalDeClients
b.3) Dernier exemple avec un paramètre d’entrée muni d’une valeur par défaut :
CREATE PROC FiltrerClients

(@filtre VARCHAR(255) = "%")

AS
SELECT *
FROM clients
WHERE clt_nom LIKE @filtre
-- en l’absence de paramètre tous les clients seront affiches
c Modification d'une procédure stockée
Pour modifier une procédure stockée :
1 ALTER PROC InfoDuClient
2 (...) -- les paramètres
3 AS
4 ... -- nouveau corps
d Suppression d'une procédure stockée
Pour supprimer une procédure stockée :
1 DROP PROCEDURE InfoDuClient
e Utilisation
On peut ensuite utiliser ces procédures stockées dans du code SQL avec l’instruction EXEC.
Exemple : pour avoir les informations relatives au client 12
EXEC InfoDuClient 12
-- 12 est la valeur du paramètre
Remarques :
– On peut aussi utiliser des variables comme valeurs de paramètre (et pas seulement des
constantes comme dans l’exemple) ;
– Si la procédure a besoin d’une liste de paramètres, il faut les séparer par des virgules ;
– S’il y a un paramètre de sortie, il faut en stocker la valeur de retour dans une variable.

5.3 LES FONCTIONS


Fonctions utilisateur

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


65

On peut aussi définir ses propres fonctions.


a) Syntaxe :
CREAT E FUNCT ION nom_fonction ( [ liste_des_paramèt res] )
RET URNS type_données
[ WIT H ENCRYPT ION| WIT H SCHEMABINDING]
[ AS ] BEGIN
corps de la fonction
RET URN valeur
END

Explications :
CREATE FUNCTION ... (son nom)
(...) (ses paramètres)
RETURNS ... (le type de la valeur de retour)
AS
BEGIN
...
RETURN ... (la valeur de retour)
END
CREATE FUNCTION EcartEnHeure
(
@date1 DATETIME,
@date2 DATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(hour, @date1, @date2))
END
b) Utilisation de la fonction
declare @i int
set @i=dbo.EcartEnHeure('01 jan 2016 13:15:25','01 jan 2016 12:19:25') print
@i
Remarques :
– On peut mettre jusqu’`a 1024 paramètres ;
– On dispose de ALTER FUNCTION et de DROP FUNCTION.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


66

5.5 Gestion du réseau


5.5.0. APPROCHE
SQL Server utilise des bibliothèques réseau afin d’assurer la gestion de la transmission des
paquets entre le serveur et le client. Ces bibliothèques réseau, existant sous forme de DLL
(Dynamic Link Library), procurent toutes les opérations nécessaires pour établir le dialogue entre
le serveur et le client même si ces deux processus se trouvent sur le même poste. Ces bibliothèques
réseau sont utilisées par l’application via le mécanisme IPC ou Communication Inter Processus.
Un serveur peut être à l’écoute, simultanément, de plusieurs bibliothèques et accepte donc des
demandes provenant de clients dialoguant avec des protocoles réseau différents. La seule
obligation pour que le serveur puisse répondre au client est que la bibliothèque réseau
correspondant à celle du client doit être installée sur le serveur. Une fois que les bibliothèques
réseau sont installées sur le serveur, il faut encore configurer les net library afin que le serveur
puisse les prendre en compte. La gestion du réseau entre le poste client et le serveur passe
principalement par TCP/IP. C’est pourquoi la gestion de ce protocole est incluse par défaut lors
de l’installation du serveur ou bien des utilitaires clients.

Bibliothèques disponibles :
Canaux nommés
Les canaux nommés sont désactivés pour toutes les éditions de SQL Server. Leur utilisation se
limite au dialogue entre les outils graphiques et le service SQL Server sur le poste serveur.

Sockets TCP/IP (par défaut)

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


67

Cette net library permet d’utiliser les sockets Windows


traditionnels. Pour pouvoir utiliser correctement la net library TCP/IP, il est important de préciser
le numéro de port auquel SQL Server répond. Par défaut, il s’agit du port 1433, numéro officiel
attribué par l’IANA (Internet Assigned Number Authority) à Microsoft. Il est également possible
d’utiliser un proxy. Dans ce cas c’est l’adresse du proxy qui sera précisée lors de la configuration
de la net library TCP/IP.
Le port 1433 est utilisable par SQL Server si aucune autre application ou processus ne tente de
l’utiliser simultanément. Dans certains cas, comme l’accès au serveur au travers d’un pare feu, il
est conseillé d’utiliser un port libre portant un numéro inférieur à 1024.
NB:
• Dans le cas où SQL Server est configuré pour utiliser un port dynamique, le numéro du
port est susceptible de changer à chaque démarrage de SQL Server. La gestion dynamique
des ports TCP/IP est l’option de configuration à privilégier. Pour permettre au processus
client d’adresser les demandes sur le bon port TCP/IP, le service SQL Server Browser
se charge d’informer le processus client du numéro de port assigné à l’instance avec
laquelle il souhaite travailler. Dans le cas où plusieurs instances SQL Server sont
présentes sur le poste, ce service doit nécessairement être démarré.
• Attention, bien que le protocole TCP/IP soit le moyen de communication couramment
utilisé pour la communication entre différents postes via le réseau, ce protocole est
désactivé par défaut. Il n’est donc pas possible à des processus externes de se connecter
sur le serveur.
5.5.1 Configuration de réseau SQL Server
Le gestionnaire de configuration permet également de gérer quels sont les protocoles pris en
charge au niveau du serveur. Il est également possible à ce niveau de modifier les propriétés
spécifiques à chaque protocole comme le numéro du port d’écoute du protocole TCP/IP.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


68

5.5.2. Configuration de SQL Native Client 10.0


Cette fois-ci la configuration porte sur les outils client installés localement et plus exactement de
définir précisément les protocoles à leur disposition pour entrer en contact avec le serveur, mais
aussi, lorsque cela s’avère nécessaire, la possibilité de définir des alias. Cette fonctionnalité est
particulièrement intéressante lorsque le nom du serveur est enregistré dans une application et qu’il
n’est pas possible ou bien facile de modifier cet enregistrement. La définition d’un alias permet
de rediriger toutes les demandes vers un serveur distinct.

5.5.3 Utiliser un outil client pour se connecter à SQL Server


Pour établir la première connexion au serveur, plusieurs outils sont disponibles. En mode
graphique, il convient de lancer SQL Server Management Studio. Au lancement de l’outil, la
fenêtre suivante de connexion est présentée.

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


69

TABLE DES MATIERES

Les Objectifs .................................................................................................................................... i

PLAN DU COURS........................................................................................................................... i

BIBLIOGRAPHIE........................................................................................................................... ii

CHAP.I. INTRODUCTION GENERALE ......................................................................................... 1

1.0. BREVE HISTORIQUE DU LANGAGE SQL ET LE SQL SERVER .................................... 1

1.0.2 Brève Historique du langage SQL ..................................................................................... 2

1.1. Qu’est-ce qu’un SQL SERVER ? .................................................................................... 3

1.1.1 Les différentes éditions, leurs caractéristiques et les licences ............................................... 3

1.1.2 les Licences de SQL ......................................................................................................... 4

1.2. Mode de fonctionnement Client/Serveur .......................................................................... 4

1. 3. Les plates-formes possibles ............................................................................................ 5

1.4. Les composants de SQL Server ....................................................................................... 6

1.5 Base de données SQL Server............................................................................................ 7

1.5.1. Objets de base de données................................................................................................ 7

1.5.2. Bases de données système et tables système ...................................................................... 7

1.6 Installer SQL Server ........................................................................................................ 8

1.6.1. Les éditions de SQL Server.............................................................................................. 9

1.6.2 Déroulement de l’installation ............................................................................................ 9

1.8. DATABASE.................................................................................................................16

CHAP II. LA SYNTAXE DU LANGAGE SQL et LANGAGE SQL COMME LANGAGE DE


DEFINITION DES DONNEES.......................................................................................................18

2.1 Les Syntaxes du Langage SQL........................................................................................18

a) Commentaires .....................................................................................................................18

b) Noms d'objets......................................................................................................................18

c) Opérateurs...........................................................................................................................18

d) Variables ............................................................................................................................18

2.2. LANGAGE SQL COMME LANGAGE DE DEFINITION DES DONNEES ....................19

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


70

2.2.1. LES TABLES ................................................................................................................19

2.2.3 Contraintes .....................................................................................................................22

2.2.4 Vues...............................................................................................................................24

CHAP III. LANGAGE SQL COMME LANGAGE DE MANIPULATION DES DONNEES .............26

3.1 SQL INSERT INTO .......................................................................................................26

3.2 SQL UPDATE ...............................................................................................................27

3.3 DELETE........................................................................................................................28

CHAP. IV. SQL COMME LANGAGE D'INTERROGATION ET CONTROLE DES DONNEES ......29

4.1 SQL COMME LANGAGE D'INTERROGATION DES DONNEES .................................29

4.1.0 SQL SELECT .................................................................................................................29

4.1.1 ordre des commandes du SELECT ...................................................................................30

4.1.2. DISTINCT.....................................................................................................................30

4.1.3 AS (alias) dans SQL ........................................................................................................30

4.1.4. WHERE ........................................................................................................................31

4.1.5 IN..................................................................................................................................32

4.1.6 BETWEEN.....................................................................................................................33

4.1.7 LIKE ..............................................................................................................................33

4.1.8 SQL IS NULL / IS NOT NULL .......................................................................................34

4.1.9. Utilisation d’autres fonctions de statistiques .................................................................34

4.1.10 GROUP BY ..................................................................................................................35

4.1.11 SQL HAVING ..............................................................................................................35

4.1.12 SQL ORDER BY ..........................................................................................................36

4.1.13 SQL UNION.................................................................................................................37

4.1.14. Jointure SQL ................................................................................................................38

4.1.15. Quelques autres fonctions ..........................................................................................46

4.1.16 SQL Sous-requête..........................................................................................................46

4.2 SQL COMME LANGAGE DE CONTROLE DES DONNES ...........................................49

4.2.0 APPROCHE ...................................................................................................................49

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022


71

4.2.1 Connexions .....................................................................................................................50

4.2.2 Création, Modification et Suppression des Utilisateurs.......................................................51

4.2.3 GRANT..........................................................................................................................53

4.2.4 Revoke ...........................................................................................................................55

4.3.1. Syntaxes pour faire le backup de la BD en T-SQL ............................................................56

4.3.2 Syntaxe pour faire la restauration de la BD en T-SQL........................................................57

CHAP.V. LA PROGRAMMATION ET GESTION RESEAU EN SQL SERVER ..............................58

5.1. LES TRIGGERS (DECLENCHEURS) ..........................................................................58

5.1.1 Déclencheurs AFTER......................................................................................................60

5.1.2 déclencheurs INSTEAD OF .............................................................................................61

5.2. LES PROCEDURES STOCKEES..................................................................................62

5.3 LES FONCTIONS .........................................................................................................64

5.5 Gestion du réseau ...........................................................................................................66

5.5.0. APPROCHE ..................................................................................................................66

5.5.1 Configuration de réseau SQL Server .................................................................................67

5.5.2. Configuration de SQL Native Client 10.0.........................................................................68

5.5.3 Utiliser un outil client pour se connecter à SQL Server ......................................................68

EXERCICES D'APPLICATION ......................................................................... Erreur ! Signet non défini.

TABLE DES MATIERES...............................................................................................................69

Ir. Héritier Kangela. SQL Server L1 Info ISC-GOMA 2021-2022

Vous aimerez peut-être aussi