Table des matières

Synthaxes courantes en SQL


Cette page comprend une liste de requêtes SQL étudié pendant la licence ASRALL. Pour plus de renseignements, vous trouverez de l'aide sur w3schools.

Les pricipales requêtes

SELECT nom, prenom FROM T1 WHERE identifiant = 25;
SELECT nom_client, SUM(argent) FROM client GROUP BY nom_client HAVING SUM(argent) > 40
SELECT prenom||' '||nom AS personne FROM utilisateurs;
SELECT DISTINCT * FROM utilisateurs_lambda, utilisateurs_avancer;
SELECT * FROM utilisateurs WHERE ages IN (18, 20, 22);
SELECT * FROM utilisateurs LIKE "_o%";

Retourne :

lorent, loriane
SELECT * FROM utilisateurs ORDER BY age DESC
SELECT * FROM utilisateurs WHERE age BETWEEN 20 AND 25;
SELECT "Vous êtes "||nom||" "||prenom FROM utilisateurs;
CREATE TABLE T1 (C1 DATE, C2 INT, C3 VARCHAR(10));
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.

DELETE FROM ma_table WHERE ma_collone IS NULL;
INSERT INTO T1(C1,C2,C3) VALUES (1, 'chaine2', 'chaine2'),(2, 'chaine3',chaine3');
UPDATE T1 SET C1="valeur à maj" WHERE C1='mon_utilisateur_par_ex';
CREATE DATABASE ma_bdd;
DROP DATABASE ma_bdd;
CREATE TABLE nouvelle_table AS SELECT * FROM table_cible;

Les Unions

SELECT col1 FROM t1 UNION SELECT col1 FROM t2;
SELECT col1 FROM t1 INTERSECT SELECT col1 FROM t2;
SELECT col1 FROM t1 EXCEPT SELECT col1 FROM t2;

Les Jointures

SELECT * FROM T1 INNER JOIN T2 ON T1.id = T2.id;
/* Identique à : */
SELECT * FROM T1,T2 WHERE T1.id = T2.id;
SELECT * FROM T1 FULL JOIN T2 ON T1.id = T2.id
SELECT * FROM t1 CROSS JOIN t2;
/* Identique à : */
SELECT * FROM t1,t2;
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.

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

CREATE USER mon_utilisateur WITH PASSWORD 'mon_utilisateur';
DROP USER mon_utilisateur;

MySQL

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
DROP USER ‘newuser’@‘localhost’;

Gestion des privilèges (droits)

GRANT ALL PRIVILEGES ON DATABASE ma_bdd TO mon_utilisateur;

Liste des droits applicable présenté à cette page

GRANT SELECT, INSERT, UPDATE (ma_collone1, ma_collone2) ON ma_table TO mon_utilisateur;

ou

GRANT ALL PRIVILEGES ON TABLE ma_table TO mon_utilisateur;
CREATE ROLE mon_role CREATEDB CREATEROLE NOLOGIN;

D'autres rôles sont présenté ici

GRANT mon_role TO utilisateur, utilisateur2;
REVOKE mon_role TO utilisateur;
DROP ROLE mon_role

Modifier le comportement d'une table

ALTER USER 'binome' WITH PASSWORD 'nouveau_password';
ALTER TABLE ma_table ADD CONSTRAINT mon_label_cle_primaire PRIMARY KEY (ma_collone_C1);
ALTER TABLE ma_table ADD CONSTRAINT mon_label2_cle_etrangere FOREIGN KEY (ma_collone_C1bis) REFERENCES ma_table(ma_collone);
ALTER TABLE T1 ADD C6 VARCHAR(50);
ALTER TABLE T1 DROP C6;
ALTER TABLE ma_table ADD CONSTRAINT mon_label UNIQUE (ma_collone);
ALTER TABLE ma_table ALTER COLUMN ma_collone SET NOT NULL;
ALTER TABLE ma_table ALTER COLUMN ma_collone CHECK(ma_collone > 0);

Créer une vue

CREATE VIEW ma_vue AS SELECT * FROM ma_table;
GRANT SELECT ON ma_vue TO mon_groupe;
SHOW FULL TABLES IN ma_table WHERE TABLE_TYPE LIKE 'VIEW';

Créer une règle

CREATE RULE ma_regle AS ON INSERT TO ma_table DO 
INSERT INTO ma_table2 VALUES (now(), 'INSERT', NEW.col1, NEW.col2);
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.
\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;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

D'autres instructions

INSERT INTO ma_table (ma_collone) (SELECT round(random()*10) FROM generate_series(1,10000000));