Cours de Microsoft SQL Server
INF/BD/S3
SQL SELECT SELECT * FROM Obtenir toutes les colonnes d’un tableau
client
L’utilisation la plus
courante de SQL consiste à lire des données SQL DISTINCT
issues de la base de données. Cela s’effectue
Pour éviter des redondances dans les
SELECT nom_du_champ résultats il faut simplement ajouter DISTINCT
FROM nom_du_tableau après le mot SELECT.
grâce à la commande SELECT, qui retourne Commande basique
des enregistrements dans un tableau de L’utilisation basique de cette commande
résultat. Cette commande peut sélectionner consiste alors à effectuer la requête suivante
SELECT nom_du_champ SELECT DISTINCT ma_colonne
FROM nom_du_tableau FROM nom_du_tableau
une ou plusieurs colonnes d’une table. :
Exemple Table « client » :
Cette requête va sélectionner (SELECT) le
champ « nom_du_champ » provenant (FROM) Pour sélectionner uniquement les prénoms
du tableau appelé « nom_du_tableau ». uniques il faut utiliser la requête suivante :
SELECT DISTINCT prenom
Exemple Table « client » : FROM client
identifia prenom nom ville SQL AS (alias)
nt
1 Pierre Dupond Paris Dans le langage SQL il est possible d’utiliser
des alias pour renommer temporairement
2 Sabrina Durand Nantes une colonne ou une table dans une requête
3 Julien Martin Lyon
Alias sur une colonne
4 Pierre Bernar Marseille
d La syntaxe pour renommer une colonne de
5 Marie Leroy Grenoble colonne1 à c1 est la suivante :
SELECT colonne1 AS c1, colonne2
Si l’ont veut avoir la liste de toutes les villes FROM `table`
des clients, il suffit d’effectuer la requête
suivante :
Cette syntaxe peut également s’afficher de la
SELECT ville façon suivante :
FROM client SELECT colonne1 c1, colonne2
FROM `table`
Obtenir plusieurs colonnes
SELECT prenom, nom
A noter : à choisir il est préférable d’utiliser la
FROM client commande « AS » pour que ce soit plus
explicite (plus simple à lire qu’un simple
espace), d’autant plus que c’est
recommandé dans le standard ISO pour
concevoir une requête SQL.
Mme Bellabes 1
Cours de Microsoft SQL Server
INF/BD/S3
Alias sur une table 1 Paul 3 paris
La syntaxe pour renommer une table dans 2 Maurice 0 rennes
une requête est la suivante : 3 Joséphine 1 toulouse
SELECT *
4 Gérard 7
FROM paris
`nom_table` AS t1
SELECT *
FROM client
WHERE ville = 'paris'
Pour obtenir seulement la liste des clients qui
habitent à Paris, il faut effectuer la requête
SELECT * suivante :
FROM `table`t1
Cette
requête peut également s’écrire de la façon Résultat :
suivante :
id nom nbr_comman ville
SELECT p_id, p_nom_fr_fr AS nom,
p_description_fr_fr AS description,
de
p_prix_euro AS prix 1 Paul 3 paris
FROM `produit`
4 Gérar 7 paris
d
Opérateurs de comparaisons
Exemple
Il existe plusieurs opérateurs de
SQL WHERE comparaisons. La liste ci-jointe présente
La commande WHERE dans une requête quelques uns des opérateurs les plus
SQL permet d’extraire les lignes d’une base couramment utilisés.
de données qui respectent une condition.
Cela permet d’obtenir uniquement les Opérateur Description
informations désirées.
= Égale
Syntaxe
<> Pas égale
!= Pas égale
SELECT nom_colonnes
FROM nom_table > Supérieur à
WHERE condition < Inférieur à
>= Supérieur ou égale à
La commande WHERE s’utilise en
<= Inférieur ou égale à
complément à une requête utilisant
SELECT. La façon la plus simple de l’utiliser IN Liste de plusieurs valeurs
possibles
est la suivante :
BETWEEN Valeur comprise dans un
intervalle donnée (utile pour
Exemple les nombres ou dates)
LIKE Recherche en spécifiant le
Imaginons une base de données appelée « début, milieu ou fin d'un mot.
client » qui contient le nom des clients, le IS NULL Valeur est nulle
nombre de commandes qu’ils ont effectués
IS NOT NULL Valeur n'est pas nulle
et leur ville :
id nom nbr_comma ville
nde
Mme Bellabes 2
Cours de Microsoft SQL Server
INF/BD/S3
Exemple de données
Pour illustrer les prochaines commandes,
nous allons considérer la table « produit »
suivante :
id nom categorie stock prix
1 ordinateu informatique 5 950
r
2 clavier informatique 32 35
3 souris informatique 16 30
4 crayon fourniture 147 2
Opérateur AND
Pour filtrer uniquement les produits
informatique qui sont presque en rupture
de stock (moins de 20 produits disponible)
il faut exécuter la requête suivante :
SELECT * FROM produit
WHERE categorie = 'informatique' AND stock < 20
Mme Bellabes 3
Cours de Microsoft SQL Server
INF/BD/S3
Résultat :
SELECT categorie
id nom categorie stock prix FROM produit
WHERE nom ( ‘clavier’ , ‘souris’ , ‘crayon’)
1 ordinateu informatiqu 5 950
r e Syntaxe
3 souris informatiqu 16 30 Exemple
e
Opérateur OR SQL BETWEEN
Pour filtrer les données pour avoir L’opérateur BETWEEN est utilisé dans une
uniquement les données sur les produits « requête SQL pour sélectionner un intervalle
ordinateur » ou « clavier » il faut effectuer de données dans une requête utilisant
SELECT * FROM produit WHERE. L’intervalle peut être constitué de
WHERE nom = 'ordinateur' OR nom = 'clavier' chaînes de caractères, de nombres ou de
la recherche suivante : dates
Syntaxe
Résultats :
L’utilisation de la commande BETWEEN
id nom categorie stock prix s’effectue de la manière suivante :
1 ordinateu informatiqu 5 950 SELECT *
r e FROM table
2 clavier informatiqu 32 35 WHERE nom_colonne BETWEEN 'valeur1' AND 'valeur2'
e
Combiner AND et OR Exemple récupérer uniquement les
Il est possible de filtrer les produits « enregistrements entre 2 identificateurs
informatique » avec un stock inférieur à 20 et les
produits « fourniture » avec un stock inférieur à
SELECT *
200 avec la recherche suivante :
FROM produit
SELECT * FROM produit
WHERE id BETWEEN 1 AND 3
WHERE ( categorie = 'informatique' AND stock < 20
) OR ( categorie = 'fourniture' AND stock < 200 ) définies.
SQL LIKE
Résultats :
L’opérateur LIKE est utilisé dans la clause
id nom categorie stock prix WHERE des requêtes SQL. Ce mot-clé
1 ordinateu informatiq 5 950 permet d’effectuer une recherche sur un
r ue modèle particulier. Il est par exemple
2 clavier informatiq 32 35 possible de rechercher les enregistrements
ue dont la valeur d’une colonne commence par
4 crayon fourniture 147 2 telle ou telle lettre. Les modèles de
SQL IN recherches sont multiple.
L’opérateur logique IN dans SQL s’utilise avec la Syntaxe
commande WHERE pour vérifier si une colonne
est égale à une des valeurs comprise dans set de La syntaxe à utiliser pour utiliser l’opérateur
valeurs déterminés LIKE est la suivante :
SELECT *
FROM table
SELECT nom_colonne
WHERE colonne LIKE modele
Mme Bellabes FROM table 4
Cours de Microsoft SQL Server
INF/BD/S3
4. Ajouter une contrainte CHECK
Par exemple, pour que la colonne
Dans cet exemple le « modèle » n’a pas été
ValeurParametre de ParametresSysteme soit
défini, mais il ressemble très généralement à toujours positive :
l’un des exemples suivants : ALTER TABLE ParametresSysteme
ADD CONSTRAINT CK_Parametres_ValeurPositive
• LIKE ‘%a’ : le caractère « % » est un CHECK (ValeurParametre >= 0);
caractère joker qui remplace tous les autres
caractères. Ainsi, ce modèle permet de 5. Ajouter une contrainte FOREIGN KEY
Par exemple, pour créer une relation entre
rechercher toutes les chaines de caractère qui Emprunt et Adherent (si elle n'existait pas
se termine par un « a ». encore) :
• LIKE ‘a%’ : ce modèle permet de ALTER TABLE Emprunt
rechercher toutes les lignes de « colonne » ADD CONSTRAINT FK_Emprunt_Adherent
FOREIGN KEY (IdAdherent) REFERENCES
qui commence par un « a ».
Adherent(IdAdherent);
• LIKE ‘%a%’ : ce modèle est utilisé pour
rechercher tous les enregistrements qui utilisent Supprimer une contrainte dans SQL
le caractère « a ».
Server, il te faut connaître le nom exact
• LIKE ‘pa%on’ : ce modèle permet de
de la contrainte.
rechercher les chaines qui commence par «
pa » et qui se terminent par « on », comme « ① Trouver le nom de la contrainte
pantalon » ou « pardon ». Tu peux utiliser cette requête si tu ne connais
pas son nom :
• LIKE ‘a_c’ : peu utilisé, le caractère « _ »
(underscore) peut être remplacé par SELECT name, type_desc
n’importe quel caractère, mais un seul FROM sys.check_constraints
caractère uniquement (alors que le symbole WHERE parent_object_id =
pourcentage « % » peut être remplacé par un OBJECT_ID('NomDeLaTable');
nombre incalculable de caractères . Ainsi, ce
modèle permet de retourner les lignes « aac Ou pour n'importe quel type de contrainte :
SELECT name, type_desc
», « abc » ou même « azc ».
FROM sys.objects
WHERE parent_object_id =
Ajouter différents types de contraintes OBJECT_ID('NomDeLaTable');
à une table SQL Server après sa
création ② Supprimer la contrainte
Une fois le nom trouvé, utilise :
1. Ajouter une contrainte DEFAULT ALTER TABLE NomDeLaTable
Par exemple, pour que la colonne Disponible de DROP CONSTRAINT NomDeLaContrainte;
la table Livre ait par défaut la valeur 1 :
ALTER TABLE Livre Exemple : supprimer une contrainte
ADD CONSTRAINT DF_Livre_Disponible DEFAULT CK_Parametres_ValeurPositive sur la table
1 FOR Disponible; ParametresSysteme :
ALTER TABLE ParametresSysteme
2. Ajouter une contrainte NOT NULL DROP CONSTRAINT
( nécessite que la colonne ne contienne pas CK_Parametres_ValeurPositive;
de NULL existant)
ALTER TABLE Livre Quand tu crées une contrainte DEFAULT sans lui
ALTER COLUMN Auteur NVARCHAR(100) NOT donner de nom, SQL Server lui attribue
NULL; automatiquement un nom système (par
exemple,
3. Ajouter une contrainte UNIQUE DF__NomTable__NomColonne__12345678).
Pour garantir qu’un champ comme Email dans
Adherent est unique : Étapes pour supprimer une contrainte
ALTER TABLE Adherent DEFAULT sans connaître son nom :
ADD CONSTRAINT UQ_Adherent_Email UNIQUE
(Email); 1. Trouver le nom système de la contrainte
Mme Bellabes 5
Cours de Microsoft SQL Server
INF/BD/S3
Tu peux le récupérer avec cette requête :
SELECT dc.name AS NomContrainte, t.name AS
TableName, c.name AS Colonne
FROM sys.default_constraints dc
JOIN sys.tables t ON dc.parent_object_id =
t.object_id
JOIN sys.columns c ON c.object_id = t.object_id
AND c.column_id = dc.parent_column_id
WHERE t.name = 'NomDeTaTable' AND c.name =
'NomDeLaColonne';
Exemple pour Livre et la colonne Disponible :
WHERE t.name = 'Livre' AND c.name =
'Disponible';
2. Supprimer dynamiquement la contrainte
Tu peux ensuite la supprimer avec ce type de
commande (après avoir copié le nom) :
ALTER TABLE Livre
DROP CONSTRAINT
DF__Livre__Disponibl__7D439ABD; -- remplace
par le vrai nom trouvé
Mme Bellabes 6