Cours langage SQL
![Cours langage SQL](/images/remos_downloads/id-167.167.pdf_thumb_prev.jpg)
Chapitre 1 Notes de cours
1.1 Introduction
1.1.1 Qu’est-ce qu’un SGBDR ?
Un SGBD (Système de Gestion de Bases de Données) est un logiciel qui stocke des données de façon organisées et cohérentes. Un SGBDR (Système de Gestion de Bases de Données Relationnelles) est le type particulier de SGBD qui fera l’objet de ce cours. Il vous sera décrit plus tard ce qui fait qu’une bases de données est relationnelle.
Les bases de données les plus répandues sont :
- Oracle, qui est considéré comme un des SGBDR les plus performants.
- Microsoft SQL Server, la mouture de microsoft, qui est intégré au framework .NET.
- mySQL, un logiciel libre fonctionnant souvent de pair avec Apache et Php, et de ce fait très répandu dans la programmation web.
- Access, incorporé à Microsoft Office. Il présente l’énorme avantage de mettre à disposition de l’utilisateur une interface graphique. En contrepartie il est mono-utilisateur et de faible capacité.
Les SGBDRs sont généralement des serveurs auxquels des clients se connectent, il doivent supporter plusieurs connections simultanées. Les clients dialoguent alors avec le serveur pour lire ou écrire des donnés dans la base.
1.1.2 SQL
Le SQL, Structured Query Language, est un langage Standard permettant à un client de communiquer des instructions à la base de données. Il se décline en quatre parties :
- le DDL (Data definition language) comporte les instructions qui permettent de définir la façon dont les données sont représentées.
- le DML (Data manipulation language) permet d’écrire dans la base et donc de modifier les données.
- le DQL (Data query language) est la partie la plus complexe du SQL, elle permet de lire les données dans la base à l’aide de requêtes.
- le DCL (Data control language), qui ne sera pas vu dans ce cours permet de gérer les droits d’accès aux données.
A cela s’ajoute des extensions procédurales du SQL (appelé PL/SQL en Oracle). Celui-ci permet d’écrire des scripts exécutés par le serveur de base de données.
1.1.3 Connexion à une base de données
Dans une base de données relationnelle, les données sont stockées dans des tables. Une table est un tableau à deux entrées. Nous allons nous connecter à une base de données pour observer les tables.
Oracle
Sous oracle, le client s’appelle SQL+, le compte utilisateur par défaut a pour login scott et password tiger.
La liste des tables s’affiche en utilisant l’instruction
SELECT TABLE_NAME FROM USER_TABLES
mySQL
La méthode la plus simple pour s’initier à mysql est d’utiliser un kit de easyphp, wamp, etc. Vous disposez dans ce cas d’une option vous permettant d’ouvrir une console mysql.
La liste des bases de données stockées dans le serveur s’obtient avec l’instruction show databases
Database
arbreGenealogique
banque
clients
geometrie
information_schema
livraisons
mysql
performance_schema
playlist
repertoire
secretariat
sys
On se connecte à l’une des bases de données avec l’instruction use nomdelabase
1.1.4 Consultation des tables
Une fois dans la base, on obtient la liste des tables avec l’instruction show tables
Tables_in_livraisons
DETAILLIVRAISON
FOURNISSEUR
LIVRAISON
PRODUIT
PROPOSER
On affiche la liste des colonnes d’une table avec l’instruction
desc PRODUIT
Field Type Null Key Default Extra
numprod int NO PRI NULL
nomprod varchar ( 6 4 ) YES NULL
Le contenu d’une table s’affiche avec l’instruction
SELECT ∗ FROM PRODUIT
numprod nomprod
1 Bocal de cornichons
2 Tube de dentifrice
3 Flacon de lotion anti−escarres
4 Dé odorant fra î cheur 96 heures
1.1.5 Organisation relationnelle des données
Nous utiliserons pour commencer les types suivants :
- numérique entier : int
- numérique à point fixe : number (Oracle seulement)
- numérique à point flottant : real
- chaîne de caractères : varchar(taille) ou varchar2(taille) (Oracle seulement).
Créer des tables
Voici un exemple de création de table :
CREATE TABLE CLIENT (
numcli int ,
nomcli varchar ( 3 2 ) ) ;
desc CLIENT ;
Field Type Null Key Default Extra
numcli int YES NULL
nomcli varchar ( 3 2 ) YES NULL
Ajouter une ligne dans une table
Voici un exemple d’insertion de données dans une table :
INSERT INTO CLIENT ( numcli , nomcli )
VALUES ( 1 , ’ Marcel ’ ) , ( 2 , ’Gégé ’ ) ;
SELECT ∗ FROM CLIENT ;
numcli nomcli
1 Marcel
2 Gégé
Attention, chaque commande SQL se termine par un point-virgule !
Suppression d’une table
Une table se supprime avec l’instruction DROP TABLE.
DROP TABLE CLIENT ;
1.2 Contraintes déclaratives
1.2.1 Valeurs par défaut
create tab le client
(
numcli int ,
nom varchar ( 2 5 6 ) de fau lt ’Moi ’ ,
prenom varchar ( 2 5 6 )
)
fait de ’Moi’ le nom par défaut.
1.2.2 Champs non renseignés
create tab le client
(
numcli int ,
nom varchar ( 2 5 6 ) NOT NULL,
prenom varchar ( 2 5 6 ) NOT NULL
)
force la saisie des champs nom et prénom.
1.2.3 Clé primaire
Une clé primaire est :
— toujours renseignée
— unique
On peut préciser PRIMARY KEY dans la création de table
create tab le client
(
numcli int PRIMARY KEY,
nom varchar ( 2 5 6 ) ,
prenom varchar ( 2 5 6 )
)
La colonne numcli est clé primaire, toute insertion ne respectant pas la contrainte de clé primaire sera refusée par le SGBD.
1.2.4 Clé étrangère
Dans le cas où l’on souhaite garder en mémoire des factures émises par des clients, la façon de faire est de créer une deuxième table contenant la liste des factures :
create tab le facture
(
numfact int PRIMARY KEY,
montantFacture int ,
numcli int REFERENCES CLIENT ( numCli )
) ;
Le champ numCli dans cette table est clé étrangère, ce qui signifie qu’une ligne ne pourra être insérée dans la table facture que si le numcli de cette ligne existe dans la colonne numcli de la table client.
La syntaxe est
REFERENCES <nomtable> (<nomcolonne >)
1.2.5 Syntaxe alternative
Il est possible de définir les contraintes après la création d’une table.
ALTER TABLE nomtable
ADD [CONSTRAINT nomcontrainte ] descriptioncontrainte ;
descriptioncontrainte d’une clé primaire :
PRIMARY KEY( colonne1 , . . . , colonnen )
descriptioncontrainte d’une clé étrangère :
FOREIGN KEY( colonne1 , . . . , colonnen )
REFERENCES tablereferencee ( colonne1 , . . . , colonnen )
Il est aussi possible de placer une descriptioncontrainte dans le CREATE TABLE. Par exemple,
create tab le facture
(
numfact int ,
montantFacture int ,
numcli int ,
PRIMARY KEY ( numfact ) ,
FOREIGN KEY nucli REFERENCES CLIENT ( numcli )
) ;
On remarque qu’il est possible de nommer une contrainte. C’est utile si on souhaite la supprimer :
ALTER TABLE nomtable DROP CONSTRAINT nomcontrainte ;
Pour lister les contraintes sous Oracle, on utilise la commande :
SELECT ∗ FROM USER_CONSTRAINTS ;
Sous mySQL :
SHOW TABLE STATUS ;
7
1.3 Introduction aux requêtes
1.3.1 Compléments sur SELECT
Il est possible d’utiliser SELECT pour n’afficher que certaines colonnes d’une table. Syntaxe :
SELECT <colonne_1 >, <colonne_2 >, . . . , <colonne_n>
FROM <table>
Cette instruction s’appelle une requête, elle affichera pour chaque ligne de la table les valeurs des colonnes colonne1 à colonnen. Il est possible de supprimer les lignes en double à l’aide du mot-clé DISTINCT. Par exemple :
SELECT DISTINCT <colonne_1 >, <colonne_2 >, . . . , <colonne_n>
FROM <table>
Pour trier les données, on utilise ORDER BY. Exemple :
SELECT <colonne_1 >, <colonne_2 >, . . . , <colonne_n>
FROM <table>
ORDER BY <colonne_1bis >, <colonne_2bis >, . . . , <colonne_nbis>
Cette instruction trie les données par colonne1bis croissants. En cas d’égalité, le tri est fait par colonne2bis croissants, etc. Pour trier par ordre décroissant, on ajoute DESC après le nom de la colonne choisie comme critère décroissant.
Par exemple :
SELECT <colonne_1 >, <colonne_2 >, . . . , <colonne_n>
FROM <table>
ORDER BY <colonne_1bis> DESC, <colonne_2bis >, . . . , <colonne_nbis>
1.3.2 Instruction WHERE
Cette instruction permet de ne sélectionner que certaines lignes de la table. Par exemple la requête va afficher le nom du produit numéro 1 :
SELECT nomprod
FROM produit
WHERE numprod = 1
La syntaxe générale est
SELECT <colonne_1 >, <colonne_2 >, . . . , <colonne_n>
FROM <table>
WHERE <condition> condition sera évaluée pour chaque ligne de la table, et seules celles qui véfieront cette condition feront partie du résultat de la requête.
1.3.3 Conditions
Comparaison
Les conditions peuvent être des relations d’égalité (=), de différence (<>), d’inégalité (<, >, >= ou <=) sur des colonnes :
numero_client = 2
nom_client = ’ Marcel ’
prenom_client <> ’ Ginette ’
salary < 230
taxes >= 23000
Négation
La négation d’une condition s’obtient à l’aide de NOT. Par exemple, il est possible de ré-ecrire les conditions ci-avant :
NOT ( numero_client <> 2 )
NOT ( nom_client <> ’ Marcel ’ )
NOT ( prenom_client = ’ Ginette ’ )
NOT ( salary >= 2 3 0 )
NOT ( taxes < 2 3 0 0 0 )
Connecteurs logiques
De même, vous avez à votre disposition tous les connecteurs logiques binaires : AND, OR. Ainsi, les deux conditions
suivantes sont les mêmes :
NOT( ( nom = ’ Raymond ’ ) AND ( prenom <> ’ Huguette ’ ) )
( nom <> ’ Raymond ’ ) OR ( prenom = ’ Huguette ’ )
NULLité
Un champ non renseigné a la valeur NULL, dans une comparaison, NULL n’est jamais égal à quelque valeur qu’il
soit ! La condition suivante est toujours fausse :
NULL = NULL;
La requête suivante ne renvoie aucune ligne :
INSERT INTO MP3 ( numMp3 ) VALUES ( 3 ) ;
SELECT ∗
FROM MP3
WHERE nomMp3 = NULL;
Pour tester la nullité d’un champ, on utilise IS NULL, par exemple :
SELECT ∗
FROM MP3
WHERE nomMp3 IS NULL;
La non-nullité se teste de deux façons :
WHERE NOT ( nomMp3 IS NULL) ;
ou encore
SELECT ∗
FROM MP3
WHERE nomMp3 IS NOT NULL;
numMp3 nomMp3
1 Get Lucky
2 Locked Down
Encadrement
Une valeur numérique peut être encadrée à l’aide de l’opérateur BETWEEN, par exemple les deux conditions suivantes
sont équivalentes :
SALAIRE BETWEEN 1000 AND 5000
( SALAIRE >= 1 0 0 0 ) AND ( SALAIRE <= 5 0 0 0 )