Vous êtes sur la page 1sur 96

Cours SQL SERVER

Ibrahim Rahhal Février 2023

1
Plan

 1er chapitre : Le Transact SQL:


o Installer SQL Server et management Studio.
o Créer une base de données et une table.
o Requêtes SQL (SELECT,INSERT,UPDATE,DELETE etc...).
o Requêtes avancées avec LIKE, le GROUP BY, le DISTINCT etc...
o Les fonctions d’agrégations (MIN, MAX, AVG et autres).
o Les fonctions de type chaîne (SUBSTRING, FORMAT, LEFT et RIGHT, CONCAT
etc... ).
o Les jointures
o Les fonctions de type DATE
o Allez plus loin dans le TSQL (MERGE, CHOOSE,IIF, le CASE WHEN).
o Les Contrôles de flux avec BEGIN TRY et BEGIN CATCH, puis IF et ELSE.
o Les fonctions de RANKING
o Les fonctions de Conversion avec TRY CAST et TRY CONVERT
o Le CTE (common table expression)
o Quelques TIPS SSMS
2
Plan

 2eme chapitre : L'administration complet d'un Serveur SQL

o Les BACKUP et les RESTORE


o Détecter et réparer la corruption sur une Base de données
o Le cloud sur SQL Azure
o La sécurité et la gestion des privilèges
o La configuration et modification d’une base de données sur SQL.
o Le mode d'isolation
o Les triggers, les vues, les procédures stockées
 3eme chapitre : Comment améliorer les performances du serveur SQL de
production

o Les index
o Optimisation du moteur SQL
o Les requêtes SARGABLE
o Améliorer les performances des procédures stockées
3
Introduction

 Le dictionnaire de données et le noyau: gèrent les objets de la


base de données (Tables, les colonnes, les contraintes
d’intégrité etc..) et les utilisateurs avec leur privilèges . Cette
couche gère également l’optimisation de requêtes

 La couche SQL: gère les commandes SQL. Cette couche


respecte un standard. Elle est la même pour tous les SGBDR.
Ce qui veut dire: Si vous connaissez le SQL d’ORACLE alors vous
connaissez le SQL de MS SQL Server, de MySQL, de SQLite…

 La couche extension du SQL: différente d’un SGBD à l’autre.


C’est dans cette couches qu’on retrouve les procédures et les
fonctions stockées ainsi que les déclencheurs. Pour Oracle on
l’appelle PL/SQL. Pour MS SQL Server on l’appelle Transact-
SQL.

Notre cours va se situer au niveau de la couche Extension du SQL


et un peu au niveau du noyau pour la gestion des utilisateurs.
4
Introduction

Microsoft SQL Server est un Système de gestion de base de données relationnel et


transactionnel développé et commercialisé par Microsoft.

Microsoft SQL Server utilise le langage T-SQL (Transact-SQL) pour ses requêtes, c'est une
implémentation de SQL qui prend en charge les procédures stockées et les déclencheurs.
Vous avez étudié SQL. Il faut savoir que, tous les SGBDs relationnels (Oracle, MS SQL Server,
MySQL, SQLite, DB2, PostgreSQL ..) utilisent un SQL standard. Ce qui implique que TOUS
ce que vous avez appris durant le cours de « Introduction aux bases de données » s’applique et
reste valable pour les autres SGBDs à quelques exceptions près.

• La Commande CREATE TABLE reste la même. Mais certains SGBDs comme Oracle, MS
SQL Server, et MY SQL ont implémenté le concept de l’incrémentation automatique de la clé
primaire.
• La commande ALTER Table est la même. De même que la commande DROP Table.
• La commande SELECT reste la même. Les jointures se font au niveau du FROM et non au
niveau du WHERE.
• Sauf le SQLite, les SGBD cités plus haut sont TOUS des SGBDS SERVEURS.

5
Introduction

Tous les SGBDs offrent une interface ou un logiciel de gestion des bases de données. Pour
Oracle, c’est SQL Developer. Pour MS SQL Server c’est SQL Server Management Studio,
pour MySQL c’est MySQL Workbench, pour SQLite c’est SQLite DB Browser.

• Les SGBD sont très différents concernant l’extension de la couche SQL. Ils sont
différents pour l’écritures des procédures stockées et des triggers. Cette session, nous
allons étudier le Transact-SQL qui est l’extension du SQL pour MS SQL Server
• L’interface graphique de SQL Server Management Studio permet de créer directement la
base de données à l’aide du schéma. En d’autres mots, pas besoin de générer le code SQL
du diagramme pour l’exécuter puisque les tables sont déjà créées.
• Ce qu’il faut savoir pour la suite du cours, c’est que votre poste de travail est à la fois
serveur et client.

6
Installation & configuration

Si vous n’avez pas déjà installé SQL server, vous devez le faire. L’installation de la base de
données est très simple et se fait automatiquement.
Nous avons besoin d’installer :
1- Le serveur de bases de données :
Vous devez aller sur le site suivant pour télécharger et installer SQL Server Express.
https://www.microsoft.com/fr-ca/sql-server/sql-server-editions-express

Vous devez choisir installation Standard, et tout se déroule automatiquement.

2- L’outil de gestion de bases de données


Une fois que le serveur est installé, vous devez installer SSMS version 18.2 (SQL Server
Management Studio), ce qui vous permet de gérer et d’exploiter vos bases de données avec
SQL Server. Pour cela vous devez vous rendre sur le site :
https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studiossms?vie
w=sql-server-2017
Attention :
Il faut redémarrer l’ordinateur pour que l’installation soit complète
7
Installation & configuration

8
Installation & configuration

9
Installation & configuration

Il faut changer ca et mettre


localhost

10
Installation & configuration

Si votre serveur ne démarre pas, il faudra le faire manuellement :

11
Qu’est ce qu’une BDD (Base de donnée)?

• Une Base de donnée est un conteneur qui nous aide à organiser les données.

• Elle permet de stocker et de retrouver l'intégralité des données dans la BDD.

• Cela sera beaucoup plus facile pour interroger les données, les Mettre à
jour, supprimer les Données obsolètes etc…

Par exemple :
Si on a plusieurs fichiers Excel, ou toutes les données sont éparpillées sur ces différents
fichiers, pourquoi ne pas centraliser toutes ces données dans une même BDD?

On peut avoir au maximum 32 767 BDD


(Base de donnée) sur une instance
(installation) SQL Server.
12
Création d’une BDD (Base de donnée)?

• On va créer une base de donnée a l’aide de l’interface graphique et l’aide d’une commande
Create database BDB

• Modification (Renommer) une base de donnée avec requête et sur l’interface graphique
Alter database BDD modify name = new_BDD;
GO

• Supprimer une base de donnée


Drop database new_BDD

13
Qu'est ce qu'une Table ?

• Une table est constituée des lignes et de colonnes,

• Chaque ligne correspond a un enregistrement de donnée.

Colonne

Ligne
Nom Prenom
1 Adam Smith

Il faut indiquer la base de d donnée


avant avec:
USE BDD;

14
Table – Types de données

Types numériques exacts

Type À partir de À
bigint -9.223.372.036.854.775.808 9.223.372.036.854.775.807
int -2147483648 2147483647
smallint -32768 32767
tinyint 0 255
bit 0 1
Decimal -10 ^ 38 1 10 ^ 38 -1
numeric -10 ^ 38 1 10 ^ 38 -1
money -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

15
Table – Types de données

Numerics approximatif

Type À partir de À
float 1,79 E + 308- 1,79 E + 308
reel -3.40E + 38 3.40E + 38

datetime et smalldatetime

Type À partir de À
datetime (3,33 exactitude millisecondes) 1 janvier 1753 31 déc 9999
smalldatetime (précision de 1 minute) 1 janvier 1900 6 juin 2079

Chaînes de caractères

Type Description
De longueur fixe de caractères Unicode avec une longueur
char
maximum de 8000 caractères.
varchar Texte unicode de longueur variable allant jusqu’à 2 Go.
text Texte non unicode de longueur maximale 2Go

16
Table – Types de données

Les chaînes de caractères Unicode

Type Description
la longueur de données Unicode-fixe avec une longueur
nchar
maximale de 4000 caractères.
la longueur de données Unicode et variable, avec une longueur
nvarchar
maximum de 4000 caractères.
nvarchar longueur Unicode données variables avec une longueur maximale
(max) de 230 caractères (SQL Server 2005 uniquement).
la longueur de données Unicode et variable, avec une longueur
ntext
maximale de 1073741823 caractères.

17
Supprimer et renommer une table

• La modification d’une table passe par la commande (Procédure Stockée) Sp_rename.

• La suppression d’une table passe par la commande DROP TABLE.

Syntaxe:
Renomme moi La table actuelle

sp_rename ‘ma_table’ , ‘ma_table2’


Avec son nouveau nom

18
Exercice

• Pouvez vous me créer une BDD s’appelant Debutant via Management Studio et en
Transact SQL ?

• Il faudra ensuite la renommer en Debutant2 et à la fin la supprimer.

• Pouvez vous me créer une simple table se nommant Simple_table, avec les colonnes
suivantes (colonne_1 et colonne_2) avec le type de données NCHAR(10) ?

• Pouvez vous me créer cette même table en TRANSACT (TSQL) ?

• Pouvez vous aussi me renommer cette table Simple_table en Simple_table2 et


ensuite la supprimer ?

19
Insertion des données

• Insérer des données sur SQL, se lance par un simple INSERT.

Syntaxe:

Insere moi la ligne Ma table

Insert into ma_table values (‘Olivier’)


La valeur souhaitée
A l’interieur de
La valeur

20
Sélectionner des données

• Sélectionner et extraire des données sur SQL, se lance par un simple SELECT.

• Filtrer les données avec la clause WHERE, le WHERE se place après le nom de la table0

Syntaxe: Ma table
Sélectionne moi A partir de

Select * from ma_table where nom=‘peter’ Nom de ma colonne


et valeur

Ou sont mes données?


* = Toutes les colonnes de la table

21
Mettre a jour des données

• Mettre a jour des données sur SQL, se lance par un simple UPDATE.

Syntaxe:
Fixe moi la colonne &
Met a jour la ligne La table valeur

Update ma_table set colonne1= ‘olivier’

• Mettre a jour deux colonnes.


Update ma_table set colonne1= ‘olivier’ , colonne=‘Corbet’ where nom=‘Peter’

22
Les commentaires et les crochets en TSQL

• Les commentaires peuvent etre ajouter a l’aide de -- ou via la platform du SSMS,

• Concernant les crochets, ils sont utile lorsque le nom d’une colonne dans un table contient un
espace.

Create table ma_table ([colonne avec espace] varchar(10))

Select colonne avec espace from ma_table

Select [colonne avec espace] from ma_table

Aussi les mots réservés a SQL > create table table_SAL ([Table] varchar(20))

23
Insérer plusieurs valeurs identiques très simplement

 Create table classique (ID int)


 Insert into classique values (1)
 Select * from classique

Si je veux insérer la meme valeur 10 fois, il faut répéter la requête d’insertion 10 fois, ce qui
devient tres long. On peut changer ca pour avoir:

 Insert into classique values (1)


 Insert into classique values (1)
 Insert into classique values (1)
 Insert into classique values (1)
 Insert into classique values (1)  Insert into classique values (1)
 Insert into classique values (1)  go 10
 Insert into classique values (1)
 Insert into classique values (1)
 Insert into classique values (1)
24
Supprimer des données

• Supprimer des données sur SQL, se lance par un DELETE.

Syntaxe:
Supprime la ligne A partir

Delete from ma_table


Ma table

25
Exercice

1/ Créez moi une table se nommant Etudiant avec trois colonnes suivantes en TSQL :
• Nom en VARCHAR (200).
• Prénom en CHAR (10).
• Age en INT.

2/ Ensuite insérez 5 lignes, il faut que vous ayez ces 5 valeurs dans cette table :

3 / Sélectionner l’étudiant qui s’appelle Teslu.

4 / Mettre a jour l’âge de l’étudiant Teslu à 20 ans.

5/ Supprimer de la table l’étudiant qui s'appelle Virenque Michel.


26
Renommer les colonnes avec les alias

Il faut savoir que l’on peut renommer une colonne dans le SELECT,
par un alias en utilisant le AS:

Select nom as surnom from etudiant

27
L’opérateur LIKE

Pour affiner les recherches avec le WHERE, on peut lui attribuer


l’opérateur LIKE.

Select * from contact where nom like ‘%u%’

Le %U% va chercher dans tous les


lignes de toute la colonne Nom,
toutes les noms qui comportment
un U

• ‘2%’ tout ce qui commence avec 2


• ‘%2’ tout ce qui finit avec 2
• ‘F[oa]urnillet’ pour chercher Faurnillet et Fournillet

28
Sélectionner un nombre de lignes

Spécifie que seul le premier ensemble de lignes sera renvoyé par la


requete.

SELECT TOP (1) * from ma_table

La première ligne

 On peut l’utiliser aussi pour un update et delete


Delete TOP (1) * from ma_table
Update TOP (5) ma_table set nom = ‘Farid’

29
Enlever les doublon avec distinct

• Il supprime les valeurs dupliquées dans une colonne.

Categorie
Informatique
Communication
Select distinct * from categorie
Deux lignes Informatique
identiques Analyse
Enlève moi les doublons

Categorie
Informatique
Communication
Analyse

30
Copier une table via select into

Copier une table sur SQL passe par la commande SELECT INTO

 Faire des modification sur la table principal et garder une sauvegarde


par sécurité.
Dans cette nouvelle table

Select * into contact_2 from contact


Copie moi A partir de cette table

Pour copier juste une colonne il faut ajouter le nom de la colonne a la


syntaxe.
Select age into contact_5 from contact

Pour copier juste quelques données, il faut ajouter la condition WHERE.


Select * into contact_6 from contact where nom = ‘peter’

31
Les opérateurs de comparaison

Il existe plusieurs opérateurs de comparaison:

• = Egal (celui que vous utilisez pour le Where)


• < Inférieur
• <= Inférieur ou égal
• > Supérieur
• => Supérieur ou egal
• <> ou =! Différent

Syntaxe:

Select * from contact where nom <> (‘peter’)

32
Les opérateurs IN , NOT IN, IS et IS NOT NULL

• Détermine si une valeur spécifiée correspond ou pas, a une valeur


dans une liste.

Select * from contact where nom not in (‘rami’)

Sélectionne moi
Ma liste de valeur

• S’utilise pour Sélectionner des valeurs NULL(vides) ou pas

Select * from contact where date_de_naissance is not


null

Sélectionne moi
Les valeurs NULL ou pas

33
Trier avec ORDER BY

• Cela permet de trier les lignes dans un résultat d’une requete SQL.

• Il est possible de trier les données sur une ou plusieurs colonnes,


par ordre ascendant ou descendant(asc, desc).

Exemple:
Select * from contact order by age asc

Les ages sont triés du plus petit au plus grand

Select * from contact order by nom


Select * from contact order by year(date_de_naissance)
34
Les opérateurs AND et OR

L’opérateur AND permet de joindre plusieurs conditions dans une requete.

Il s’applique au filter WHERE

La clause AND requiert que les deux conditions soient remplies pour
retourner la requete.

Syntaxe:

Select * from contact where year(date_de_naissance) =1976 and age > 16

Les personnes qui sont nées en 1976 Et aussi ceux qui ont plus de 16

Select * from contact where sexe =‘M’ and age < 41


Select * from contact where month(date_de_naissance) =06 and age > 16

35
Les opérateurs AND et OR

Il s’applique aussi au filter WHERE

La clause OR requiert qu’une conditions soit remplie pour retourner la


requete.

Syntaxe:

Select * from contact where nom =‘peter’ OR nom=‘virenque’

La personne qui a le nom Peter Ou soit le nom Virenque

Select * from contact where month(date_de_naissance) =06 OR age=101

36
L’opérateurs Between

L’opérateur BETWEEN est utilisé dans une requete SQL pour sélectionner
un intervalle de données dans une requete utilisant WHERE.

Exemple:

Select * from contact where age between 16 and 33

Select * from contact where year(date_de_naissance) between 1976


and 1993 order by date_de_naissance asc

37
Regrouper les données avec Group BY

La commande GROUP BY est utilisée en SQL pour grouper plusieurs


résultats.

select count(*) as total, sexe, date_de_naissance as total from contact


where sexe = ‘M’ and year(date_de_naissance) = 1976
Group by sexe, date_de_naissance

Regroupe mois les données sur la colonne sexe et date de naissance

Il faut toujours regrouper apres une fonction d’aggregation si non ca ne


vas pas marcher.

select count(*) as total, sexe, date_de_naissance as total from contact


where sexe = ‘M’ and year(date_de_naissance) = 1976

38
L’opérateurs HAVING

• La condition HAVING en SQL est similaire a WHERE sauf que


HAVING permet de filtrer en utilisant les fonctions SUM(),
COUNT(), AVG (), MIN (), ou MAX ().

• On le met apres le GROUP BY

Exemple:
select count(*) as total, sexe, age from contact
where sexe = ‘M’ and age between 20 and 30
Group by sexe, age
Having count(*) => 2

39
La commande PRINT

Retourne un message défini par l’utilisateur au client.

Exemple:

select * from contact


print ‘selection de la table ok’

Pour afficher l’emplacement de notre insertion

40
UNION et UNION ALL

• C’est une commande qui permet de concaténer les résultats de 2


requetes ou plus.

• Il faut par contre que chacune des requetes a concaténer retourne


le meme nombre de colonnes.
Nom Prenom age
Exemple:
Karim Zahi 56
Client 1
Nom Prenom age Ada rami 55
Select * from client1 Union m
Karim Zahi 56
select * from client2 Zineb Bardi 66
Adam rami 55 Nom Prenom age
Client 2 Karim Zahi 56
Nom Prenom age Ada rami 55
Adam rami 55 Select * from client1 Union m
ALL select * from client2
Zineb Bardi 66 Ada rami 55
m
41
Zineb Bardi 66
Exercice

1 : Afficher le résultats de la colonne âge sans doublons.

2 : Sélectionnez les dates de naissance commençant par 1976, en renommant la colonne


Année_1976.

3 : Sélectionnez les personnes qui sont nées le 1er janvier.

4 : Sélectionnez les prénoms qui finissent par la lettre E.

5 : Une requête sortant juste les femmes(de 2 façons différentes).

6 : Sélectionnez dans la requête les personnes qui ont 17 ans et moins de 17 ans.

7 : Sélectionnez juste les personnes qui n'ont pas 17 ans et 48 ans.

8 : Prenez juste les 7 premières lignes de la table.

9 : Copiez juste la ligne de Mr Portail Bruno dans une autre table s'appelant Portail.

10 : Sélectionnez juste les personnes qui ne sont pas nées en 1976.

11 : Sélectionnez juste les personnes qui ne sont pas nées au mois d’Aout.
42
Les function d’agrégation

• Min : retourne la valeur minimum d’une colonne


select min(age) from contact

• Max : retourne la valeur maximum d’une colonne


select max(age) from contact

• AVG : retourne la moyenne des valeurs d’une colonne


select avg(age) from contact

Exemple:

select min(age) from contact where year (date_de_naissance) = 1976

Select max(age) from contact where prenom like ‘E%’

Select max(nom) from contact

43
Les function d’agrégation

• La function d’agrégation SUM() permet de calculer la comme total


d’une colonne contenant juste des valeurs numériques.
select sum(age) from contact

• La function d’agrégation COUNT() va compter toutes les lignes d’une


colonne , pour tous les types de colonnes
select count(nom) from contact

Exemple:

select count(distinct prenom) from contact

Select sum(1) from contact

Select sum(age) from contact where sexe = ‘F’

44
Exercice

• Comptez le nombre de personnes dont le prenom est ludivine.

• Faite la somme de femmes qui sont nées en 1983

• Comptez le nombre d’homes qui ont entre 20 et 45 ans don’t le


nombre est superieur a 1 en classant l’age par ordre décroissant.

• Comptez les lignes distinctes dans la colonne sexe.

• Inserer deux lignes dans la table contact et imprimez le resultats.

• Sélectionnez les personnes qui n’ont pas entre 20 et 27 ans

• Comptez les personnes qui ont la letter A dans leur prenom, qui
ont entre 18 et 40 ans, de sexe masculin et don’t le total est
supérieur a 1

45
La commande SUBSTRING

La commande SUBSTRING permet d’extraire une chaine de caractere


a partir de la longuer specifiée.

Syntaxe:

Substring(prenom,2,4) va prendre a partir du deusieme caractere et


va s’arreter au 4 eme caractere qui le suit.

46
TRIM/LTRIM/RTRIM UPPER et LOWER

• LTRIM supprime les caracteres specifié au début d’une chaine.

• Attention TRIM n’est apparu qu’a partir de SQL Server 2017

• RTRIM supprime les caracteres specifié a la fin d’une chaine.

On teste ca

47
TRIM/LTRIM/RTRIM UPPER et LOWER

• TRIM pour supprimer les espaces des deux cotés.

48
TRIM/LTRIM/RTRIM UPPER et LOWER

• UPPER et LOWER permet de transformer un texte en minuscule


et en majuscule.

49
La function FORMAT

Utilisez la function FORMAT pour la mise en forme comme chaines de


valeurs de date/heure et de valeurs numériques compatible avec les
parametres régionaux.

 Fonction tres utiles pour les développeur au lieu d’utiliser le convert

Syntaxe:
FORMAT (value, format [,culture])
Exemple:

Si on met D
au lieu du d

50
La function FORMAT

Exemple:

51
LEFT et RIGHT

• Permet d’extraire la fin d’une chaine de caracteres en définissant la


longueur souhaité.

52
Replace et LEN

• Replace remplace toutes les occurrences d’une valeur de type


chaine specifiée par une autre valeur de type chaine,

Syntaxe:

Replace (string_expression, string_pattern, string_replacement)

Exemple:

53
Replicate/Reverse/Charindex

• Replicate répete une valeur de chaine un nombre spécifié de fois.

Syntaxe:

Replicate(string_expression,integer_expression)

54
Replicate/Reverse/Charindex

• Reverse retourne l’ordre inverse d’une valeur de chaine.

exemple:

55
Replicate/Reverse/Charindex

• Charindex cette function recherche une expression de caracteres


a l’intérieur d’une deuxieme expression de caracteres, retournant
la position de départ de la premiere expression si elle est trouvée.

exemple:

56
STRING_SPLIT/STUFF

• String Split fractionne l’expression de caracteres a l’aide du


séparateur spécifié.
• Attention il faut l’utiliser en mode de compatibilité 130 sinon ca va
retourner une erreur

exemple:

57
Concat et Concat_ws

• Concat retourne une chaine qui résulte de la concatenation ou de


la jointure de deux valeurs de chaine ou plus, de bout en bout

Suntaxe:

Concat(string_value1, string_value2 [, string_valueN] )

exemple:

58
Introduction sur les jointures

59
Les jointures

60
Les jointures

61
INNER JOIN

C’est une jointure interne pour retourner les enregistrements quand


la condition est vrai dans les deux tables. C’est l’une des jointures les
plus utilisées.

Left right
table table

Syntaxe: Selectionne moi la colonne client de la table commande (alias A)

En faisant la jointure sur la table client (alias B)

En specifiant les deux colonnes sur lequel on fait la jointure


62
INNER JOIN

Exemple:

 Afficher les clients qui ont un numero de commande

 Si je veux afficher le nom et le prenom aussi

63
LEFT/RIGHT JOIN

LEFT JOIN c’est une jointure externe pour retourner tous les
enregistrements de la table gauche, avec les valeurs correspondantes
de la table de droite.

Avec le filtre IS NULL


Avec le filter sur un LEFT JOIN, on va ramener juste les lignes de la
table de gauche, et qui n’a aucune concordance avec la table de
droite,

64
LEFT/RIGHT JOIN

RIGHT JOIN c’est une jointure externe pour retourner tous les
enregistrements de la table de droite, avec les valeurs
correspondantes de la table de gauche.

Avec le filtre IS NULL


Avec le filter sur un RIGHT JOIN, on va ramener juste les lignes de la
table de droite, et qui n’a aucune concordance avec la table de
gauche.

65
LEFT/RIGHT JOIN

Quel client n’est pas rataché a un IDCLIENT dans la table commande?

 Faite la meme choase avec le RIGHT JOIN


66
FULL JOIN

• L’utilisation de cette commande permet de combiner les résultats


des 2 tables, les associer entre eux grace a une condition et
remplir avec des valeurs NULL si la condition n’est pas respectée.

Avec le filtre IS NULL


Avec le filter sur un FULL JOIN, on va ramener toutes les lignes de la
table A et de la table B, mais pas les données qui concordant entre
elles.

67
FULL JOIN

Exemple Si je change
l’ordre des tables

68
CROSS JOIN

• La jointure croisée n’est autre que le produit cartésien de deux


tables. Le produit cartésien sur SQL de deux ensembles n’est autre
qu’unr multiplication géneralisée.

• Donc si on prend deux tables, cela va associer les lignes de la


premiere table, a la deusieme.

Syntaxte:
Select * from table_client CROSS JOIN Commande

Le nombre de ligne resultat va etre le resultat du produit des lignes


des deux tables

69
Jointures sur plusieurs tables

On va creer une nouvelle table pour l’inclure dans les jointures

70
LEFT JOIN VS NOT IN VS NOT EXISTS

71
Faire un update avec les jointures

72
EXCEPT / INTERSECT

• EXCEPT:
EXCEPT retourne les lignes
distinctes da le requete d’entrée a
gauche mais non trouvées par la
requete d’entrée a droite.

• INTERSECT:
INTERSECT retourne des lignes
distinctes qui sont générées par
les deux entrées, droite et gauche.

• L’ equivalent correspond aux


jointures:

73
EXCEPT / INTERSECT

• EXEMPLE:

Gain en temps d’execution lors d’utilisation du join

74
EXCEPT / INTERSECT

• EXEMPLE:

Gain en temps d’execution lors d’utilisation du EXCEPT

75
CROSS APPLY et OUTER APPLY

• CROSS APPLY = jointure interne


• OUTER APPLY = LEFT JOIN

Nom de la table dérivé, sinon la requete


ne fonctionne pas

76
Exercice 1 – les jointures

77
Exercice 2 – les jointures

78
Exercice 3 – les jointures

79
Exercice 4 – les jointures

80
Exercice 5 – les jointures

81
Exercice 6 – les jointures

82
Les fonctions DATE: DATEADD/DATEDIFF

• DATEADD: Cette function ajoute une valeur number spécifiée


(entire signé) au datedepart spécifié d’une valeur d’entrée date,
puis retourne la valeur modifiée.

Syntaxe:
DATEADD(datepart, number, date)

Exemple:

83
Les fonctions DATE: DATEADD/DATEDIFF

• En rajoutant deux jours

• Allons un peu plus loin

84
Les fonctions DATE: DATEADD/DATEDIFF

• DATEDIFF: Cette fonction retourne le nombre (valeur entire


signée) de limites datepart spécifiées, traversées entre les valeurs
start date et enddate spécifiées,

Syntaxe:
DATEDIFF(datepart, startdate, enddate)

Exemple:

85
DATENAME/DATEPART/GETDATE/GETUTCDATE

• DATENAME: Retourne une chaine de caracteres qui représente la


partie datepart de la date spécifiées.

Syntaxe:
DATENAME(datepart, date)

Exemple:

Aout

86
DATENAME/DATEPART/GETDATE/GETUTCDATE

• DATEPART: Retourne un entier qui représente la valeur datepart


précisée de la date spécifiées.

Syntaxe:
DATEPART(datepart, date)

Exemple:

87
DATENAME/DATEPART/GETDATE/GETUTCDATE

• GETDATE() et GETUTCDATE: fonctions permettant de savoir la date


du jour.

Exemple:

- 1h de difference, car la deuxième représente l’heure UTC time (Universal Time


Coordinate or Greenwich Mean Time)

88
EOMONTH

• EOMONTH : permet d’avoir le dernier jour du mois courant.

• Exemple:

89
OFFSET et FETCH NEXT ROWS

• La clause OFFSET-FETCH vous offre la possibilité d'extraire uniquement


une fenêtre ou une page de résultats à partir du jeu de résultats.
-- ORDER BY est obligatoire avec les clauses OFFSET et FETCH.
-- OFFSET : Indique le nombre de lignes à ignorer
-- FETCH : Indique le nombre de lignes à retourner, après le traitement de la clause
OFFSET.

-- Exemple:
Je veux les 10 lignes suivantes de ma table lors de mon SELECT

90
OFFSET et FETCH NEXT ROWS

91
MERGE

• MERGE permet d’extraire des lignes d’une table source afin de faire
un UPDATE, DELETE ou INSERT dans une table cible.
• Cela evite d’ecrire des modification multiples en plusieurs
instructions.

• Exemple:

 Voir sur sql server management

92
CASE WHEN

• Evalue une liste de conditions et retourne une expression de


résultat parmi plusieurs possibilités.

• Exemple:

93
CASE WHEN

• Exemple:

94
CHOOSE

Retourne l’élément a l’index spécifié a partir d’une liste de valeurs


dans SQL SERVER.

NULL

95
CHOOSE

select *, case datepart(month,date_de_naissance)


when 1 THEN 'Janvier'
when 2 THEN 'Fevrier'
when 3 THEN 'Mars'
when 4 THEN 'Avril'
when 5 THEN 'Mai'
when 6 THEN 'Juin'
when 7 THEN 'Juillet'
when 8 THEN 'Aout'
when 9 THEN 'Septembre'
when 10 THEN 'Octobre'
when 11 THEN 'Novembre'
when 12 then 'decembre'
end
as Mois
FROM contact

96

Vous aimerez peut-être aussi