Jusqu'à présent, nous avons créé une base de données, ajouté deux tables et inséré des données dans les deux tables. Nous allons maintenant voir comment récupérer ces données. Mais pas seulement récupérer les données, mais pour interroger la base de données correspondante.
SQL signifie Structured Query Language . C'est la requête bit qui rend SQL si puissant. SQL est un langage qui vous permet d'exécuter des requêtes contre votre base de données. Il vous permet d'interroger la base de données pour les données que vous voulez.
Le SQL SELECT
Déclaration
Lorsqu'il s'agit d'interroger votre base de données MySQL, le SQL SELECT
déclaration rend tout cela possible. Il s'agit probablement de votre instruction SQL la plus fréquemment utilisée lorsque vous travaillez avec MySQL. Le SELECT
vous permet de décrire à MySQL exactement les données que vous souhaitez qu'il récupère.
Considérez l'instruction SQL suivante :
SELECT * FROM Fruit;
Voici le résultat :
C'est le SELECT
déclaration dans sa forme la plus simple. L'instruction SQL ci-dessus récupère tous les enregistrements du
Fruit
tableau.
L'astérisque (*
) indique à MySQL de renvoyer toutes les colonnes. Cela nous fait gagner du temps et des efforts. Sans cela, nous aurions besoin d'écrire les noms de toutes les colonnes que nous aimerions avoir renvoyées.
Cela dit, vous pouvez également demander à MySQL de ne renvoyer que les colonnes que vous souhaitez renvoyer. Cela se fait en nommant uniquement les colonnes que vous aimeriez voir renvoyées. Comme ceci :
SELECT FruitId, FruitName FROM Fruit;
Voici le résultat :
L'instruction SQL ci-dessus sélectionne le FruitId et FruitName colonnes du Fruit tableau.
Cela peut réduire l'encombrement afin que vous ne voyiez que les colonnes qui vous intéressent. Cela peut également améliorer les performances, car MySQL (et toute application que vous utilisez) n'a pas besoin d'utiliser des ressources précieuses pour renvoyer des données inutiles.
Encore une fois, cette requête récupère tous enregistrements de la table — MySQL renverra tous les enregistrements sauf indication contraire.
Le WHERE
Article
Vous pouvez ajouter le WHERE
clause pour limiter le jeu de résultats aux seuls enregistrements qui vous intéressent. Comme ceci :
SELECT * FROM Fruit WHERE UnitId = 1;
Résultat :
La requête ci-dessus renvoie tous les enregistrements du
Fruit
table où l'
UnitId
la colonne a une valeur de 1
.
Sous-requêtes :SELECT
imbriqué Déclarations
Et si nous ne connaissions pas l'
UnitId
? ? Et si nous savions seulement rechercher ces enregistrements avec un nom d'unité de Piece
?
Facile! Nous pourrions réécrire l'exemple ci-dessus pour utiliser un SELECT
imbriqué instruction (autrement connue sous le nom de sous-requête ) qui interroge une autre table (les
Unités
table). Cela nous permettra d'utiliser l'unité réelle nom (plutôt que son ID) car la deuxième table contient ceci dans le UnitName
champ :
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Résultat :
Ici, nous utilisons un SELECT
imbriqué déclaration (c'est-à-dire un SELECT
instruction dans un SELECT
instruction) pour interroger les
Unités
table pour
UnitId
de l'enregistrement qui contient Piece
comme son
UnitName
valeur. Nous pouvons le faire parce que
Fruit.UnitId
colonne est une clé étrangère vers
Units.UnitId
colonne.
Voici d'autres exemples de sous-requêtes si cela vous intéresse.
Utiliser un JOIN
SQL
En allant un peu plus loin, nous pourrions réécrire notre SELECT
imbriqué déclaration dans un INNER JOIN
.
En SQL, un JOIN
vous permet d'interroger plusieurs tables qui partagent des données. Dans notre cas, les deux tables partagent le UnitId
on peut donc dire qu'ils sont "rejoints" par ce champ.
Il existe différents types de jointures en SQL, cependant, nous nous intéressons principalement à la INNER JOIN
pour l'instant.
Le INNER JOIN
la syntaxe ressemble à ceci :
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Nous pourrions donc réécrire notre sous-requête de l'exemple précédent à la suivante :
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Résultat :
Nous avons spécifié Fruit.*
au lieu de simplement *
car nous voulions uniquement renvoyer toutes les colonnes du
Fruit
table. Si nous avions utilisé *
, la requête aurait renvoyé toutes les colonnes des deux tables.
Consultez également le LEFT JOIN
et RIGHT JOIN
pour voir comment vous pouvez obtenir des données différentes selon le type de jointure.
Sous-requête vs JOIN
?
Maintenant que vous avez vu deux méthodes pour obtenir le même résultat, vous vous demandez probablement laquelle est la meilleure ?
Les sous-requêtes ont tendance à être plus lisibles (et peut-être plus faciles à comprendre), ce qui peut faciliter leur compréhension pour les débutants.
Cependant, de nombreux programmeurs SQL trouvent JOIN
s plus efficace et plus performant. Si vous rencontrez des problèmes de performances avec vos requêtes ou une application, essayez de convertir toutes les sous-requêtes en JOIN
s ou vice versa (dans certains cas, une sous-requête pourrait être plus performante).
De plus, il peut y avoir des cas où une sous-requête est votre seule option, c'est donc aussi une considération.
Plus d'opérateurs
Jusqu'à présent, nos requêtes contenaient toutes un signe égal (=
). C'est ce qu'on appelle un opérateur . Plus précisément, c'est un opérateur de comparaison car il compare une expression à une autre.
Il existe de nombreux autres opérateurs que vous pouvez utiliser dans vos requêtes. Ceux-ci peuvent grandement aider à réduire le jeu de résultats aux seuls enregistrements dont vous avez besoin. Il n'est pas rare qu'une base de données contienne des millions d'enregistrements. Même si vous n'avez que des milliers d'enregistrements, essayer de trouver un enregistrement (ou même juste une poignée) parmi des milliers serait une tâche très ardue si vous n'aviez pas ces opérateurs à votre disposition.
Voici quelques-uns des opérateurs SQL les plus couramment utilisés.
Le >
Opérateur
Vous pouvez utiliser le >
opérateur pour sélectionner des données qui sont plus grandes qu'une valeur donnée.
SELECT * FROM Fruit WHERE Inventory > 10;
Le <
Opérateur
Vous pouvez utiliser le <
opérateur pour sélectionner les données moins qu'une valeur donnée.
SELECT * FROM Fruit WHERE Inventory < 10;
Le <>
Opérateur
Vous pouvez utiliser le <>
opérateur pour sélectionner des données qui sont à la fois inférieures à et supérieur à une valeur donnée.
SELECT * FROM Fruit WHERE Inventory <> 10;
Le >=
Opérateur
Vous pouvez utiliser le >=
opérateur pour sélectionner des données supérieures ou égales à une valeur donnée.
SELECT * FROM Fruit WHERE Inventory >= 10;
Le <=
Opérateur
Vous pouvez utiliser le <=
opérateur pour sélectionner des données inférieures ou égales à une valeur donnée.
SELECT * FROM Fruit WHERE Inventory <= 10;
Le AND
Opérateur
Vous pouvez ajouter un AND
opérateur vers WHERE
clause afin de limiter votre sélection aux seuls enregistrements qui remplissent deux conditions (ou plus si vous incluez plus de AND
les opérateurs).
Voici un exemple :
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
Le OR
Opérateur
Vous pouvez utiliser un OR
opérateur pour élargir votre sélection à plusieurs critères. Comme son nom l'indique, le OR
La clause vous permet de sélectionner des données où le critère est soit ceci OU que. Donc le AND
limites de l'opérateur votre sélection et le OR
l'opérateur élargit il.
Voici un exemple :
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
Le BETWEEN
Opérateur
Utilisez le BETWEEN
opérateur pour sélectionner des données comprises entre deux valeurs données.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
Le NOT
Opérateur
Utilisez le NOT
opérateur pour sélectionner des données qui ne sont pas équivalent à une condition donnée.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');