Les requĂȘtes SQL sont rapides. Partie 1

Présentation


Le langage SQL est trĂšs fortement intĂ©grĂ© dans la vie des analystes d'affaires et les exigences des candidats en raison de sa simplicitĂ©, de sa commoditĂ© et de sa prĂ©valence. D'aprĂšs ma propre expĂ©rience, je peux dire que le plus souvent, SQL est utilisĂ© pour former des tĂ©lĂ©chargements, des vitrines (avec la construction ultĂ©rieure de rapports basĂ©s sur ces vitrines) et l'administration de la base de donnĂ©es. Et comme le travail quotidien de l'analyste est inĂ©vitablement associĂ© Ă  des tĂ©lĂ©chargements de donnĂ©es et Ă  des vitrines, la capacitĂ© d'Ă©crire des requĂȘtes SQL peut devenir un facteur grĂące auquel le candidat gagnera un avantage ou sera Ă©liminĂ©. La triste nouvelle est que tout le monde ne peut pas s'attendre Ă  l'avoir sur un banc d'Ă©tudiant. La bonne nouvelle est que l'apprentissage de SQL n'est rien de compliquĂ©, qu'il est rapide et que la syntaxe des requĂȘtes est simple et directe. Cela est particuliĂšrement vrai pour ceux qui ont dĂ©jĂ  rencontrĂ© des langues plus complexes.

J'ai divisĂ© la formation SQL en trois parties. Cette partie est consacrĂ©e Ă  la syntaxe de base, utilisĂ©e dans 80 Ă  90% des cas. Les deux prochaines parties seront consacrĂ©es aux sous-requĂȘtes, Join'am et opĂ©rateurs spĂ©ciaux. Le but des guides est de pratiquer rapidement et pratiquement la syntaxe SQL pour l'ajouter Ă  l'arsenal de compĂ©tences.

Pratique


Une introduction Ă  la syntaxe sera examinĂ©e Ă  l'aide d'une base de donnĂ©es ouverte conçue spĂ©cifiquement pour la pratique SQL. Pour que votre formation soit aussi efficace que possible, ouvrez le lien ci-dessous dans un nouvel onglet et exĂ©cutez immĂ©diatement les exemples ci-dessus, cela vous permettra de mieux consolider le matĂ©riel et de travailler vous-mĂȘme avec la syntaxe.

Cliquez ici

AprĂšs avoir cliquĂ© sur le lien, vous pouvez voir l'Ă©diteur de requĂȘte lui-mĂȘme et la sortie des donnĂ©es dans la partie centrale de l'Ă©cran, la liste des tables de base de donnĂ©es est dans la partie droite.

Structure de requĂȘte SQL


La structure générale de la demande est la suivante:

SELECT ('  *    ; ') FROM ('; ') WHERE ('/, , city = 'Moscow'; ') GROUP BY (',     ; ') HAVING ('/    ; ') ORDER BY (',     ; ') 

Analysons la structure. Pour plus de commodité, l'élément d'apprentissage actuel dans la demande est mis en évidence par CAPS.

SELECT, FROM


SELECT, FROM - Ă©lĂ©ments requis de la requĂȘte qui dĂ©finissent les colonnes sĂ©lectionnĂ©es, leur ordre et leur source de donnĂ©es.

Sélectionnez tout (indiqué par *) dans le tableau Clients:

 SELECT * FROM Customers 

SĂ©lectionnez les colonnes CustomerID, CustomerName dans la table Customers:

 SELECT CustomerID, CustomerName FROM Customers 


OERE


WHERE est un Ă©lĂ©ment de requĂȘte facultatif utilisĂ© lorsque vous devez filtrer les donnĂ©es en fonction de la condition souhaitĂ©e. TrĂšs souvent, Ă  l'intĂ©rieur de l'Ă©lĂ©ment where, IN / NOT IN est utilisĂ© pour filtrer une colonne par plusieurs valeurs, ET / OR pour filtrer une table par plusieurs colonnes.

Filtrage par une condition et une valeur:

 select * from Customers WHERE City = 'London' 

Filtrage par une condition et plusieurs valeurs en utilisant IN (inclusion) ou NOT IN (exception):

 select * from Customers where City IN ('London', 'Berlin') 

 select * from Customers where City NOT IN ('Madrid', 'Berlin','Bern') 

Filtrage par plusieurs conditions en utilisant AND (toutes les conditions sont remplies) ou OR (au moins une condition est satisfaite) et plusieurs valeurs:

 select * from Customers where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15 

 select * from Customers where City in ('London', 'Berlin') OR CustomerID > 4 

GROUPE PAR


GROUP BY est un Ă©lĂ©ment de requĂȘte facultatif avec lequel vous pouvez spĂ©cifier l'agrĂ©gation par la colonne souhaitĂ©e (par exemple, si vous avez besoin de savoir combien de clients vivent dans chaque ville).

Lors de l'utilisation de GROUP BY, il est obligatoire:

  1. la liste des colonnes utilisĂ©es pour la coupe Ă©tait la mĂȘme dans SELECT et dans GROUP BY,
  2. les fonctions d'agrĂ©gation (SUM, AVG, COUNT, MAX, MIN) doivent Ă©galement ĂȘtre spĂ©cifiĂ©es dans SELECT avec la colonne Ă  laquelle une telle fonction est appliquĂ©e.

Regroupement du nombre de clients par ville:

 select City, count(CustomerID) from Customers GROUP BY City 

Regroupement du nombre de clients par pays et par ville:

 select Country, City, count(CustomerID) from Customers GROUP BY Country, City 

Regroupement des ventes par ID produit avec différentes fonctions agrégées: le nombre de commandes avec ce produit et le nombre de piÚces vendues:

 select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails GROUP BY ProductID 

Regroupement des ventes avec filtrage de la table source. Dans ce cas, la sortie sera un tableau avec le nombre de clients dans les villes allemandes:

 select City, count(CustomerID) from Customers WHERE Country = 'Germany' GROUP BY City 

Renommez une colonne agrĂ©gĂ©e Ă  l'aide de l'opĂ©rateur AS. Par dĂ©faut, le nom de la colonne agrĂ©gĂ©e est Ă©gal Ă  la fonction d'agrĂ©gation appliquĂ©e, ce qui peut en outre ne pas ĂȘtre trĂšs pratique pour la perception.

 select City, count(CustomerID) AS Number_of_clients from Customers group by City 

AYANT


HAVING est un Ă©lĂ©ment de requĂȘte facultatif qui est responsable du filtrage au niveau des donnĂ©es groupĂ©es (en fait, OERE, mais seulement un niveau plus haut).

En filtrant le tableau agrégé avec le nombre de clients par ville, dans ce cas, nous laissons en déchargement uniquement les villes dans lesquelles il y a au moins 5 clients:

 select City, count(CustomerID) from Customers group by City HAVING count(CustomerID) >= 5 


Dans le cas d'une colonne renommée dans HAVING, vous pouvez spécifier à la fois le nombre de constructions d'agrégation (CustomerID) et le nouveau nom de colonne number_of_clients:

 select City, count(CustomerID) as number_of_clients from Customers group by City HAVING number_of_clients >= 5 

Un exemple de requĂȘte contenant WHERE et HAVING. Dans cette requĂȘte, la table initiale par utilisateurs est d'abord filtrĂ©e, le nombre de clients par ville est calculĂ©, et seules les villes restent oĂč le nombre de clients est au moins 5:

 select City, count(CustomerID) as number_of_clients from Customers WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend') group by City HAVING number_of_clients >= 5 

COMMANDER PAR


ORDER BY est un Ă©lĂ©ment de requĂȘte facultatif qui est responsable du tri de la table.

Un exemple simple de tri par une colonne. Dans cette demande, un tri par ville spécifié par le client est effectué:

 select * from Customers ORDER BY City 

Vous pouvez trier par plusieurs colonnes, dans ce cas, le tri s'effectue dans l'ordre des colonnes spécifiées:

 select * from Customers ORDER BY Country, City 

Par défaut, le tri est croissant pour les nombres et par ordre alphabétique pour les valeurs de texte. Si le tri inverse est nécessaire, dans la clause ORDER BY, aprÚs le nom de la colonne, ajoutez DESC:

 select * from Customers order by CustomerID DESC 

Tri inverse par une colonne et tri par défaut par la seconde:

 select * from Customers order by Country DESC, City 

Rejoignez


JOIN - un élément facultatif utilisé pour joindre des tables par la clé qui est présente dans les deux tables. La clé est précédée d'une instruction ON.

Une requĂȘte dans laquelle nous joignons les tables Order et Customer par la clĂ© CustomerID, et le nom de la table est ajoutĂ© avant les noms de colonne de la clĂ© via un point:

 select * from Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID 

Souvent, une situation peut se produire lorsque vous devez mapper une table avec des valeurs d'une autre. Selon la tĂąche, diffĂ©rents types de connexions peuvent ĂȘtre utilisĂ©s. INNER JOIN - intersection, RIGHT / LEFT JOIN pour mapper une table avec les connaissances d'une autre,

 select * from Orders join Customers on Orders.CustomerID = Customers.CustomerID where Customers.CustomerID >10 

À l'intĂ©rieur de la requĂȘte JOIN entiĂšre, elle est incorporĂ©e aprĂšs l'Ă©lĂ©ment from Ă  l'Ă©lĂ©ment where, un exemple de requĂȘte:

D'autres types de JOIN peuvent ĂȘtre vus dans la merveilleuse image ci-dessous:


Dans la partie suivante, nous parlerons davantage des types JOIN et des requĂȘtes imbriquĂ©es.

Si vous avez des questions / suggestions, demandez toujours Ă  contacter!

Source: https://habr.com/ru/post/fr480838/


All Articles