L'un des plus grands avantages de l'utilisation de bases de données relationnelles telles que MySQL est que sa structure relationnelle vous permet de stocker et d'interroger facilement des informations sur plusieurs tables.
Explorons comment récupérer exactement les données souhaitées à partir de plusieurs tables de base de données et les différentes jointures disponibles qui vous permettent d'extraire les résultats exacts que vous souhaitez.
Initialiser la base de données exemple
Ce n'est pas obligatoire, mais si vous souhaitez suivre les exemples de cet article, vous pouvez initialiser un exemple de base de données localement avec les commandes de terminal ci-dessous:
clone git https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> SELECT COUNT (*) FROM clients;
Vous devriez obtenir un résultat indiquant qu'il y a 2000 lignes dans le clients table.
Jointure par défaut / INNER
La jointure par défaut utilisée dans Bases de données MySQL
s'appelle la jointure INNER et est la plus courante et la plus simple. Cette jointure renvoie tous les enregistrements pour lesquels il existe des enregistrements correspondants dans les deux tables et ignore tous les autres enregistrements.Java fournit JDBC dans le cadre du SDK Java. Dans cet article, examinons les détails de la connexion à une base de données MySQL et de l'exécution de requêtes avec celle-ci.
Par exemple, si vous souhaitez voir le prénom et le nom du client, ainsi que le montant et la date de la commande pour toutes les commandes supérieures à 1000 USD, vous pouvez utiliser l'instruction SQL suivante:
SÉLECTIONNER
c.id, c.first_name, c.last_name, o.amount, o.created_at
DE
clients c, commandes o
OÙ
o.customer_id = c.id AND o.amount> = 1000;
Quelques notes concernant la requête ci-dessus:
- Cinq colonnes différentes sont sélectionnées, trois de la table des clients et deux de la table des commandes.
- Dans la clause FROM, les deux tables sont définies, mais avec le suffixe des lettres «c» et «o». Ceux-ci spécifient simplement des alias dans SQL, peuvent être tout ce que vous souhaitez et sont utilisés pour raccourcir la requête SQL.
- Le o.customer_id = c.id est l'aspect de jointure de la requête et garantit une corrélation appropriée entre les clients et les commandes.
Une manière différente, et techniquement plus correcte d'un point de vue syntaxique d'écrire la même requête est ci-dessous:
SÉLECTIONNER
c.id, c.first_name, c.last_name, o.amount, o.created_at
DE
clients c commandes INNER JOIN o
SUR
customer_id = c.id
OÙ
o. montant> = 1000;
La requête ci-dessus a tendance à être un peu plus facile à lire car vous pouvez facilement voir la jointure entre la table des clients et des commandes. À toutes fins utiles, ces deux requêtes sont identiques et produiront exactement les mêmes enregistrements.
Jointures GAUCHE
Les jointures à gauche renverront tous les enregistrements de la table de gauche qui correspondent également aux enregistrements de la table de droite et ignoreront tous les autres enregistrements. Par exemple, vous souhaitez peut-être afficher le montant total des ventes pour chaque produit de la base de données, vous pouvez essayer d'utiliser une requête telle que:
SÉLECTIONNER
p.name, sum (item.amount) AS tamount
DE
commandes_items article GAUCHE JOIN produits p
SUR
item.product_id = p.id
GROUP BY item.product_id ORDER BY tamount DESC
Cela se traduit par une belle vue à deux colonnes montrant le nom du produit avec le montant total des ventes et fonctionne comme prévu. La requête a parcouru tous les produits de la table orders_items, les a joints aux enregistrements de la table products et a renvoyé le montant total des ventes de chacun.
Jointures à DROITE
En utilisant l'exemple ci-dessus, notez que la requête ci-dessus n'a renvoyé que 19 enregistrements alors qu'il y a un total de 22 produits dans la base de données. En effet, la requête a commencé par la table orders_items et l'a jointe à la table products, et comme certains produits n'ont jamais été commandés, aucun enregistrement de ces produits n'existe dans les commandes_items table.
Que se passe-t-il si vous souhaitez obtenir une liste de tous les produits avec des montants de vente, y compris les produits qui n'ont pas été commandés? Essayez une jointure droite avec la requête suivante:
SÉLECTIONNER
p.name, sum (item.amount) AS tamount
DE
orders_items article RIGHT JOIN produits p
SUR
item.product_id = p.id
GROUP BY p.id ORDER BY tamount DESC
C'est mieux, et la requête renvoie désormais les 22 produits complets, trois d'entre eux ayant une quantité de nul. En effet, au lieu d'utiliser orders_items comme table principale qui se joint à la table products, la jointure droite inverse la commande et joint la table products à la table orders_items.
Jointures multiples dans une requête
Parfois, vous avez besoin de joindre trois tables ou plus ensemble pour obtenir un ensemble spécifique de résultats.
Par exemple, vous voulez peut-être une liste de tous les clients qui ont acheté le micro-ondes (numéro de produit n ° 1), y compris leur nom et la date de commande. Cela nécessite un SELECT sur trois tables, ce qui peut être effectué en utilisant deux jointures avec la requête suivante:
SÉLECTIONNER
c.first_name, c.last_name, o.amount, o.created_at
DE
clients c commandes INNER JOIN o
SUR
c.id = o.customer_id INNER JOIN élément orders_items
SUR
item.order_id = o.id
OÙ
item.product_id = 1 ORDER BY o.created_at;
Cette requête renvoie toutes les 426 commandes du micro-ondes et fonctionne comme prévu. Il associe d'abord tous les clients à leurs commandes respectives, puis d'autres requêtes qui résultent définies par faire correspondre toutes les commandes à celles de la table orders_items contenant le produit micro-ondes (id # 1).
Ne jamais utiliser de sous-requêtes avec des clauses IN
En bref, vous devez à tout prix éviter d'utiliser des sous-requêtes dans vos requêtes SQL telles que:
SELECT prénom, nom FROM clients WHERE id IN (SELECT customer_id FROM commandes WHERE statut = 'approuvé' AND montant <100);
Les requêtes telles que ci-dessus sont très inefficaces, utilisent un grand nombre de ressources et doivent être évitées autant que possible. Utilisez plutôt des jointures appropriées comme indiqué dans les sections ci-dessus. Par exemple, la requête ci-dessus doit être réécrite comme:
SELECT c.first_name, c.last_name FROM clients c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.status = 'Approuvé' AND o.amount <100;
Gagnez du temps avec les jointures SQL
Nous espérons que cet article vous montrera la puissance des bases de données relationnelles telles que MySQL, et comment créer Requêtes SQL qui récupèrent les enregistrements de plusieurs tables dans une requête à l'aide de jointures, ce qui vous permet de récupérer les résultats exacts souhaités.
Vous avez appris trois jointures différentes dans SQL, comment créer des alias pour les noms de colonne et de table, utiliser plusieurs jointures dans une requête et pourquoi vous devez éviter les sous-requêtes. Ne vous brouillez plus jamais en essayant de compiler manuellement différents ensembles de données en un seul, et commencez à utiliser des jointures pour impressionner vos collègues de travail et gagner du temps.
Google Docs est désormais une centrale de bureau. Avec l'aide de ces modules complémentaires, vous pouvez donner à votre Google Docs un aspect joli et élégant.
- Programmation
- SQL
- base de données
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives!
Un pas de plus…!
Veuillez confirmer votre adresse e-mail dans l'e-mail que nous venons de vous envoyer.