Apprenez à utiliser plusieurs fonctions de MySQL et MariaDB - Partie 2

Apprenez à utiliser plusieurs fonctions de MySQL et MariaDB - Partie 2

Ceci est la deuxième partie d'une série de 2 articles sur l'essentiel de MariaDB / MySQL commandes. Veuillez vous référer à notre article précédent sur ce sujet avant de continuer.

  1. Apprenez les bases de MySQL / MARIADB pour les débutants - Partie 1

Dans cette deuxième partie de la série débutante MySQL / MARIADB, nous expliquerons comment limiter le nombre de lignes renvoyées par un SÉLECTIONNER requête, et comment commander l'ensemble de résultats en fonction d'une condition donnée.

De plus, nous apprendrons à regrouper les enregistrements et à effectuer une manipulation mathématique de base sur les champs numériques. Tout cela nous aidera à créer un script SQL que nous pouvons utiliser pour produire des rapports utiles.

Conditions préalables

Pour commencer, veuillez suivre ces étapes:

1. Télécharger le employés Exemple de base de données, qui comprend six tables constituées de 4 millions de records au total.

# wget https: // Launchpad.net / test-db / employés-db-1/1.0.6 / + téléchargement / employés_db-full-1.0.6.le goudron.bz2 # tar xjf employés_db-full-1.0.6.le goudron.bz2 # cd employés_db 

2. Entrer le Mariadb Inviter et créer une base de données nommée employés:

# mysql -u root -p Entrez le mot de passe: bienvenue dans le moniteur MariADB. Les commandes se terminent avec; ou \ g. Votre ID de connexion MARIADB est 2 Version du serveur: 10.1.14-MariaDB Mariadb Server Copyright (C) 2000, 2016, Oracle, Mariadb Corporation AB et autres. Type 'help;' ou '\ h' pour obtenir de l'aide. Tapez '\ c' pour effacer l'instruction de saisie actuelle. MariaDb [(aucun)]> Créer des employés de la base de données; Requête ok, 1 rangée affectée (0.00 sec) 

3. Importez-le dans votre serveur MARIADB comme suit:

MariaDb [(aucun)]> Employés de la source.SQL 

Attendez 1 à 2 minutes jusqu'à ce que la base de données de l'échantillon soit chargée (gardez à l'esprit que nous parlons de 4m Records ici!).

4. Vérifiez que la base de données a été importée correctement en répertoriant ses tables:

MariaDB [employés]> Utiliser les employés; La base de données modifiée MariaDB [employés]> Montrer des tables; +---------------------+ | Tables_in_employes | + --------------------- + | départements | | DEPT_EMP | | Dept_manager | | Employés | | salaires | | Titres | + --------------------- + 6 rangées en jeu (0.02 SEC) 

5. Créer un compte spécial à utiliser avec le employés base de données (n'hésitez pas à choisir un autre nom de compte et un autre mot de passe):

MariaDB [employés]> Créer un utilisateur [Protégé par e-mail] identifié par «empadminpass»; Requête ok, 0 lignes affectées (0.03 SEC) MariaDB [employés]> Accorder tous les privilèges sur les employés.* à [e-mail protégé]; Requête ok, 0 lignes affectées (0.02 SEC) MariaDB [employés]> Privilèges de rinçage; Requête ok, 0 lignes affectées (0.00 sec) MariaDB [employés]> sortie Au revoir 

Maintenant, connectez-vous à empadmin Utilisateur dans l'invite MariaDB.

# mysql -u empadmin -p Entrez le mot de passe: bienvenue dans le moniteur MariADB. Les commandes se terminent avec; ou \ g. Votre ID de connexion MARIADB est 4 Version du serveur: 10.1.14-MariaDB Mariadb Server Copyright (C) 2000, 2016, Oracle, Mariadb Corporation AB et autres. Type 'help;' ou '\ h' pour obtenir de l'aide. Tapez '\ c' pour effacer l'instruction de saisie actuelle. MariaDb [(aucun)]> Utiliser les employés; Lecture des informations sur la table pour l'achèvement des noms de table et de colonnes Vous pouvez désactiver cette fonctionnalité pour obtenir une start-up plus rapide avec une base de données -Un modification 
Apprenez les commandes de base MySQL pour les débutants

Assurez-vous que toutes les étapes décrites dans l'image ci-dessus sont terminées avant de continuer.

Commande et limitation du nombre de lignes dans l'ensemble de résultats

Le tableau des salaires contient tous les revenus de chaque employé avec des dates de début et de fin. Nous voulons peut-être voir les salaires de emp_no = 10001 au fil du temps. Cela aidera à répondre aux questions suivantes:

  1. A-t-il obtenu des augmentations?
  2. Si oui, quand?

Exécutez la requête suivante pour découvrir:

MariaDB [employés]> Sélectionnez * à partir des salaires où EMP_NO = 10001 Ordre par FROM_DATE; +--------+--------+------------+------------+ | EMP_NO | Salaire | From_Date | to_date | + -------- + -------- + ------------ + ------------ + | 10001 | 60117 | 1986-06-26 | 1987-06-26 | | 10001 | 62102 | 1987-06-26 | 1988-06-25 | | 10001 | 66074 | 1988-06-25 | 1989-06-25 | | 10001 | 66596 | 1989-06-25 | 1990-06-25 | | 10001 | 66961 | 1990-06-25 | 1991-06-25 | | 10001 | 71046 | 1991-06-25 | 1992-06-24 | | 10001 | 74333 | 1992-06-24 | 1993-06-24 | | 10001 | 75286 | 1993-06-24 | 1994-06-24 | | 10001 | 75994 | 1994-06-24 | 1995-06-24 | | 10001 | 76884 | 1995-06-24 | 1996-06-23 | | 10001 | 80013 | 1996-06-23 | 1997-06-23 | | 10001 | 81025 | 1997-06-23 | 1998-06-23 | | 10001 | 81097 | 1998-06-23 | 1999-06-23 | | 10001 | 84917 | 1999-06-23 | 2000-06-22 | | 10001 | 85112 | 2000-06-22 | 2001-06-22 | | 10001 | 85097 | 2001-06-22 | 2002-06-22 | | 10001 | 88958 | 2002-06-22 | 9999-01-01 | + -------- + -------- + ------------ + ------------ + 17 lignes en jeu ( 0.03 SEC) 

Maintenant, si nous devons voir les 5 dernières augmentations? Nous pouvons faire Ordre de From_Date Desc. Le Dessiner Le mot-clé indique que nous voulons trier le résultat défini dans l'ordre descendant.

En outre, Limite 5 nous permet de retourner uniquement le haut 5 lignes dans l'ensemble de résultats:

MariaDB [employés]> Sélectionnez * à partir des salaires où EMP_NO = 10001 ORDER BY FROM_DATE DESC LIMIT 5; +--------+--------+------------+------------+ | EMP_NO | Salaire | From_Date | to_date | + -------- + -------- + ------------ + ------------ + | 10001 | 88958 | 2002-06-22 | 9999-01-01 | | 10001 | 85097 | 2001-06-22 | 2002-06-22 | | 10001 | 85112 | 2000-06-22 | 2001-06-22 | | 10001 | 84917 | 1999-06-23 | 2000-06-22 | | 10001 | 81097 | 1998-06-23 | 1999-06-23 | + -------- + -------- + ------------ + ------------ + 5 lignes en jeu ( 0.00 sec) 
Requête la table MySQL par commande de date

Vous pouvez aussi utiliser COMMANDÉ PAR avec plusieurs champs. Par exemple, la requête suivante commandera l'ensemble de résultats en fonction de la date de naissance de l'employé sous forme ascendante (par défaut), puis par les noms de famille sous forme de descendance alphabétique:

MariaDB [employés]> Sélectionnez Concat (Last_name, ',', First_name) As Name, Gender as Gender, Hire_Date As "Hire Date" de l'ordre des employés par Birth_Date, Last_name Desc Limit 10; +--------------------+--------+------------+ | Nom | Sexe | Date d'embauche | + -------------------- + -------- + ------------ + | Whitcomb, Kiyokazu | M | 1988-07-26 | | Schaad, Ronghao | M | 1988-07-10 | | Remmele, Supot | M | 1989-01-27 | | Pocchiola, Jouni | M | 1985-03-10 | | Kuzuoka, Eishiro | M | 1992-02-12 | | DeCaestecker, Moni | M | 1986-10-06 | | Wiegley, Mircea | M | 1985-07-18 | | Vendrig, Sachar | M | 1985-11-04 | | Tsukuda, Cedric | F | 1993-12-12 | | Tischendorf, Percy | M | 1986-11-10 | + -------------------- + -------- + ------------ + 10 rangées en jeu (0.31 sec) 
Requête la table mysql par date de naissance

Vous pouvez voir plus d'informations sur LIMITE ici.

Regroupement des enregistrements / Max, Min, AVG et Round

Comme nous l'avons mentionné plus tôt, le les salaires Le tableau contient les revenus de chaque employé au fil du temps. Outre LIMITE, Nous pouvons utiliser le Max et Min Mots-clés pour déterminer quand un nombre maximum et minimum d'employés a été embauché:

MariaDB [employés]> Sélectionnez Concat (Last_name, ',', First_name) comme nom, max (b.salaire) comme "max. Salaire "des employés A Join Salaires B sur un.emp_no = b.emp_no où un.EMP_NO dans (10001, 10002, 10003) Groupe par un.emp_no; +-----------------+-------------+ | Nom | Max. Salaire | + ----------------- + ------------- + | FACELLO, GEORGI | 88958 | | Simmel, Bezalel | 72527 | | Bamford, parto | 43699 | + ----------------- + ------------- + 3 lignes en jeu (0.02 SEC) MariaDB [employés]> Sélectionnez Concat (Last_name, ',', First_name) comme nom, min (b.salaire) comme "min. Salaire "des employés A Join Salaires B sur un.emp_no = b.emp_no où un.EMP_NO dans (10001, 10002, 10003) Groupe par un.emp_no; +-----------------+-------------+ | Nom | Min. Salaire | + ----------------- + ------------- + | FACELLO, GEORGI | 60117 | | Simmel, Bezalel | 65828 | | Bamford, parto | 40006 | + ----------------- + ------------- + 3 lignes en jeu (0.00 sec) 
Regrouper les enregistrements MySQL à l'aide de mots clés Max et Min

Sur la base des ensembles de résultats ci-dessus, pouvez-vous deviner ce que la requête ci-dessous reviendra?

MariaDB [employés]> Sélectionnez Concat (Last_name, ',', First_name) comme nom, Round (avg (b.salaire), 2) comme "avg. Salaire "des employés A Join Salaires B sur un.emp_no = b.emp_no où un.EMP_NO dans (10001, 10002, 10003) Groupe par un.emp_no; +-----------------+-------------+ | Nom | AVG. Salaire | + ----------------- + ------------- + | FACELLO, GEORGI | 75388.94 | | Simmel, Bezalel | 68854.50 | | Bamford, parto | 43030.29 | + ----------------- + ------------- + 3 lignes en jeu (0.01 SEC) 

Si vous acceptez qu'il renverra la moyenne (comme spécifié par AVG) salaire au fil du temps arrondi à 2 décimales (comme indiqué par ROND), tu as raison.

Si nous voulons voir la somme des salaires groupés par un employé et retourner le haut 5, Nous pouvons utiliser la requête suivante:

MariaDB [employés]> SELECT EMP_NO, SUM (SALAIRE) AS SALAIRE DU GROUPE SALAIRES par EMP_NO Order by Salary Desc Limit 5; +--------+---------+ | EMP_NO | Salaire | + -------- + --------- + | 109334 | 2553036 | | 43624 | 2492873 | | 66793 | 2383923 | | 237542 | 2381119 | | 47978 | 2374024 | + -------- + --------- + 5 lignes en jeu (2.22 sec) 

Dans la requête ci-dessus, les salaires sont regroupés par employé, puis la somme est effectuée.

Rassembler tout cela

Heureusement, nous n'avons pas besoin d'exécuter une requête après la question pour produire un rapport. Au lieu de cela, nous pouvons créer un script avec une série de commandes SQL pour renvoyer tous les ensembles de résultats nécessaires.

Une fois que nous aurons exécuté le script, il renverra les informations requises sans autre intervention de notre part. Par exemple, créons un fichier nommé maxminavg.SQL dans le répertoire de travail actuel avec le contenu suivant:

--Sélectionnez la base de données utiliser les employés; - calculer les salaires maximaux sélectionner concat (last_name, ',', first_name) comme nom, max (b.salaire) comme "max. Salaire "des employés A Join Salaires B sur un.emp_no = b.emp_no où un.EMP_NO dans (10001, 10002, 10003) Groupe par un.emp_no; - calculer les salaires minimums sélectionnez Concat (last_name, ',', first_name) comme nom, min (b.salaire) comme "min. Salaire "des employés A Join Salaires B sur un.emp_no = b.emp_no où un.EMP_NO dans (10001, 10002, 10003) Groupe par un.emp_no; - Calculer les moyennes, à 2 décimales Sélectionnez Concat (Last_name, ',', First_name) As Name, Round (Avg (B.salaire), 2) comme "avg. Salaire "des employés A Join Salaires B sur un.emp_no = b.emp_no où un.EMP_NO dans (10001, 10002, 10003) Groupe par un.emp_no; 

Les lignes commençant par deux tirets sont ignorées, et les requêtes individuelles sont exécutées l'une après l'autre. Nous pouvons exécuter ce script à partir de la ligne de commande Linux:

# mysql -u empadmin -p < maxminavg.sql Entrer le mot de passe:  Nom max. Salaire Facello, Georgi 88958 Simmel, Bezalel 72527 Bamford, Parto 43699 Nom Min. Salaire FACELLO, GEORGI 60117 SIMMEL, Bezalel 65828 Bamford, Parto 40006 Nom AVG. Salaire FACELLO, GEORGI 75388.94 Simmel, Bezalel 68854.50 Bamford, Parto 43030.29 

ou à partir de l'invite Mariadb:

# mysql -u empadmin -p Entrez le mot de passe: bienvenue dans le moniteur MariADB. Les commandes se terminent avec; ou \ g. Votre ID de connexion MARIADB est 4 Version du serveur: 10.1.14-MariaDB Mariadb Server Copyright (C) 2000, 2016, Oracle, Mariadb Corporation AB et autres. Type 'help;' ou '\ h' pour obtenir de l'aide. Tapez '\ c' pour effacer l'instruction de saisie actuelle. MariaDb [(aucun)]> source maxminavg.SQL Lecture des informations sur la table pour l'achèvement des noms de table et de colonnes Vous pouvez désactiver cette fonctionnalité pour obtenir une start-up plus rapide avec une base de données -Un modification 
Script mysql pour exécuter les commandes SQL

Résumé

Dans cet article, nous avons expliqué comment utiliser plusieurs fonctions MariaDB afin d'affiner les ensembles de résultats renvoyés par SÉLECTIONNER affirmations. Une fois qu'ils ont défini, plusieurs requêtes individuelles peuvent être insérées dans un script pour l'exécuter plus facilement et pour réduire le risque d'erreur humaine.

Avez-vous des questions ou des suggestions sur cet article? N'hésitez pas à nous envoyer une note en utilisant le formulaire de commentaire ci-dessous. Nous avons hâte d'avoir de tes nouvelles!