Précis de SQL : utilisation de « Minus »

S’il est une chose qui arrive souvent quand on cherche à optimiser ou reprendre une application, c’est de tomber sur LA requête SQL…
Celle qui a du prendre 3 jours à être faite par une personne qui, très probablement, ne pensait pas ou ne voulait pas que quelqu’un, autre que lui (et encore…), la comprenne.

Alors si parfois quelqu’un ou quelques commentaires peuvent permettre de voir où le code autour voulait « fonctionnellement » en venir, le plus souvent la requête reste intouchée et vierge de tous commentaire autre que :

/**
* FIXME : dirty and un-comprehensible... but for now this
* should do the trick...
* TODO : Embaucher un stagiaire pour en faire une analyse détaillée
**/

Mais heureusement que je suis là (et stagiaire…) et que je vais enfin prouver deux choses,

  • la première : Mysql n’est pas une base de donnée… ;
  • la deuxième : ce blog est utile (mais si !!) ;

Donc souvent pour faire une refactoring de ce genre de requête un être humain censé possédant une légère maitrise de ce que devrait faire la requête, va tout simplement tenter de la ré-écrire, et quand il retrouvera un résultat… quasi-similaire, la seule peur qu’il aura sera de savoir si les deux requêtes font bel et bien le même travail…

Et c’est là que rentre en jeu la clause MINUS, statement standard de SQL92, supporté par Oracle et PostGreSQL, mais pas par Mysql…(first fact). Qui permet de réaliser une simple vérification entre deux requêtes query1 et query2, en utilisant votre requêteur préféré (e.g. Toad) et en exécutant:

query1
minus
query2

Alors vous allez obtenir les tuples qui ressortent avec une requête mais pas l’autre. Cette opération a un sens, pour être vraiment sûr il faut donc intervertir les deux requêtes et répéter le procéssus.

Enjoy

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :