Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 227 minDébutant

Aide-mémoire : les commandes SQL

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • retrouver vite la syntaxe de chaque instruction ;
  • retenir l'ordre d'évaluation d'une requête ;
  • comprendre les messages d'erreur fréquents.

Cet aide-mémoire SQL rassemble sur une page la syntaxe des commandes, l'ordre d'écriture et d'évaluation d'une requête, les types et les fonctions de MySQL les plus utilisés, et les messages d'erreur fréquents. Chaque commande est détaillée dans son chapitre : CREATE TABLE, INSERT, UPDATE et DELETE, SELECT, jointures, GROUP BY, transactions et GRANT.

Syntaxe des instructions

sql
-- Syntaxe : structure
CREATE DATABASE nom CHARACTER SET utf8mb4;
CREATE TABLE t (
  id INT AUTO_INCREMENT PRIMARY KEY,
  col TYPE [NOT NULL] [DEFAULT v] [UNIQUE],
  CONSTRAINT ck_t CHECK (condition),
  CONSTRAINT fk_t FOREIGN KEY (col) REFERENCES parent (id) ON DELETE {RESTRICT | CASCADE | SET NULL}
);
ALTER TABLE t ADD COLUMN col TYPE;  ALTER TABLE t MODIFY COLUMN col TYPE NOT NULL;
ALTER TABLE t RENAME COLUMN a TO b; ALTER TABLE t DROP COLUMN col;
ALTER TABLE t ADD CONSTRAINT ... ;  ALTER TABLE t DROP FOREIGN KEY fk_t;
DROP TABLE IF EXISTS t;  TRUNCATE TABLE t;
CREATE INDEX idx ON t (col1, col2);  DROP INDEX idx ON t;
CREATE [OR REPLACE] VIEW v AS SELECT ... [WITH CHECK OPTION];  DROP VIEW v;
sql
-- Syntaxe : données
INSERT INTO t (c1, c2) VALUES (v1, v2), (v3, v4);
INSERT INTO t (c1, c2) SELECT ... ;
INSERT INTO t (c1, c2) VALUES (v1, v2) AS n ON DUPLICATE KEY UPDATE c2 = n.c2;
UPDATE t SET c1 = v1, c2 = c2 + 1 WHERE condition;
DELETE FROM t WHERE condition;
sql
-- Syntaxe : lecture
[WITH cte AS (SELECT ...)]
SELECT [DISTINCT] expr [AS alias], ...
FROM t1 a
[INNER | LEFT] JOIN t2 b ON b.cle = a.cle
WHERE condition_sur_les_lignes
GROUP BY colonnes
HAVING condition_sur_les_groupes
ORDER BY expr [ASC | DESC], ...
LIMIT n [OFFSET m];

-- Ensembles : requête1 UNION [ALL] | INTERSECT | EXCEPT requête2
-- Fenêtre :   fonction() OVER (PARTITION BY ... ORDER BY ...)
sql
-- Syntaxe : transactions et droits
START TRANSACTION;  SAVEPOINT s;  ROLLBACK TO SAVEPOINT s;  COMMIT;  ROLLBACK;
SELECT ... FOR UPDATE;
CREATE USER 'u'@'hote' IDENTIFIED BY 'mot de passe';
GRANT SELECT, INSERT ON base.table TO 'u'@'hote';
GRANT SELECT (col1, col2) ON base.table TO 'u'@'hote';
REVOKE INSERT ON base.table FROM 'u'@'hote';
CREATE ROLE 'r';  GRANT 'r' TO 'u'@'hote';  SET DEFAULT ROLE ALL TO 'u'@'hote';
SHOW GRANTS FOR 'u'@'hote';

Ordre d'écriture, ordre d'évaluation

Ordre d'écritureClauseOrdre d'évaluation
1SELECT (et DISTINCT)5 (puis 6 pour DISTINCT)
2FROM et JOIN … ON1
3WHERE2
4GROUP BY3
5HAVING4
6ORDER BY7
7LIMIT / OFFSET8

Types et fonctions les plus utilisés

BesoinType MySQL
IdentifiantINT AUTO_INCREMENT
MontantDECIMAL(10,2)
Texte courtVARCHAR(n)
Code de longueur fixeCHAR(n)
Texte longTEXT
Date / date et heureDATE / DATETIME
BooléenBOOLEAN (TINYINT(1))
Donnée chiffréeVARBINARY(n)
FamilleFonctions
AgrégatsCOUNT(*), COUNT(col), COUNT(DISTINCT col), SUM, AVG, MIN, MAX, GROUP_CONCAT
ChaînesCONCAT, CONCAT_WS, UPPER, LOWER, SUBSTRING, CHAR_LENGTH, TRIM, REPLACE, LPAD
NombresROUND, TRUNCATE, CEIL, FLOOR, MOD, ABS
DatesNOW, CURDATE, YEAR, MONTH, DATEDIFF, TIMESTAMPDIFF, DATE_ADD, DATE_SUB, DATE_FORMAT, STR_TO_DATE
ConditionsCASE WHEN … THEN … ELSE … END, COALESCE, IFNULL, NULLIF, IF
FenêtresROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM(...) OVER (...)

Messages d'erreur fréquents

CodeMessage (début)CauseRemède
1045Access denied for userMauvais compte, mot de passe ou hôteVérifier le couple utilisateur et hôte
1052Column '...' in field list is ambiguousColonne présente dans deux tables jointesPréfixer par l'alias de table
1054Unknown column '...'Faute de frappe, ou alias utilisé dans WHEREVérifier le schéma, répéter l'expression
1055... isn't in GROUP BY ou Expression #n of SELECT list is not in GROUP BY clauseColonne non regroupée et non agrégéeL'ajouter au GROUP BY ou l'agréger
1062Duplicate entry '...' for key '...'Doublon sur une clé primaire ou UNIQUEChanger la valeur, ou ON DUPLICATE KEY UPDATE
1064You have an error in your SQL syntaxFaute de syntaxeRegarder juste avant le texte cité après near
1093You can't specify target table '...' for update in FROM clauseSous-requête sur la table modifiéePasser par une table dérivée
1111Invalid use of group functionAgrégat dans WHEREHAVING
1142... command denied to userPrivilège manquantGRANT, ou revoir le besoin
1146Table '...' doesn't existMauvaise base courante, faute de frappeUSE base;, vérifier le nom
1175You are using safe update modeUPDATE ou DELETE sans WHERE sur une cléAjouter un WHERE précis
1205Lock wait timeout exceededLigne verrouillée trop longtemps par une autre transactionRaccourcir les transactions, rejouer
1213Deadlock found when trying to get lockInterblocage, transaction annuléeRejouer la transaction
1242Subquery returns more than 1 rowSous-requête scalaire à plusieurs lignesIN, ou agrégat
1364Field '...' doesn't have a default valueColonne obligatoire absente de l'INSERTLa fournir, ou lui donner un DEFAULT
1406Data too long for column '...'Valeur trop longue pour le typeAgrandir la colonne ou vérifier la saisie
1451Cannot delete or update a parent rowLigne encore référencée par une clé étrangèreTraiter les lignes enfants, ou revoir ON DELETE
1452Cannot add or update a child rowClé étrangère vers une ligne inexistanteCréer le parent d'abord, vérifier la valeur
3819Check constraint '...' is violatedCondition CHECK fausseCorriger la valeur

Chapitre terminé !

Tu as lu ce chapitre jusqu'au bout. Passe au suivant tant que c'est frais.

chapitres
–
de série
–
du cours
–
Cours suivant : Procédures stockées et triggersRevoir le sommaire du cours