Procédure stockée (stored procedure) sur MS SQL Server

Une procédure stockée c’est une fonction d’une base de données, avec laquelle des ordres et des instructions peuvent être mis à exécution à une base de données. Elle est par conséquent une commande unique qui exécute des ordres enregistrés.

L’avantage d’une procédure stockée c’est de mettre des instructions beaucoup utilisées d’un client au serveur (base de données) et de les exécuter avec un appel comme EXEC plusieurs fois. En plus, les procédures stockées aident à améliorer la sécurité d’un application, parce que normalement le client n’a plus un droit d’accès sur les commandes delete, update ou insert et donc fait la vie des << attaquants >> beaucoup plus difficile. Les procédures stockées peuvent être écrit en T-SQL sur Microsoft SQL Server.

Voici un exemple pour une procédure stockée simple en T-SQL. Ici on fait un select sur tous les données d’un tableau Customers.

CREATE PROCEDURE selectCustomers
AS
SELECT * FROM Customers
GO


EXEC selectCustomers
--ou simplement
selectCustomers

Jointure – les Joins en SQL

En bref, c’est quoi un JOIN?

Les Joins donnent la possibilité de interroger plusieurs tables à la fois. C’est-à-dire, si je veux voir – par exemple – quel client a commandé quel produit, je ne vais probablement pas trouver ceux informations dans le même tableau (dans un bon design d’un base de données). Du coup, il y a cinq Joins différents pour enchaîner des tableaux.

SQL_Joins.svg

INNER JOIN

Qu’est-ce qui se passe dans le probablement le plus utilisé join – le inner join ? Dans ce cas-là, seulement ceux données sont révélées, qui ont un partenaire dans une autre table. Effectivement c’est difficile à expliquer, c’est pourquoi je monte une graphique qui doit visualiser le concept :

db

Comme on peut remarquer sans difficulté, c’est qu’il y a une relation 1:N parmi le tableau Customer et le tableau Orders. Alors je veux interroger le nom d’un client (CompanyName) et les coûts correspondants (Freight). Voici la syntaxe :

SELECT CompanyName, Freight from Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID

Parce-que j’ai utilisé le inner join, je ne reçois que ceux entrées où les clients (customer) a effectivement fait des commandes. Les clients qui n’ont pas fait une commande n’ont pas de CustomerID dans le tableau Orders. Les commandes qui n’ont pas des clients n’apparaissent non plus – si c’était possible. Le CustomerID est la condition d’évaluation ici.

FULL OUTER JOIN

Pour l’outer join ce n’est pas de problème s’il ne trouve pas un << partenaire >> dans une autre tableau, il liste quand-même toujours tout les données. C’est-à-dire, si dans ma interrogation je veux recevoir aussi ceux clients qui n’ont pas encore fait une commande, je pourrais utiliser l’outer join.

Chaque enregistrement dans le tableau soit à gauche, soit à droite se retrouve dans l’ensemble des éventualités. Si se retrouves un partenaire correspondant en utilisant le critière ON, tout les deux partenaires seront combinés, sinon le côté manquant sera rempli par zero.

Un exemple pour un full out join :

SELECT CompanyName, Freight FROM Customers c
FULL OUTER JOIN Orders o ON c.CustomerID = o.CustomerID
FULL OUTER JOIN [Order Details] od ON od.OrderID = o.OrderID

Avec cette déclaration j’ai quasiment fait un join sur deux tableaux et dans ce cas-là, je recevrais tous les entrées, peu importe que un client a fait fait une commande ou pas. En effet ce n’est pas un avantage, car le plus grand la quantité des données à comparer, de plus élevée est la durée d’une interrogation.

LEFT/RIGHT OUTER JOIN

Dans un left join, les données qui viennent du tableau à la gauche seront en tout cas écrit dans le résultat. Si un ensemble de données, qui vient d’un tableau à la droit, correspond au critière ON, il va être transcrit aux colonnes, sinon les colonnes restent vides, donc NULL. Le right join travaille en sens inverse. Un left ou right join est rien d’autre que un outer join au tableau à gauche ou bien à droite.

CROSS JOIN

Un cross join sans WHERE clause, peut créer un produit cartésien des tableaux participants. C’est-à-dire, la teille du résultat ressamble au montant des lignes dans le premier tableau multiplié avec le montant des lignes dans le deuxième tableau.

Un exemple pour un cross join :

SELECT * FROM Customers
CROSS JOIN Orders

Comme vous avez peut-être déjà remarqué, on n’as pas besoin d’un ON instruction, parce que tout est multiplié par tout. Néanmoins, à cause de sa personalité l’utilisation d’un cross join est plutôt rare.