====== SQL ======
* [[https://blog.stephane-robert.info/docs/services/bdd/relationnelles/introduction/|Les bases de données relationnelles]]
* [[https://www.depesz.com/2024/12/01/sql-best-practices-dont-compare-count-with-0/|SQL best practices – don’t compare count(*) with 0]]
* [[sql:mysql|MySQL]]
==== Encodages ====
* [[https://wincent.com/wiki/Finding_out_the_encoding_of_a_MySQL_database]]
* [[https://ixnfo.com/en/how-to-change-mysql-database-encoding-and-its-tables.html]]
=== Connaître l'encodage des bases de données ===
SELECT * FROM information_schema.schemata;
=== Connaître l'encodage des tables ===
SELECT table_schema, table_name, table_collation FROM information_schema.tables;
=== Changer l'encodage d'une table ===
[[https://stackoverflow.com/questions/1294117/how-to-change-collation-of-database-table-column|Source]]
''utf8mb4'' permet de stocker des caractères UTF8 sur 4 octets, donc notamment les émoticônes, à partir de MySQL 5.5:
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4
==== Égalité de chaînes de caractères sensibles à la casse ====
[[https://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql|Source]]
SELECT * FROM t WHERE BINARY colonne = 'value';
De la même manière avec les ''GROUP BY'' :
SELECT BINARY colonne, COUNT(*) FROM t GROUP BY BINARY colonne;
Le mot-clé ''BINARY'' semble ne pas fonctionner avec SQLite.
==== Ajouter un préfixe ou un suffixe à une chaîne ====
UPDATE matable SET mavaleur = CONCAT('préfixe ', mavaleur);
==== Min et max de deux éléments ====
SELECT GREATEST("abc", "def"), LEAST("abc", "def");
==== Dates ====
=== Extraire la date d'un datetime ===
[[https://stackoverflow.com/questions/1754411/how-to-select-date-from-datetime-column|Source]]
WHERE DATE(datetime) = '2009-10-20'
=== Chaîne vers date ===
[[https://www.mysqltutorial.org/mysql-str_to_date/|Source]]
SELECT STR_TO_DATE('21,5,2013','%d,%m,%Y');
==== Créer une table depuis les résultats d'une requête ====
* [[https://learnsql.com/cookbook/how-to-create-a-table-from-an-sql-query/|Source]]
CREATE TABLE results AS SELECT * FROM other_table;
Il est aussi possible d'insérer les résultats d'une requête dans une table déjà existante :
INSERT INTO results SELECT * FROM other_table;
La syntaxe semble varier selon le SGBD utilisé.
==== Fonctions de fenêtrage ====
* [[https://openclassrooms.com/fr/courses/4449026-initiez-vous-a-lalgebre-relationnelle-avec-le-langage-sql/4563021-apprehendez-le-fenetrage-avec-over-et-partition-by]]
* [[https://sqlpro.developpez.com/article/olap-clause-window/]]