meta données pour cette page
Synthaxes courantes en SQL
Les pricipales requêtes
- Retourne les données correspondant à l'Identifiant 25
SELECT nom, prenom FROM T1 WHERE identifiant = 25;
- Retourne les données correspondant au client qui a plus de 50€ :
SELECT nom_client, SUM(argent) FROM client GROUP BY nom_client HAVING SUM(argent) > 40
- concaténation de chaines :
SELECT prenom||' '||nom AS personne FROM utilisateurs;
- Enlever les doublons :
SELECT DISTINCT * FROM utilisateurs_lambda, utilisateurs_avancer;
- Si une valeur fait partie d'une liste :
SELECT * FROM utilisateurs WHERE ages IN (18, 20, 22);
- Recherche grâce à des filtres :
SELECT * FROM utilisateurs LIKE "_o%";
- le caractère _ signifie : n'importe quel caractères mais 1 seul
- le caractère % signifie : n'importe quel caractères et plusieurs
Retourne :
lorent, loriane
- Filtre par ordre décroissant :
SELECT * FROM utilisateurs ORDER BY age DESC
- Trouve les utilisateurs agé entre 20 et 25 ans :
SELECT * FROM utilisateurs WHERE age BETWEEN 20 AND 25;
- Concaténer les résultats dans une chaine :
SELECT "Vous êtes "||nom||" "||prenom FROM utilisateurs;
- Créer une table :
CREATE TABLE T1 (C1 DATE, C2 INT, C3 VARCHAR(10));
- Supprimer une table :
DROP TABLE T1 CASCADE;
L'option CASCADE est facultative mais sa présence signifie que les objets qui dépendent de la table (vues, par exemple) seront automatiquement supprimés.
- Supprimer une ligne spécifique :
DELETE FROM ma_table WHERE ma_collone IS NULL;
- Insérer des valeurs :
INSERT INTO T1(C1,C2,C3) VALUES (1, 'chaine2', 'chaine2'),(2, 'chaine3',chaine3');
- Mettre à jour des valeurs :
UPDATE T1 SET C1="valeur à maj" WHERE C1='mon_utilisateur_par_ex';
- Créer une base de donnée :
CREATE DATABASE ma_bdd;
- Supprimer ma base de donnée :
DROP DATABASE ma_bdd;
- Copier une table :
CREATE TABLE nouvelle_table AS SELECT * FROM table_cible;
Les Unions
- Unifier les tables :
SELECT col1 FROM t1 UNION SELECT col1 FROM t2;
- Récupérer les données communes des tables :
SELECT col1 FROM t1 INTERSECT SELECT col1 FROM t2;
- Récupérer les données inclus dans t1 seulement s'is ne sont pas présent dans t2 :
SELECT col1 FROM t1 EXCEPT SELECT col1 FROM t2;
Les Jointures
- Jointure classique entre deux tables :
SELECT * FROM T1 INNER JOIN T2 ON T1.id = T2.id; /* Identique à : */ SELECT * FROM T1,T2 WHERE T1.id = T2.id;
- Jointure classique entre deux tables MAIS affiche les valeurs NULL :
SELECT * FROM T1 FULL JOIN T2 ON T1.id = T2.id
- fusionner le contenu de deux tables :
SELECT * FROM t1 CROSS JOIN t2; /* Identique à : */ SELECT * FROM t1,t2;
- Injecter des données dans la table de gauche :
SELECT * FROM T1 LEFT JOIN T2 T1.id = T2.id; /* T1 = table de gauche */ /* T2 = table de droite */
Si les collones de l'ensemble de droite sont absents dans la table de gauche alors leurs contenues seront renseigné par la valeur NULL.
- Injecter des données dans la table de droite :
SELECT * FROM T1 RIGHT JOIN T2 T1.id = T2.id; /* T1 = table de gauche */ /* T2 = table de droite */
Si les collones de l'ensemble de droite sont absents dans la table de gauche alors leurs contenues seront renseigné par la valeur NULL.
Créer / supprimer un utilisateur
Postgres
- Créer un simple utilisateur :
CREATE USER mon_utilisateur WITH PASSWORD 'mon_utilisateur';
- Supprimer un utilisateur :
DROP USER mon_utilisateur;
MySQL
- Créer un simple utilisateur :
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
- Supprimer un utilisateur :
DROP USER ‘newuser’@‘localhost’;
Gestion des privilèges (droits)
- Donner tous les droits sur une base de donnée :
GRANT ALL PRIVILEGES ON DATABASE ma_bdd TO mon_utilisateur;
Liste des droits applicable présenté à cette page
- On peut également donner certain droits sur des collones spécifique :
GRANT SELECT, INSERT, UPDATE (ma_collone1, ma_collone2) ON ma_table TO mon_utilisateur;
ou
- On peut également donner tous les droits sur une table spécifique :
GRANT ALL PRIVILEGES ON TABLE ma_table TO mon_utilisateur;
- Créer un rôle dont les utiliseurs pourront créer des BDD, des rôles mais pas le droit de s'authentifier :
CREATE ROLE mon_role CREATEDB CREATEROLE NOLOGIN;
D'autres rôles sont présenté ici
- appliquer un rôle aux utilisateurs :
GRANT mon_role TO utilisateur, utilisateur2;
- Supprimer un rôle d'un utilisateur :
REVOKE mon_role TO utilisateur;
- Supprimer un rôle :
DROP ROLE mon_role
Modifier le comportement d'une table
- Changer le mot de passe d'un utilisateur :
ALTER USER 'binome' WITH PASSWORD 'nouveau_password';
- Ajouter une clé primaire sur un champ (C1) :
ALTER TABLE ma_table ADD CONSTRAINT mon_label_cle_primaire PRIMARY KEY (ma_collone_C1);
- Ajouter une clé étrangère sur un champ (C1) :
ALTER TABLE ma_table ADD CONSTRAINT mon_label2_cle_etrangere FOREIGN KEY (ma_collone_C1bis) REFERENCES ma_table(ma_collone);
- Ajouter une collone dans une table :
ALTER TABLE T1 ADD C6 VARCHAR(50);
- Supprimer une collone dans une table :
ALTER TABLE T1 DROP C6;
- Ajouter une contrainte d'unicité dans une collone :
ALTER TABLE ma_table ADD CONSTRAINT mon_label UNIQUE (ma_collone);
- Ajouter une contrainte empêchant de renseigner des valeurs NULL dans une collonne :
ALTER TABLE ma_table ALTER COLUMN ma_collone SET NOT NULL;
- Ajouter une contrainte qui force la saisie d'une valeur positive :
ALTER TABLE ma_table ALTER COLUMN ma_collone CHECK(ma_collone > 0);
Créer une vue
- Avoir une vue qui détient toutes les collones de la table T1 :
CREATE VIEW ma_vue AS SELECT * FROM ma_table;
- Donner le droit d'exécuter un SELECT à cette vue par mon_groupe :
GRANT SELECT ON ma_vue TO mon_groupe;
- Lister toutes les vues d'une table :
SHOW FULL TABLES IN ma_table WHERE TABLE_TYPE LIKE 'VIEW';
Créer une règle
- Si un utilisateur ajoute un donnée dans la table alors on fait une action :
CREATE RULE ma_regle AS ON INSERT TO ma_table DO INSERT INTO ma_table2 VALUES (now(), 'INSERT', NEW.col1, NEW.col2);
- On peut retrouver les infos sur ces règles via :
SELECT * FROM pg_rules WHERE tablename='ma_table';
Manipuler les commits
Par défaut les commits sont automatique, ci-dessous on les gères manuellement :
\pset AUTOCOMMIT off; BEGIN; UPDATE T1 SET C1=2; COMMIT; -- END; Fonctionne également.
- Rollback :
\SET AUTOCOMMIT off; BEGIN; UPDATE T1 SET C1=2; SELECT * FROM T1;
Affiche : C1=2
SAVEPOINT r0; UPDATE t1 SET C1=4; SELECT * FROM T1;
Affiche : C1=4
ROLLBACK TO SAVEPOINT r0; SELECT * FROM T1;
Affiche : C1=2;
COMMIT;
- Isolation des utilisateurs (celà fonctionne avec l'autocommit à off) :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
D'autres instructions
- Remplire une table rapidement :
INSERT INTO ma_table (ma_collone) (SELECT round(random()*10) FROM generate_series(1,10000000));
