Outils pour utilisateurs

Outils du site


lang:sql

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

lang/sql.txt · Dernière modification : 2020/04/27 10:26 de root