Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| memo:sql [03/12/2015 12:13] – [Transtypages] Date -> numéro de semaine Arnaud Jacquemin | memo:sql [03/11/2025 17:35] (Version actuelle) – [MSSQL : trouver les verrous sur une table] Arnaud Jacquemin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== Requêtes SQL ====== |
| - | ===== SELECT ===== | + | ====== SELECT |
| <code sql> | <code sql> | ||
| Ligne 13: | Ligne 13: | ||
| - | ==== NVL ==== | + | ===== Gérer valeur NULL ===== |
| + | |||
| + | Utiliser la fonction standard COALESCE : | ||
| <code sql> | <code sql> | ||
| -- Téléphone fixe, ou mobile sinon | -- Téléphone fixe, ou mobile sinon | ||
| - | SELECT | + | SELECT |
| FROM clients | FROM clients | ||
| </ | </ | ||
| - | Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm|Oracle]] | + | Doc : [[https:// |
| - | ==== Switch Case ==== | + | Chez Oracle il existe aussi une fonction non standard Doc : [[http:// |
| + | |||
| + | ===== Switch Case ===== | ||
| <code sql> | <code sql> | ||
| Ligne 38: | Ligne 42: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ==== Portion de chaîne | + | ===== Portion de chaîne |
| + | **Oracle :** | ||
| + | |||
| <code sql> | <code sql> | ||
| SELECT | SELECT | ||
| Ligne 46: | Ligne 52: | ||
| FROM produits_coloris | FROM produits_coloris | ||
| </ | </ | ||
| - | |||
| Doc : [[http:// | Doc : [[http:// | ||
| + | |||
| + | **MS SQL Server :** | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | -- Séparer heures et minutes | ||
| + | SUBSTRING (a.actvissalheurearr, | ||
| + | FROM ACTEVISITESALARIE a | ||
| + | </ | ||
| + | |||
| + | Doc : https:// | ||
| Pour le faire selon une expression régulière : [[http:// | Pour le faire selon une expression régulière : [[http:// | ||
| Ligne 59: | Ligne 75: | ||
| FROM xanaka.lignes_perimetre_action_mkt pam | FROM xanaka.lignes_perimetre_action_mkt pam | ||
| </ | </ | ||
| - | ==== Transtypages ==== | + | ===== Transtypages |
| - | === Nombre -> texte === | + | ==== Nombre -> texte ==== |
| Fonctions CAST ou TO_CHAR | Fonctions CAST ou TO_CHAR | ||
| Ligne 80: | Ligne 96: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | === Date -> texte === | + | ==== Date -> texte ==== |
| + | |||
| + | === Oracle | ||
| <code sql> | <code sql> | ||
| Ligne 91: | Ligne 109: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| + | === MySQL === | ||
| - | === Date -> numéro de semaine === | + | <code sql> |
| + | select DATE_FORMAT(d.date_der_exe,' | ||
| + | from latable | ||
| + | -- Donne par exemple : ' | ||
| + | </ | ||
| + | |||
| + | Doc : [[https:// | ||
| + | |||
| + | |||
| + | === MS SQL Server === | ||
| + | |||
| + | <code sql> | ||
| + | select CONVERT(varchar, | ||
| + | from latable | ||
| + | -- Donne par exemple : ' | ||
| + | </ | ||
| + | |||
| + | Doc : [[https:// | ||
| + | ==== Date -> numéro de semaine | ||
| <code sql> | <code sql> | ||
| Ligne 101: | Ligne 138: | ||
| - | === Texte -> date === | + | ==== DateTime -> Date ==== |
| + | |||
| + | === Microsoft SQL Server === | ||
| + | |||
| + | <code sql> | ||
| + | SELECT cast([DateTime] As Date) AS jour | ||
| + | FROM table | ||
| + | </ | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | |||
| + | ==== Texte -> date ==== | ||
| + | |||
| + | === Oracle | ||
| Fonction TO_DATE | Fonction TO_DATE | ||
| Ligne 112: | Ligne 163: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ==== IN ==== | + | === Microsoft SQL Server === |
| + | |||
| + | CAST(' | ||
| + | <code sql> | ||
| + | SELECT * FROM latable | ||
| + | WHERE TOTAL_DATE = CAST(' | ||
| + | </ | ||
| + | |||
| + | Ou en précisant le format : | ||
| + | <code sql> | ||
| + | SELECT * FROM latable | ||
| + | WHERE date = CONVERT(date, | ||
| + | </ | ||
| + | Doc : https:// | ||
| + | |||
| + | |||
| + | === MySQL === | ||
| + | |||
| + | <code sql> | ||
| + | SELECT STR_TO_DATE(" | ||
| + | </ | ||
| + | |||
| + | Doc : [[https:// | ||
| + | |||
| + | |||
| + | ===== IN ===== | ||
| <code sql> | <code sql> | ||
| Ligne 122: | Ligne 198: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | === Avec dédoublonnage === | + | ==== Avec dédoublonnage |
| S'il y a plusieurs comptes pour un email, n' | S'il y a plusieurs comptes pour un email, n' | ||
| Ligne 137: | Ligne 213: | ||
| - | ==== Agrégation ==== | + | ===== Agrégation |
| <code sql> | <code sql> | ||
| Ligne 147: | Ligne 223: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ==== Plus petite valeur entre 2 colonnes ==== | + | ===== Plus petite valeur entre 2 colonnes |
| <code sql> | <code sql> | ||
| Ligne 159: | Ligne 235: | ||
| - | ==== Plus grande valeur entre 2 colonnes ==== | + | ===== Plus grande valeur entre 2 colonnes |
| <code sql> | <code sql> | ||
| Ligne 168: | Ligne 244: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ===== INSERT ===== | + | Pour la plus petite valeur, utiliser la fonction '' |
| + | |||
| + | <code sql> | ||
| + | SELECT LEAST(datemodification, | ||
| + | FROM matable | ||
| + | </ | ||
| + | |||
| + | Doc : [[http:// | ||
| + | |||
| + | ===== Plus grande valeur entre plusieurs lignes ===== | ||
| + | |||
| + | Par exemple, ne garder d'une table que la ligne la plus récente pour chacun des utilisateurs... | ||
| + | |||
| + | <code sql> | ||
| + | WITH nom_alias AS ( | ||
| + | SELECT * | ||
| + | , ROW_NUMBER() OVER(PARTITION BY userid ORDER BY datecreation DESC) AS position | ||
| + | FROM table_a_filtrer | ||
| + | ) | ||
| + | SELECT | ||
| + | ... | ||
| + | FROM | ||
| + | nom_alias f | ||
| + | INNER JOIN | ||
| + | ... | ||
| + | WHERE | ||
| + | f.position = 1 -- uniquement dernier document | ||
| + | AND ... | ||
| + | ORDER BY ... | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== INSERT | ||
| <code sql> | <code sql> | ||
| Ligne 177: | Ligne 285: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ==== Depuis une sous-requête ==== | + | ===== Depuis une sous-requête |
| Si la table existe déjà, sinon utiliser [[# | Si la table existe déjà, sinon utiliser [[# | ||
| Ligne 191: | Ligne 299: | ||
| - | ==== Plusieurs enregistrements en une requête ==== | + | ===== Plusieurs enregistrements en une requête |
| <code sql> | <code sql> | ||
| Ligne 205: | Ligne 313: | ||
| - | ===== UPDATE ===== | + | ====== UPDATE |
| <code sql> | <code sql> | ||
| Ligne 226: | Ligne 334: | ||
| - | ==== Remplacer caractères ==== | + | ===== Remplacer caractères |
| Ligne 237: | Ligne 345: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ===== DELETE ===== | + | ====== DELETE |
| <code sql> | <code sql> | ||
| Ligne 246: | Ligne 354: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ==== Avec jointures ==== | + | ===== Avec jointures |
| Avec Oracle, impossible d' | Avec Oracle, impossible d' | ||
| Ligne 268: | Ligne 376: | ||
| - | ===== CREATE TABLE ===== | + | ====== CREATE TABLE ====== |
| - | ==== Clé primaire composée ==== | + | ===== Clé primaire composée |
| <code sql> | <code sql> | ||
| Ligne 283: | Ligne 391: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ==== Créer table à partir d'une requête ==== | + | ===== Créer table à partir d'une requête |
| Testé avec postgresql 9 et Oracle 10g : | Testé avec postgresql 9 et Oracle 10g : | ||
| Ligne 300: | Ligne 408: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| + | |||
| + | Testé avec M$ SQL Server : | ||
| + | |||
| + | <code sql> | ||
| + | SELECT * | ||
| + | INTO destination | ||
| + | FROM source; | ||
| + | </ | ||
| + | |||
| + | Doc : https:// | ||
| + | ====== ALTER TABLE ====== | ||
| + | |||
| + | <code sql> | ||
| + | ALTER TABLE nom_table | ||
| + | ADD (nouveau1 | ||
| + | nouveau2 | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ====== MSSQL : lier un utilisateur à une connexion ====== | ||
| + | |||
| + | <code sql> | ||
| + | USE NomDelaBase | ||
| + | GO | ||
| + | |||
| + | ALTER USER Utilisateur WITH LOGIN = Connexion | ||
| + | GO | ||
| + | </ | ||
| + | |||
| + | ====== MSSQL : copier des tables d'un schéma à un autre ====== | ||
| + | |||
| + | > Use the Generate Scripts Wizard in SSMS for generating the script for constraints and indexes. | ||
| + | > | ||
| + | >Follow these steps: | ||
| + | > | ||
| + | >1. Open SSMS | ||
| + | >2. Expand databases and select the database-> | ||
| + | >3. click next and set " | ||
| + | >4. Select the tables for which the script is needed | ||
| + | >5. Click next -> | ||
| + | > | ||
| + | >This generates the script for table with indexes, constraints etc. | ||
| + | > | ||
| + | >More information: | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | ====== MSSQL : trouver les verrous sur une table ====== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | object_name(object_id) AS objet_bloque, | ||
| + | lock.resource_type, | ||
| + | db.name AS db_name, | ||
| + | lock.resource_associated_entity_id, | ||
| + | lock.request_mode, | ||
| + | lock.request_session_id, | ||
| + | task.blocking_session_id, | ||
| + | task.* | ||
| + | FROM sys.dm_tran_locks lock | ||
| + | INNER JOIN sys.partitions p ON p.hobt_id= lock.resource_associated_entity_id | ||
| + | INNER JOIN sys.databases db ON db.database_id = lock.resource_database_id | ||
| + | LEFT JOIN sys.dm_os_waiting_tasks as task | ||
| + | ON lock.lock_owner_address = task.resource_address | ||
| + | LEFT JOIN sys.dm_os_tasks AS STasks | ||
| + | ON STasks.task_address = task.waiting_task_address | ||
| + | WHERE resource_database_id = 20 AND object_name(object_id) = ' | ||
| + | </ | ||
| - | ==== Documentations ==== | + | ====== Documentations |
| * PostgreSQL 9.1 : http:// | * PostgreSQL 9.1 : http:// | ||
| - | * Oracle 11g : http:// | + | * Oracle |
| + | * 11g : https:// | ||
| + | * 10g : https:// | ||
| + | * Microsoft SQL Server : | ||
| + | * 2017 : https:// | ||