Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
memo:sql [19/07/2016 16:39] – [Transtypages] Arnaud Jacqueminmemo:sql [03/11/2025 17:35] (Version actuelle) – [MSSQL : trouver les verrous sur une table] Arnaud Jacquemin
Ligne 1: Ligne 1:
-====== Mémo Requêtes SQL ======+====== 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 NVL(cli.telephonefixe, cli.telephonemobile) AS telephone+SELECT COALESCE (cli.telephonefixe, cli.telephonemobile) AS telephone
 FROM clients FROM clients
 </code> </code>
  
-Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm|Oracle]]+Doc : [[https://en.wikibooks.org/wiki/Structured_Query_Language/SELECT:_IS_NULL_Predicate#Coalesce()_and_Similar_Functions|Wikibooks]], [[https://docs.microsoft.com/fr-fr/sql/t-sql/language-elements/coalesce-transact-sql|MS SQL]]
  
-==== Switch Case ====+Chez Oracle il existe aussi une fonction non standard Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm|NVL]] 
 + 
 +===== Switch Case =====
  
 <code sql> <code sql>
Ligne 38: Ligne 42:
 Doc : [[http://docs.oracle.com/cd/B13789_01/server.101/b10759/expressions004.htm|Oracle]] Doc : [[http://docs.oracle.com/cd/B13789_01/server.101/b10759/expressions004.htm|Oracle]]
  
-==== Portion de chaîne : SUBSTR ====+===== Portion de chaîne =====
  
 +**Oracle :**
 + 
 <code sql> <code sql>
 SELECT SELECT
Ligne 46: Ligne 52:
 FROM produits_coloris FROM produits_coloris
 </code> </code>
- 
  
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions162.htm|Oracle]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions162.htm|Oracle]]
 +
 +**MS SQL Server :**
 +
 +<code sql>
 +SELECT
 + -- Séparer heures et minutes
 + SUBSTRING (a.actvissalheurearr, 1, 2) + ':' + SUBSTRING (a.actvissalheurearr, 3, 2) AS "Heure"
 +FROM ACTEVISITESALARIE a
 +</code>
 +
 +Doc : https://docs.microsoft.com/en-us/sql/t-sql/functions/substring-transact-sql?view=sql-server-ver15
  
 Pour le faire selon une expression régulière : [[http://docs.oracle.com/cd/B14117_01/server.101/b10759/functions116.htm|REGEXP_SUBSTR chez Oracle]], [[http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP|SUBSTRING w/ POSIX Regular Expressions chez PostgreSQL]] Pour le faire selon une expression régulière : [[http://docs.oracle.com/cd/B14117_01/server.101/b10759/functions116.htm|REGEXP_SUBSTR chez Oracle]], [[http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP|SUBSTRING w/ POSIX Regular Expressions chez PostgreSQL]]
Ligne 59: Ligne 75:
 FROM xanaka.lignes_perimetre_action_mkt pam FROM xanaka.lignes_perimetre_action_mkt pam
 </code> </code>
-==== Transtypages ====+===== Transtypages =====
  
-=== Nombre -> texte ===+==== Nombre -> texte ====
  
 Fonctions CAST ou TO_CHAR Fonctions CAST ou TO_CHAR
Ligne 80: Ligne 96:
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions016.htm#i1269136|Oracle CAST]] ou [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions181.htm|TO_CHAR]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions016.htm#i1269136|Oracle CAST]] ou [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions181.htm|TO_CHAR]]
  
-=== Date -> texte ==+==== Date -> texte ====
- +
-== Oracle ==+
  
 +=== Oracle ===
  
 <code sql> <code sql>
Ligne 94: Ligne 109:
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm#i1009324|Oracle]] et [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#sthref419|formats]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm#i1009324|Oracle]] et [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#sthref419|formats]]
  
-== MySQL ==+=== MySQL ===
  
 <code sql> <code sql>
Ligne 104: Ligne 119:
 Doc : [[https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format|MySQL]] Doc : [[https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format|MySQL]]
  
-=== Date -> numéro de semaine ===+ 
 +=== MS SQL Server === 
 + 
 +<code sql> 
 +select CONVERT(varchar, LOGDate, 103)   
 +from latable 
 +-- Donne par exemple : '28/03/2020' 
 +</code> 
 + 
 +Doc : [[https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15#date-and-time-styles|CAST and CONVERT (Transact-SQL)]] 
 +==== Date -> numéro de semaine ====
  
 <code sql> <code sql>
Ligne 113: Ligne 138:
  
  
-=== Texte -> date ===+==== DateTime -> Date ==== 
 + 
 +=== Microsoft SQL Server === 
 + 
 +<code sql> 
 +SELECT cast([DateTime] As Date) AS jour 
 +FROM table 
 +</code> 
 + 
 +Source : https://stackoverflow.com/a/923322 
 + 
 + 
 +==== Texte -> date ==== 
 + 
 +=== Oracle ===
  
 Fonction TO_DATE Fonction TO_DATE
Ligne 124: Ligne 163:
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm#i1003589|Oracle]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm#i1003589|Oracle]]
  
-==== IN ====+=== Microsoft SQL Server === 
 + 
 +CAST('17/07/2019 00:00:00' AS date) 
 +<code sql> 
 +SELECT * FROM latable 
 +WHERE TOTAL_DATE = CAST('17/07/2019 00:00:00' AS date) 
 +</code> 
 + 
 +Ou en précisant le format : 
 +<code sql> 
 +SELECT * FROM latable 
 +WHERE date = CONVERT(date, '20210825', 112) 
 +</code> 
 +Doc : https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017#g-using-cast-and-convert-with-datetime-data 
 + 
 + 
 +=== MySQL === 
 + 
 +<code sql> 
 +SELECT STR_TO_DATE("2022/03/25", "%Y/%m/%d")  
 +</code> 
 + 
 +Doc : [[https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-to-date| STR_TO_DATE(str,format)]] et [[https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format|formats]] 
 + 
 + 
 +===== IN =====
  
 <code sql> <code sql>
Ligne 134: Ligne 198:
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm#i1050801|Oracle]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm#i1050801|Oracle]]
  
-=== Avec dédoublonnage ===+==== Avec dédoublonnage ====
  
 S'il y a plusieurs comptes pour un email, n'extraire que le compte le plus récent : S'il y a plusieurs comptes pour un email, n'extraire que le compte le plus récent :
Ligne 149: Ligne 213:
  
  
-==== Agrégation ====+===== Agrégation =====
  
 <code sql> <code sql>
Ligne 159: Ligne 223:
 Doc : [[http://docs.oracle.com/cd/B13789_01/server.101/b10759/statements_10002.htm#i2066419|Oracle]] Doc : [[http://docs.oracle.com/cd/B13789_01/server.101/b10759/statements_10002.htm#i2066419|Oracle]]
  
-==== Plus petite valeur entre 2 colonnes ====+===== Plus petite valeur entre 2 colonnes =====
  
 <code sql> <code sql>
Ligne 171: Ligne 235:
  
  
-==== Plus grande valeur entre 2 colonnes ====+===== Plus grande valeur entre 2 colonnes =====
  
 <code sql> <code sql>
Ligne 180: Ligne 244:
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions060.htm|Oracle]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions060.htm|Oracle]]
  
-===== INSERT =====+Pour la plus petite valeur, utiliser la fonction ''LEAST'' 
 + 
 +<code sql> 
 +SELECT LEAST(datemodification, datecreation) 
 +FROM matable 
 +</code> 
 + 
 +Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions075.htm|Oracle 10g]] 
 + 
 +===== 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 ... 
 +</code> 
 + 
 + 
 +====== INSERT ======
  
 <code sql> <code sql>
Ligne 189: Ligne 285:
 Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm|Oracle]] Doc : [[http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm|Oracle]]
  
-==== Depuis une sous-requête ====+===== Depuis une sous-requête =====
  
 Si la table existe déjà, sinon utiliser [[#creer_table_a_partir_d_une_requete]] Si la table existe déjà, sinon utiliser [[#creer_table_a_partir_d_une_requete]]
Ligne 203: Ligne 299:
  
  
-==== Plusieurs enregistrements en une requête ====+===== Plusieurs enregistrements en une requête =====
  
 <code sql> <code sql>
Ligne 217: Ligne 313:
  
  
-===== UPDATE =====+====== UPDATE ======
  
 <code sql> <code sql>
Ligne 238: Ligne 334:
  
  
-==== Remplacer caractères ====+===== Remplacer caractères =====
  
  
Ligne 249: Ligne 345:
  
 Doc : [[http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions153.htm#SQLRF00697|Oracle]] Doc : [[http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions153.htm#SQLRF00697|Oracle]]
-===== DELETE =====+====== DELETE ======
  
 <code sql> <code sql>
Ligne 258: Ligne 354:
 Doc : [[http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems014.htm|Oracle]] Doc : [[http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems014.htm|Oracle]]
  
-==== Avec jointures ====+===== Avec jointures =====
  
 Avec Oracle, impossible d'utiliser des jointures comme habituellement. Voici la syntaxe à utilise : Avec Oracle, impossible d'utiliser des jointures comme habituellement. Voici la syntaxe à utilise :
Ligne 280: Ligne 376:
  
  
-===== CREATE TABLE =====+====== CREATE TABLE ======
  
-==== Clé primaire composée ====+===== Clé primaire composée =====
  
 <code sql> <code sql>
Ligne 295: Ligne 391:
 Doc : [[http://docs.oracle.com/cd/B14117_01/server.101/b10759/statements_7002.htm|Oracle]] Doc : [[http://docs.oracle.com/cd/B14117_01/server.101/b10759/statements_7002.htm|Oracle]]
  
-==== 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 312: Ligne 408:
  
 Doc : [[http://www.postgresql.org/docs/9.0/static/sql-createtableas.html|PostgreSQL]] Doc : [[http://www.postgresql.org/docs/9.0/static/sql-createtableas.html|PostgreSQL]]
 +
 +Testé avec M$ SQL Server :
 +
 +<code sql>
 +SELECT *
 +INTO destination
 +FROM source;
 +</code>
 +
 +Doc : https://learn.microsoft.com/en-us/sql/t-sql/queries/select-into-clause-transact-sql
 +====== ALTER TABLE ======
 +
 +<code sql>
 +ALTER TABLE nom_table
 +   ADD (nouveau1  NUMBER(6,0) DEFAULT 10267 NOT NULL,
 +        nouveau2  VARCHAR2(3)
 +   ); 
 +</code>
 +
 +====== MSSQL : lier un utilisateur à une connexion ======
 +
 +<code sql>
 +USE NomDelaBase
 +GO
 +
 +ALTER USER Utilisateur WITH LOGIN = Connexion
 +GO
 +</code>
 +
 +====== 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->tasks->generate scripts to launch the GSW
 +>3. click next and set "Script Check Constraints" to true, "Script Indexes " to true, "ScriptDependencies" to true and set whatever is needed.
 +>4. Select the tables for which the script is needed
 +>5. Click next ->next->finish
 +>
 +>This generates the script for table with indexes, constraints etc.
 +>
 +>More information: http://msdn.microsoft.com/en-us/library/ms178078.aspx
 +
 +Source : https://social.msdn.microsoft.com/Forums/en-US/17a16dc4-dcf1-4de8-baba-6949c55a4c5d/copy-constraints-and-indexes-from-one-database-to-another?forum=transactsql
 +
 +====== 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) = 'NOM_DE_LA_TABLE'
 +</code>
  
  
-==== Documentations ====+====== Documentations ======
  
   * PostgreSQL 9.1 : http://docs.postgresql.fr/9.1/   * PostgreSQL 9.1 : http://docs.postgresql.fr/9.1/
-  * Oracle 11g : http://docs.oracle.com/cd/E11882_01/server.112/e26088/toc.htm+  * Oracle  
 +    * 11g : https://docs.oracle.com/cd/E11882_01/server.112/e41084/toc.htm 
 +    * 10g : https://docs.oracle.com/cd/B19306_01/server.102/b14200/toc.htm 
 +  * Microsoft SQL Server : 
 +    * 2017 : https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-2017
  
  
  • memo/sql.1468939144.txt.gz
  • Dernière modification : il y a 10 ans
  • de Arnaud Jacquemin