Cours langage SQL
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 ()
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 , , . . . ,
FROM