Table des matières

Synthaxes courantes en SQL


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));