技術共有

DBA データベース管理。外部リンク。

2024-07-12

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

内部結合

リンクを使用して複数のテーブルを一時テーブルに結合します

テーブル名 1 内部結合テーブル名 2 からヘッダー名を選択します。

従業員から*を選択、部門を内部結合

リンク条件でテーブル名 1 内部結合テーブル名 2 からヘッダー名を選択します。

従業員から*を選択し、従業員の部門を内部結合します。部門は、従業員の部門ID = 部門ID.dept_id になります。
一時的な新規テーブルでは以下のような処理が可能です

リンク条件でテーブル名 1 の内部結合テーブル名 2 からヘッダ名を選択します。

同等のリンク: リンク内に同じデータを格納するヘッダーがあることが前提となります。

従業員から*を選択し、従業員の部門を内部結合します。部門は、従業員の部門ID = 部門ID.dept_id になります。

別名を定義した後、その別名を使用してテーブル名を表す必要があります。

  1. e.*、d.dept_nameを選択
  2. 従業員を e として、部門を d として e.dept_id=d.dept_id で内部結合します。

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年总工资降序排列

非等価リンク: テーブル内に同じデータを格納するヘッダーがありません

employee_id、basic、garde を salary から選択し、wage_grade を salary.basic で inner join し、wage_grade.low と wage_grade.high の間で、year(date)=2018、month(date)=12 にします。
2018 年 12 月の従業員の基本給をクエリする

garde をレベルとして選択し、count(employee_id) を給与内部結合の合計人数として pay_grade.low と raise_grade.high の間の給与.basic から選択します。ここで、年 (日付) = 2018 および月 (日付) = 12 でグループ化されます。 2018年12月の基本給レベルの従業員数

3つのテーブルを結合する例

従業員から名前、基本、ガードを選択し、従業員の給与を従業員 ID = 給与 ID で内部結合し、賃金グレードを給与.基本に内部結合し、賃金グレード.low と賃金グレード.high の間で、年 (日付) = 2018、月 (日付) = 12 にします。

外部リンククエリ

外部リンクは 2 つのテーブルの違いを比較します

左側のリンクは、左側のテーブルのデータと右側のテーブルのデータを使用して比較します。出力結果には、左側のテーブル ヘッダーのすべてのデータが表示されます。

リンクに一致する行のみが右側に表示されます

リンク条件でテーブル名 1 からヘッダ名を選択し、テーブル名 2 を左にします。

リンク条件でテーブル名 1 からヘッダ名を選択します。

部門の左側から dept_name、name を選択し、departments.dept_id=employees.dept_id で employees を結合します (name が null の場合)。
 

右側のリンクは、右側のテーブルのデータと左側のテーブルのデータを使用して比較し、出力結果の右側のテーブルのヘッダーにあるデータがすべて表示されます。

リンクに一致する行のみが右側に表示されます

リンク条件でテーブル名 1 からヘッダー名を選択します。

mysql> select dept_name,name from departments as d right join employees as e on d.dept_id=e.dept_id where dept_name is null;

従業員を更新し、dept_id=11 を設定します。name="bob" です。

完全なリンクのクエリ

複数の選択コマンドによってクエリされる行をまとめます。複数の選択クエリの場合、テーブル ヘッダーの数は一貫している必要があります。

重複行の出力が削除されました

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

(クエリコマンドの選択) Union (クエリコマンドの選択);

重複排除なしで出力する

select クエリ コマンド) Union all (select クエリ コマンド);

ネストされたクエリ

select query コマンドには select query コマンドが含まれています

where の後にネストされたクエリのグループ化

select header name from library.table where ヘッダ名判定記号(selectクエリコマンド)

year(date)=2018 かつ month(date)=12 かつ employee_id=100 の場合、salary から employee_id、date、basic、bonus を選択します > (year(date)=2018 かつ month(date)=12 かつ employee_id=100 の場合、salary から basic を選択します);


クエリをネストした後、() 内のクエリ結果をフィルター条件として使用します。

ヘッダ名判定シンボルを持つlibrary.tableからヘッダ名を選択(セレクトクエリコマンド)

dept_id を選択し、count(name) を employees から合計として、dept_id でグループ化します。

合計<(

dept_id=( の従業員から count(name) を選択します。

dept_name='開発部門') の部門から dept_id を選択

from の後にクエリをネストし、() のクエリ結果をテーブルとして使用します

フィルター条件の一時テーブル名としてヘッダー名を選択 (クエリ結果を選択);

employee_id、name、email、dept_name を (select d.dept_name,e.* from departments as d inner join employees as e on d.dept_id=e.dept_id) as tmp_table where dept_id=3 から選択します。

選択後のネストされたクエリ

ヘッダー名を選択し、(クエリコマンドを選択して) library.table からヘッダー名としてフィルター条件を選択します。

d.* 、(select count(name)from employees as e where d.dept_id=e.dept_id)as vumen from departments as d; を選択します。