Chapitre 8 DB
Chapitre 8 DB
Chapitre 8 DB
FONCTIONS AVANCEES
I. INTRODUCTION
Cette unité est une extension de l'unité précédente, où différents opérateurs et fonctions ont été
discutés en détail. Cet appareil traite exclusivement des fonctions de recherche textuelle. Il décrit
également les fonctions Distribution, Bit, Cryptage et Information. Il décrit également en détail
l'ensemble de fonctions et de modificateurs pouvant être utilisés avec le modificateur GROUP BY
avec des exemples appropriés.
OBJECTIFS
Après avoir étudié cette unité, vous devriez être capable de:
Discuter des fonctions et des modificateurs à utiliser avec les clauses Group BY
Les index de texte intégral ne peuvent être utilisés qu'avec des tables MyISAM et ne peuvent être
créés que pour des colonnes CHAR, VARCHAR ou TEXT.
Une définition d'index FULLTEXT peut être donnée dans l'instruction CREATE TABLE
lorsqu'une table est créée ou ajoutée ultérieurement à l'aide d’ALTER TABLE ou CREATE
INDEX.
Pour les grands ensembles de données, il est beaucoup plus rapide de charger vos données dans
une table sans index FULLTEXT, puis de créer l'index par la suite, plutôt que de charger des
données dans une table comportant un index FULLTEXT existant.
La recherche en texte intégral est effectuée à l'aide de la syntaxe MATCH () ... AGAINST.
MATCH () prend une liste séparée par des virgules qui nomme les colonnes à rechercher.
AGAINST prend une chaîne à rechercher et un modificateur facultatif indiquant le type de
recherche à effectuer. La chaîne de recherche doit être une chaîne littérale et non une variable ou
un nom de colonne. Il existe trois types de recherches en texte intégral:
Une recherche booléenne interprète la chaîne de recherche en utilisant les règles d'un
langage de requête spécial. La chaîne contient les mots à rechercher. Elle peut également
contenir des opérateurs qui spécifient des exigences telles qu'un mot doit être présent ou
absent dans les lignes correspondantes, ou qu'il doit être pondéré plus haut ou plus bas
que la normale. Les mots courants tels que "certains" ou "alors" sont des mots vides et ne
correspondent pas s'ils sont présents dans la chaîne de recherche. Le modificateur IN
BOOLEAN MODE spécifie une recherche booléenne.
Une recherche en langage naturel interprète la chaîne de recherche comme une phrase en
langage humain naturel (une phrase en texte libre). Il n'y a pas d'opérateurs spéciaux. La
liste de mots vides s'applique. En outre, les mots présents dans 50% ou plus des lignes sont
considérés comme communs et ne correspondent pas. Les recherches en texte intégral sont
des recherches en langage naturel si le modificateur IN NATURAL LANGUAGE MODE
est fourni ou si aucun modificateur n'est fourni.
Une recherche d'extension de requête est une modification d'une recherche en langage
naturel. La chaîne de recherche est utilisée pour effectuer une recherche en langage naturel.
Ensuite, les mots des lignes les plus pertinentes renvoyées par la recherche sont ajoutés à
la chaîne de recherche et la recherche est répétée. La requête renvoie les lignes de la
deuxième recherche. Le modificateur IN NATURAL LANGUAGE WITH QUERY
EXPANSION ou WITH QUERY EXPANSION spécifie une recherche d'extension de
requête.
APPLICATION
1ere étape :
Création de la table (nous créerons la table sans l’index FULLTEXT car il est très difficile de le
faire pendant la création de la table, il est donc alors conseillé de le faire après la création de celle-
ci à travers la commande ALTER TABLE comme indiquer ci-dessous)
D’où
D’où on aura:
3eme étape : la recherche
Pour le faire, c’est très simple. Il suffit juste de bien tenir compte des syntaxe ci-dessous :
Application :
4eme étape : testons la recherche sans le mot MySQL mais avec le mot langage dépendant juste
de la colonne titre :
5eme étape : cette fois-ci, essayons la recherche avec la dépendance des colonnes titre et
description
Remarque: pour implémenter cette fonctionnalité, MySQL utilise ce que l’on appelle parfois la
logique booléenne implicite, dans laquelle:
+ signifie ET, - signifie NOT.
Ils n'utilisent pas le seuil de 50%. (pas de recherche à travers le mot contenant une partie
du mot en recherche)
Ils ne trient pas automatiquement les lignes par ordre de pertinence décroissante. Vous
pouvez voir ceci dans le résultat de la requête précédente: La ligne avec la pertinence la plus
élevée est celle qui contient deux fois «MySQL», mais elle est répertoriée en dernier, pas
en premier.
Ils peuvent fonctionner même sans index FULLTEXT, bien qu'une recherche exécutée de
cette manière serait assez lente.
La fonction de recherche en texte intégral booléen prend en charge les opérateurs suivants:
o +: un signe plus indique que ce mot doit être présent dans chaque ligne renvoyée.
o -: Un premier signe moins indique que ce mot ne doit figurer dans aucune des
lignes renvoyées.
REMARQUE:
L'opérateur - agit uniquement pour exclure les lignes qui sont par ailleurs mises en
correspondance avec d'autres termes de recherche. Ainsi, une recherche en mode booléen
qui ne contient que les termes précédés de - renvoie un résultat vide. Il ne renvoie pas
«toutes les lignes, sauf celles contenant l'un des termes exclus».
(Pas d'opérateur): Par défaut (lorsque ni + ni - n'est spécifié), le mot est facultatif, mais les
lignes qui le contiennent sont mieux notées. Cela imite le comportement de MATCH () ...
AGAINST () sans le modificateur IN BOOLEAN MODE.
><: Ces deux opérateurs permettent de modifier la contribution d'un mot à la valeur de
pertinence attribuée à une ligne. L'opérateur> augmente la contribution et l'opérateur
<la diminue.
(): Les parenthèses regroupent les mots en sous-expressions. Les groupes entre parenthèses
peuvent être imbriqués.
~: Un tilde de premier plan joue le rôle d'opérateur de négation, ce qui a pour effet de rendre
négatif la contribution du mot à la pertinence de la ligne. Ceci est utile pour marquer des
mots «bruits». Une ligne contenant un tel mot a une note inférieure à celle des autres, mais
n'est pas totalement exclue, contrairement à l'opérateur -.
Si un mot vide ou un mot trop court est spécifié avec l'opérateur de troncature, il ne sera pas extrait
d'une requête booléenne. Par exemple, une recherche sur '+ mot + mot d'arrêt *' 'renverra
probablement moins de lignes qu'une recherche sur' + mot + mot d'arrêt ', car la requête précédente
reste telle quelle et nécessite que le mot d'arrêt * soit présent dans un document. La dernière requête
est transformée en + mot.
": Une phrase placée entre guillemets (") ne correspond qu'aux lignes qui contiennent la
phrase littéralement, telle qu'elle a été saisie. Le moteur de texte intégral divise la phrase
en mots et effectue une recherche dans l'index FULLTEXT pour les mots. Les caractères
qui ne sont pas des mots ne doivent pas nécessairement correspondre exactement: la
recherche d'une phrase requiert uniquement que les correspondances contiennent
exactement les mêmes mots que la phrase et dans le même ordre. Par exemple, "phrase
test" correspond à "test, phrase".
Si la phrase ne contient aucun mot figurant dans l'index, le résultat est vide. Par exemple, si
tous les mots sont soit des mots vides, soit plus courts que la longueur minimale des mots indexés,
le résultat est vide.
REMARQUE:
Etant donné que l'expansion des requêtes à l'aveugle tend à augmenter considérablement le bruit
en renvoyant des documents non pertinents, il est judicieux de l'utiliser uniquement lorsqu'une
expression de recherche est plutôt courte.
Les recherches en texte intégral peuvent être utilisées avec la plupart des jeux de caractères multi-
octets. L'exception est que pour Unicode, le jeu de caractères utf8 peut être utilisé, mais pas le jeu
de caractères ucs2. Cependant, bien que les index FULLTEXT sur les colonnes ucs2 ne puissent
pas être utilisés, vous pouvez effectuer des recherches en mode BOOLEAN sur une colonne ucs2
ne disposant pas d'un tel index.
Les langues idéographiques telles que le chinois et le japonais n'ont pas de séparateurs de mots.
Par conséquent, l'analyseur FULLTEXT ne peut pas déterminer où les mots commencent et
finissent dans ces langages et d'autres.
Bien que l'utilisation de plusieurs jeux de caractères dans une même table soit prise en charge,
toutes les colonnes d'un index FULLTEXT doivent utiliser le même jeu de caractères et le même
classement.
Notez que la recherche en texte intégral est soigneusement réglée pour une efficacité maximale. La
modification du comportement par défaut dans la plupart des cas peut en réalité diminuer
l'efficacité. Ne modifiez pas les sources MySQL sauf si vous savez ce que vous faites.
La plupart des variables de texte intégral décrites dans cette section doivent être définies au moment
du démarrage du serveur. Un redémarrage du serveur est nécessaire pour les changer. Ils ne peuvent
pas être modifiés pendant l'exécution du serveur.
Certaines modifications de variables nécessitent la reconstruction des index FULLTEXT dans vos
tables. Les instructions pour le faire sont données à la fin de cette section.
Les longueurs minimale et maximale des mots à indexer sont définies par les variables système
ft_min_word_len et ft_max_word_len. La valeur minimale par défaut est de quatre caractères.
Le maximum par défaut dépend de la version. Si vous modifiez l'une ou l'autre valeur, vous devez
reconstruire vos index FULLTEXT. Par exemple, si vous souhaitez que les mots de trois caractères
puissent faire l'objet d'une recherche, vous pouvez définir la variable ft_min_word_len en mettant
les lignes suivantes dans un fichier d'options:
Ensuite, vous devez redémarrer le serveur et reconstruire vos index FULLTEXT. Notez en
particulier les remarques concernant myisamchk dans les instructions qui suivent cette liste.
Pour remplacer la liste de mots vides par défaut, définissez la variable système ft_stopword_file.
La valeur de la variable doit être le chemin du fichier contenant la liste des mots vides ou la chaîne
vide pour désactiver le filtrage des mots vides. Après avoir modifié la valeur de cette variable ou
le contenu du fichier de mots vides, redémarrez le serveur et reconstruisez vos index FULLTEXT.
La liste de mots vides est de forme libre. En d'autres termes, vous pouvez utiliser n'importe quel
caractère non alphanumérique, tel que nouvelle ligne, espace ou virgule, pour séparer les mots
vides. Les exceptions sont le caractère de soulignement ( _) et une seule apostrophe (') qui sont
traités comme faisant partie d'un mot. Le jeu de caractères de la liste de mots vides est le jeu de
caractères par défaut du serveur.
Le seuil de 50% pour les recherches en langage naturel est déterminé par le système de pondération
choisi. Pour le désactiver, recherchez la ligne suivante dans storage / myisam / ftdefs.h:
Recompilez ensuite MySQL. Il n'est pas nécessaire de reconstruire les index dans ce cas.
Opérateurs de proximité
Prise en charge des mots «toujours indexés». Celles-ci peuvent être toutes les chaînes que
l'utilisateur souhaite traiter comme des mots, tels que «C ++», «AS / 400» ou «TCP / IP».
Faites en sorte que la liste de mots vides dépende de la langue du jeu de données.
Rendre le modèle plus flexible (en ajoutant des paramètres ajustables à FULLTEXT dans
les instructions CREATE TABLE et ALTER TABLE).
QUESTIONS D'AUTO-EVALUATION
1. Une définition d'index ______ peut être donnée dans l'instruction CREATE TABLE
lorsqu'une table est créée ou ajoutée ultérieurement à l'aide d’ALTER TABLE ou CREATE
INDEX.
Les fonctions CAST () et CONVERT () peuvent être utilisées pour prendre une valeur d'un type
et produire une valeur d'un autre type.
BINARY
CHAR
DATE
DATETIME
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
CAST () et CONVERT () sont disponibles à partir de MySQL 4.0.2. Le type de conversion CHAR
est disponible à partir de 4.0.6. Le formulaire USING de CONVERT () est disponible à partir de
la version 4.1.0.
CAST () et CONVERT (... USING ...) sont une syntaxe SQL standard. La forme non USING de
CONVERT () est la syntaxe ODBC.
CONVERT () avec USING est utilisé pour convertir les données entre différents jeux de
caractères. Dans MySQL, les noms de transcodage sont les mêmes que les noms de jeux de
caractères correspondants. Par exemple, cette instruction convertit la chaîne 'abc' dans le jeu de
caractères par défaut du serveur en chaîne correspondante dans le jeu de caractères utf8:
Les fonctions de conversion sont utiles lorsque vous souhaitez créer une colonne avec
un type spécifique dans un fichier.
« Instruction CREATE ... SELECT » :
APPLICATION :
Les fonctions peuvent également être utiles pour trier les colonnes ENUM par ordre lexical.
Normalement, le tri des colonnes ENUM a lieu à l'aide des valeurs numériques internes.
En convertissant les valeurs en CHAR, vous obtenez un tri lexical:
APPLICATION :
Créons d’abord une nouvelle table que nous nommerons « nouvel_1 » et qui comportera une
colonne de type ENUM.
Etape 2 :
CAST (str AS BINARY) est la même chose que BINARY str. CAST (expr AS CHAR) traite
l'expression en tant que chaîne avec le jeu de caractères par défaut.
REMARQUE:
Vous ne devez pas utiliser CAST () pour extraire des données dans différents formats, mais
plutôt utiliser des fonctions de chaîne telles que LEFT () ou EXTRACT ().
Pour convertir une chaîne en valeur numérique, vous n'avez normalement rien à faire.
Utilisez simplement la valeur de chaîne pour ainsi dire un nombre:
Application
Application :
QUESTIONS D'AUTO-EVALUATION
2. Les fonctions ____ et ____ peuvent être utilisées pour prendre une valeur d'un type et
produire une valeur d'un autre type.
MySQL utilise l'arithmétique BIGINT (64 bits) pour les opérations sur les bits, de sorte que ces
opérateurs ont une plage maximale de 64 bits.
| BITWISE OU:
Application :
Application :
Application :
Application :
Le résultat est un entier non signé de 64 bits.
Application :
IV.2. FONCTIONS DE CHIFFREMENT
Ces fonctions permettent le cryptage / décryptage des données à l'aide de l'algorithme officiel
AES (Advanced Encryption Standard), précédemment appelé RIJNDAEL. Un codage avec une
longueur de clé de 128 bits est utilisé, mais vous pouvez l'étendre jusqu'à 256 bits en modifiant la
source. Nous avons choisi 128 bits parce que c'est beaucoup plus rapide et généralement assez
sécurisé.
Les arguments d'entrée peuvent avoir n'importe quelle longueur. Si l'un des arguments est
NULL, le résultat de cette fonction est également NULL.
Comme AES est un algorithme de niveau bloc, le remplissage est utilisé pour coder des chaînes
de longueur inégale. La longueur de chaîne de résultat peut donc être calculée sous la forme
16 * (trunc (chaîne_longue / 16) +1).
Toutefois, il est possible pour AES_DECRYPT () de renvoyer une valeur non NULL
(éventuellement une erreur) si les données d'entrée ou la clé sont non valides.
Vous pouvez utiliser les fonctions AES pour stocker des données sous une forme cryptée en
modifiant vos requêtes:
APPLICATION :
1. LA LONGUEUR DE LA CHAINE DE RESULTAT :
Lorsque nous cryptons une expression, celle-ci devient illisible c’est-à-dire qu’elle se transforme
en une expression incompréhensive par l’humain. Cette expression cryptée, a une longueur
déterminable à travers la formule ci-dessous :
16 * (trunc (longueur_du_mot / 16) + 1)
Comment cela se calcule vraiment ?
Supposons que nous avons eu à créer une table t comportant deux (2) colonnes text et password.
Créons la table t :
Retenons que nos deux colonnes sont en varchar, et colonne qui doit subir les transformations de
texte ou les cryptages est bien sûr la colonne password et elle est en varchar (50).
Commençons alors les calculs :
Soit la formule : 16 * (trunc (longueur_du_mot / 16) + 1)
Avec la longueur du mot étant 50, nous aurons donc 16 * (trunc (50/16) + 1)
16 * (3,125 + 1)
16 * 4,125
66 en minimum, environ varbinary(100).
Mais pourquoi cela donnerait-il un varbinary au lieu du varchar ?
Comme on a su le dire ci-dessus, après cryptage d’une expression celle-ci se transforme en une
expression incompréhensible qui est en réalité une expression en varbinary. Nous retenons donc
que pour crypter une expression, celle-ci doit être en varchar afin d’être transformé en varbinary.
2. COMMENT CRYPTER ?
Crypter une expression est une chose très facile à faire, pourquoi ?
Parce qu’il est juste question de prendre en référence ou en considération trois (3) éléments :
AES_ENCRYPT (utilisé pour le cryptage)
Le mot à crypter et
La clé de cryptage (qui ne doit être oubliée).
Soit la table ci-dessous :
Insérons maintenant :
Retenons qu’ici nous avons eu à utiliser la clé qui s’appelle la_cle. Pour les raisons de sécurité, il
est demandé de jamais oublier la clé sinon il nous sera impossible de décrypter les expressions
cryptées.
Vous pouvez obtenir encore plus de sécurité en ne transférant pas la clé sur la connexion pour
chaque requête. Pour ce faire, vous pouvez la stocker dans une variable côté serveur au moment
de la connexion.
Exemple:
NB : Pour la 3eme ligne, nous l’avons encrypté avec la clé incorporée dans la variable @password.
DECRYPTAGE
Si vous transmettez à cette fonction un argument key_str, cette chaîne est utilisée comme
clé de déchiffrement du message.
Si l'argument str_to_decrypt ne ressemble pas à une chaîne chiffrée, MySQL renverra le
str_to_decrypt donné.
Crypte la chaîne avec la clé donnée en utilisant l'algorithme Triple-DES. En cas d'erreur, cette
fonction renvoie NULL.
APPLICATION :
a. Sans clé
b. Avec clé
DECRYPTAGE DE DES :
Soit :
a. Sans clé :
b. Avec clé :
NB :
Notez que cette fonction ne fonctionne que si MySQL a été configuré avec le support
SSL.
Le Cryptage sans ne se fait qu’avec le système DES_ENCRYPT mais pas avec
AES_ENCRYPT.
Cryptez str en utilisant l'appel système Unix crypt (). L'argument salt devrait être une chaîne avec
deux caractères. (Depuis MySQL 3.22.16, salt peut contenir plus de deux caractères.)
ENCRYPT () ignore tous les caractères sauf les 8 premiers caractères de str, du moins sur certains
systèmes. Ce comportement est déterminé par la mise en œuvre de l'appel système sous-jacent
crypt (). Si crypt () n'est pas disponible sur votre système, ENCRYPT () renvoie toujours
NULL. C'est pourquoi nous vous recommandons d'utiliser plutôt MD5 () ou SHA1 (), car ces deux
fonctions existent sur toutes les plateformes.
MD5 (str)
Calcule une somme de contrôle MD5 128 bits pour la chaîne. La valeur est renvoyée sous forme
de chaîne de 32 chiffres hexadécimaux, ou NULL si l'argument était NULL. La valeur de retour
peut, par exemple, être utilisée comme clé de hachage.
Application :
a. Sélection ordinaire :
Calcule et retourne une chaîne de mot de passe à partir du mot de passe en texte brut str, ou NULL
si l'argument était NULL. Cette fonction est utilisée pour chiffrer les mots de passe MySQL pour
le stockage dans la colonne Mot de passe de la table des droits des utilisateurs.
APPLICATION :
a. Sélection ordinaire
b. Sélection depuis de la table :
PASSWORD () n'effectue pas le cryptage de mot de passe de la même manière que les mots de
passe Unix sont cryptés.
REMARQUE:
Pour cela, utilisez MD5 () ou SHA1 () à la place. Consultez également la RFC 2195 pour
plus d'informations sur la gestion sécurisée des mots de passe et de l'authentification dans
votre application.
SHA (str) Calcule une somme de contrôle SHA1 de 160 bits pour la chaîne, comme décrit dans la
RFC 3174 (algorithme de hachage sécurisé). La valeur est renvoyée sous forme de chaîne de 40
chiffres hexadécimaux, ou NULL si l'argument était NULL. L’une des utilisations possibles de
cette fonction est la clé de hachage. Vous pouvez également l'utiliser en tant que fonction
sécurisée par cryptographie pour stocker les mots de passe.
a. Sélection ordinaire :
b. Sélection depuis la table :
SHA1 () a été ajouté à MySQL 4.0.2 et peut être considéré comme un équivalent plus sûr du point
de vue cryptographique de MD5 (). SHA () est synonyme de SHA1 ().
La fonction BENCHMARK () exécute l'expression expr plusieurs fois. Il peut être utilisé pour
indiquer la rapidité avec laquelle MySQL traite l'expression. La valeur de résultat est toujours
zéro 0. L'utilisation prévue provient du client MySQL, qui indique les temps d'exécution des
requêtes:
Le temps indiqué est le temps écoulé côté client, et non pas le temps CPU du côté serveur. Il peut
être judicieux d’exécuter BENCHMARK () plusieurs fois et d’interpréter le résultat en fonction de
l’importance de la charge de la machine serveur.
Les valeurs inférieures ont une priorité plus élevée. COERCIBILITY () a été ajouté dans MySQL
4.1.1.
FONCTION CONNECTION_ID ()
Renvoie l'ID de connexion (ID de thread) de la connexion. Chaque connexion a son propre
identifiant unique.
S'il n'y a pas de base de données par défaut, DATABASE () renvoie NULL à partir de MySQL
4.1.1 et la chaîne vide avant celle-ci.
FONCTION SQL_CALC_FOUND_ROWS ()
Le second SELECT retournera un nombre indiquant le nombre de lignes que le premier SELECT
aurait renvoyé s'il avait été écrit sans la clause LIMIT. (Si l'instruction SELECT précédente
n'inclut pas l'option SQL_CALC_FOUND_ROWS, FOUND_ROWS () peut renvoyer un résultat
différent lorsque LIMIT est utilisé ou non.).
FONCTION LAST_INSERT_ID ()
LAST_INSERT_ID (expr)
Retourne la dernière valeur générée automatiquement qui a été insérée dans une colonne
AUTO_INCREMENT.
Le dernier ID généré est conservé sur le serveur connexion par connexion. Cela signifie que la
valeur renvoyée par la fonction à un client donné est la valeur AUTO_INCREMENT la plus récente
générée par ce client. La valeur ne peut pas être affectée par d'autres clients, même s'ils génèrent
leurs propres valeurs AUTO_INCREMENT. Ce comportement garantit que vous pouvez récupérer
votre propre ID sans vous préoccuper de l'activité des autres clients et sans avoir besoin de verrous
ou de transactions.
FONCTION VERSION ()
REMARQUE: Si votre chaîne de version se termine par -log, cela signifie que la journalisation
est activée.
Si vous utilisez une fonction group dans une instruction ne contenant aucune clause GROUP BY,
cela équivaut à un regroupement sur toutes les lignes.
REMARQUE :
Les fonctions d'agrégation SUM () et AVG () ne fonctionnent pas avec les valeurs
temporelles. (Ils convertissent les valeurs en nombres, ce qui perd la partie après le premier
caractère non numérique.).
Exemples:
Soit…
FONCTION AVG ([DISTINCT] expr)
Retourne la valeur moyenne d’expr. L’option DISTINCT peut être utilisée à partir de MySQL
5.0.3 pour renvoyer la moyenne des valeurs distinctes d’expr.
AVG () renvoie NULL s'il n'y a pas de lignes correspondantes.
Soit….
FONCTION BIT_AND (expr)
Renvoie le bit AND et tous les bits d’expr. Le calcul est effectué avec une précision de 64 bits
(BIGINT).
Cette fonction renvoie 18446744073709551615 s'il n'y a pas de lignes correspondantes. (Il s'agit
de la valeur d'une valeur BIGINT non signée avec tous les bits définis sur 1.)
COUNT (*) diffère quelque peu en ce sens qu'il renvoie le nombre de lignes extraites, qu'elles
contiennent ou non des valeurs NULL.
FONCTION COUNT (DISTINCT expr, [expr ...])
À titre d’illustration, supposons qu’un tableau nommé sales comporte des colonnes année, pays,
produit et bénéfice permettant d’enregistrer la rentabilité des ventes:
Le contenu de la table peut être résumé chaque année avec un simple GROUP BY comme ceci:
Cette sortie affiche le bénéfice total pour chaque année, mais si vous souhaitez également
déterminer le total des bénéfices pour toutes les années, vous devez additionner vous-même les
valeurs individuelles ou exécuter une requête supplémentaire.
Vous pouvez également utiliser ROLLUP, qui fournit les deux niveaux d'analyse avec une seule
requête. L'ajout d'un modificateur WITH ROLLUP à la clause GROUP BY entraîne la génération
d'une autre ligne indiquant le total général pour toutes les valeurs de l'année:
La ligne de super-agrégat du total général est identifiée par la valeur NULL dans la colonne
année.
ROLLUP a un effet plus complexe lorsqu'il existe plusieurs colonnes GROUP BY. Dans ce cas,
chaque fois qu'il y a une «rupture» (modification de valeur) dans une colonne de regroupement
sauf la dernière, la requête génère une ligne de résumé super-agrégée supplémentaire.
Par exemple, sans ROLLUP, un résumé du tableau des ventes basé sur l'année, le pays et le
produit pourrait ressembler à ceci:
Pour cette requête, l'ajout de ROLLUP force la sortie à inclure des informations de synthèse à
CINQ niveaux d'analyse, et non à un seul. Voici comment interpréter la sortie ROLLUP:
Après chaque série de lignes de produits pour une année et un pays donnés, une ligne
récapitulative supplémentaire est générée, indiquant le total pour tous les produits. La
colonne produit de ces lignes est définie sur NULL.
Après chaque série de lignes d'une année donnée, une ligne récapitulative supplémentaire
est générée. Elle affiche le total pour tous les pays et produits. Les colonnes pays et produits
de ces lignes sont définies sur NULL.
Enfin, après toutes les autres lignes, une ligne récapitulative supplémentaire est générée.
Elle indique le total général pour toutes les années, tous les pays et tous les produits. Cette
ligne contient les colonnes année, pays et produits définies sur NULL.
QUESTIONS D'AUTO-EVALUATION
5. Les fonctions d'agrégation SUM () et AVG () ne fonctionnent pas avec les valeurs ____.
VI. RESUME
Cette unité couvrait diverses fonctions de recherche textuelles, de casting, de cryptage et
d’information. Il traite ensuite de diverses fonctions et modificateurs pouvant être utilisés avec la
clause GROUP BY.
1. Fonctions de recherche de texte intégral: Ces fonctions sont utilisées pour effectuer une
recherche de texte intégral ou des fonctions basées sur des chaînes. Ces fonctions incluent
les recherches booléennes, les recherches d'extension de requête, etc.
3. Autres fonctions: Les autres fonctions comprennent les fonctions Bit, Cryptage et
Information. Ils sont utilisés pour travailler sur les manipulations de bits, le cryptage des
données et la collecte d'informations à partir des sources de données.
4. Group by Clauses: La clause Group By est essentiellement utilisée avec les fonctions
d'agrégation telles que SUM, AVERAGE, etc. Ils peuvent également être utilisés pour
modifier la sortie d'une requête en fonction des besoins.