Table des matières
Administration
Ajout un nouvel utilisateur user
ayant toutes les autorisations sur toutes les tables de la base de donnée datab
avec le mot de passe password
.
GRANT ALL PRIVILEGES ON datab.* TO USER@localhost IDENTIFIED BY 'password'
Requête SELECT
Soit la base de donnée :
- Film (id, titre, annee, id_realisateur, code_pays)
- Artiste (id, nom, prenom)
- Pays (code, nom, langue)
- Role (id_film, id_acteur, nom_role)
Base
Renvoie les colonnes d'un. table.
SELECT titre FROM Film; SELECT * FROM Artiste;
Avec un alias
SELECT p.* FROM Pays p;
En triant les résultats
SELECT titre, annee FROM Film ORDER BY annee DESC;
Conditions restrictives
Simple
Une seule condition.
SELECT titre FROM Film WHERE annee = 1958;
Deux conditions.
SELECT titre FROM Film WHERE 1950 <= annee AND annee < 1960;
Condition avec BETWEEN
. Inclus les bornes inférieure et supérieure.
SELECT titre FROM Film WHERE annee BETWEEN 1960 AND 1970;
Condition d'une valeur NULL
. Un champ contenant NULL
ne peut pas être sélectionné par une comparaison autre que IS NULL
.
SELECT nom FROM Artiste WHERE annee_naissance IS NULL;
Condition sur un champ texte avec le caractère joker %
. Pour les chaînes de caractères, utilisez plutôt l'apostrophe.
SELECT nom FROM Artiste WHERE nom LIKE 'A%';
Condition dans une liste de valeurs. Dans l'opérateur IN, le caractère joker %
n'est pas utilisable.
SELECT nom FROM Artiste WHERE nom IN ('Dunst', 'Hitchcock');
Condition de négation. <>ALL
est spécifique à Oracle. Les deux commandes ci-dessous sont équivalentes.
SELECT nom FROM Artiste WHERE nom NOT IN ('Dunst', 'Hitchcock'); SELECT nom FROM Artiste WHERE nom <>ALL ('Dunst', 'Hitchcock');
Avec sous-requête
Uniquement la ligne avec la valeur maximale
SELECT * FROM Film WHERE annee >=ALL (SELECT annee FROM Film);
Les films ayant pour réalisateur Hitckcock. Les étapes :
- on commence par récupérer l'id de Hitchcock,
- puis on récupère les films dont l'id correspond à celui d'Hitchcock.
SELECT titre FROM Film WHERE id_realisateur IN ( SELECT id FROM Artiste WHERE nom = 'Hitchcock');
Les films parus avant 2000, avec Clint Eastwood comme acteur. Les étapes :
- on commence par récupérer l'id de Clint Eastwood,
- on récupère les id des films dans lesquels Clint Eastwood à jouer,
- puis on affiche les films dont l'id est dans celui des films dans lesquels Clint Eastwood à jouer. On rajoute une condition
annee < 2000
pour ne garder que les films d'avant l'an 2000.
SELECT titre FROM Film WHERE annee < 2000 AND id IN ( SELECT id_film FROM ROLE WHERE id_acteur IN ( SELECT id FROM Artiste WHERE nom LIKE 'Eastwood' AND prenom LIKE 'Clint'));
Modifier une table existante
Changer une colonne faisant office de clé étranger sur une autre table
Intérêt : ajouter l'attribut Auto-Incrément qui a été oublié à une clé primaire.
Bien mettre le même type de donnée (ici INT(11)
) dans l'ID
de la table artiste
et les colonnes id_realisateur
et id_acteur
des tables Film
et Role
.
LOCK TABLES Artiste WRITE, Film WRITE, ROLE WRITE; ALTER TABLE Film DROP FOREIGN KEY Film_ibfk_1; ALTER TABLE ROLE DROP FOREIGN KEY Role_ibfk_2; ALTER TABLE Artiste MODIFY id INT(11) AUTO_INCREMENT; ALTER TABLE Film ADD CONSTRAINT Film_ibfk_1 FOREIGN KEY (id_realisateur) REFERENCES Artiste(id) ON DELETE RESTRICT ON UPDATE RESTRICT; ALTER TABLE ROLE ADD CONSTRAINT Role_ibfk_2 FOREIGN KEY (id_acteur) REFERENCES Artiste(id) ON DELETE RESTRICT ON UPDATE RESTRICT; UNLOCK TABLES;
Cannot change column used in a foreign key constraint Archive du 28/11/2012 le 27/04/2020