Partage de technologie

Gestion de base de données DBA. Connexion interne.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

jointure interne

Combinez plusieurs tables dans une table temporaire via des liens

sélectionnez le nom de l'en-tête du nom de la table 1, nom de la table de jointure interne 2 ;

sélectionnez * parmi les employés des départements de jointure interne

sélectionnez le nom d'en-tête du nom de la table 1, nom de la table de jointure interne 2 selon la condition du lien ;

sélectionnez * dans les départements de jointure interne des employés sur employee.dept_id = department.dept_id;
Dans la nouvelle table temporaire, vous pouvez effectuer le traitement suivant

sélectionnez le nom de l'en-tête du nom de la table 1, le nom de la table de jointure interne 2 sur la condition de lien [où classer par |

Lien équivalent : le principe est qu'il existe un en-tête qui stocke les mêmes données dans le lien

sélectionnez * dans les départements de jointure interne des employés sur employee.dept_id = department.dept_id;

Après avoir défini l'alias, vous devez utiliser l'alias pour représenter le nom de la table

  1. sélectionnez e.* , d.dept_name
  2. des employés en tant que départements internes e comme d sur e.dept_id=d.dept_id ;

Interrogez le salaire total de chaque employé en 2018

select name ,sum(basic+bonus) as total from employees inner join salary on employees.employee_id = salary.employee_id where year(date)=2018 group by name;

select salary.employee_id ,sum(basic+bonus) as total from employees inner join salary on employees.employee_id = salary.employee_id  where year(date)=2018 group by employee_id having total > 300000 order by total desc ,employee_id asc;查询2018年总工资大于30万的员工,按2018年总工资降序排列

Lien non équivalent : il n'y a pas d'en-tête qui stocke les mêmes données dans le tableau

sélectionnez employee_id ,basic,garde à partir du salaire, jointure interne wage_grade sur salary.basic entre wage_grade.low et wage_grade.high où année(date)=2018 et mois(date)=12 ;
Interroger le salaire de base d'un employé en décembre 2018

sélectionnez garde comme niveau, compte (employee_id) comme nombre total de personnes du salaire, rejoignez salaire_grade sur salaire.basic entre salaire_grade.low et salaire_grade.haut où année (date) = 2018 et mois (date) = 12 groupe par requête garde ; 2018 Nombre d'employés au salaire de base en décembre

Exemple de jointure de 3 tables

sélectionnez le nom, basic, garde dans la jointure interne des employés, le salaire sur les employés.employee_id = salary.employee_id, jointure interne wage_grade sur salary.basic entre wage_grade.low et wage_grade.high où année(date)=2018 et mois(date)=12 ;

Requête de lien externe

Les liens externes comparent les différences entre deux tableaux

Le lien de gauche utilise les données du tableau de gauche et les données du tableau de droite pour comparer. Le résultat de la sortie affiche toutes les données de l'en-tête du tableau de gauche.

Seules les lignes correspondant au lien sont affichées à droite

sélectionnez le nom d'en-tête du nom de la table 1 à gauche du nom de la table jion 2 sur la condition du lien ;

sélectionnez le nom de l'en-tête du nom de la table 1 à gauche du nom de la table jion 2 sur la condition du lien · [où |grouper par|

sélectionnez dept_name, nom des départements restants, rejoignez les employés sur department.dept_id=employees.dept_id où le nom est nul ;
 

Le lien de droite utilise les données du tableau de droite et les données du tableau de gauche pour comparer, et toutes les données de l'en-tête du tableau de droite du résultat de sortie sont affichées.

Seules les lignes correspondant au lien sont affichées à droite

sélectionnez le nom de l'en-tête du nom de la table 1 à droite du nom de la table jion 2 sur la condition du lien · [où |grouper par|

mysql> select dept_name,name dans department as d right join employee as e on d.dept_id=e.dept_id où dept_name est null ;

mettre à jour les employés définir dept_id=11 où name="bob";

Requête de lien complet

Rassemblez les lignes interrogées par plusieurs commandes de sélection. Pour les requêtes de sélection multiples, le nombre d'en-têtes de table doit être cohérent.

Sortie des lignes en double supprimées

mysql> (select date , max(basic) as 工资 from salary where date=20180110)union(select date,min(basic) from salary where date=20180110);

(commande de sélection de requête) union (commande de sélection de requête);

Sortie sans déduplication

commande select query) union all (commande select query);

Requêtes imbriquées

la commande select query contient la commande select query

Regroupement de requêtes imbriquées après où

sélectionnez le nom de l'en-tête dans library.table où le symbole de jugement du nom de l'en-tête (commande select query)

sélectionnez employee_id,date,basic,bonus à partir du salaire où année(date)=2018 et mois(date)=12 et basic > (sélectionnez basic à partir du salaire où année(date)=2018 et mois(date)=12 et employee_id=100);


Après avoir imbriqué les requêtes, utilisez les résultats de la requête entre () comme conditions de filtre,

sélectionnez le nom d'en-tête dans library.table ayant le symbole de jugement du nom d'en-tête (commande select query)

sélectionnez dept_id, comptez (nom) comme total du groupe d'employés par dept_id

ayant un total < (

sélectionnez le nombre (nom) parmi les employés où dept_id = (

sélectionnez dept_id parmi les départements où dept_name='Development Department')

Imbriquer la requête après from et utiliser les résultats de la requête de () comme tableau

sélectionnez le nom de l'en-tête dans (sélectionnez le résultat de la requête) comme nom de table temporaire où filtre la condition ;

sélectionnez employee_id,name,email,dept_name dans (sélectionnez d.dept_name,e.* dans les départements comme d, jointure interne des employés comme e sur d.dept_id=e.dept_id) comme tmp_table où dept_id=3 ;

Requête imbriquée après sélection

sélectionnez le nom de l'en-tête (commande de sélection de requête) comme nom d'en-tête dans library.table où est la condition de filtre ;

sélectionnez d.* ,(sélectionnez le nombre (nom) parmi les employés comme e où d.dept_id = e.dept_id) comme vumen parmi les départements comme d ;