기술나눔

DBA 데이터베이스 관리. 외부 링크.

2024-07-12

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

내부 조인

링크를 통해 여러 테이블을 임시 테이블로 결합

테이블 이름 1에서 헤더 이름을 선택합니다. 내부 조인 테이블 이름 2 ;

select * from employees 내부 조인 부서

링크 조건에서 테이블 이름 1 내부 조인 테이블 이름 2에서 헤더 이름을 선택합니다.

select * from employees inner join departments on employees.dept_id = departments.dept_id;
임시 새 테이블에서는 다음과 같이 처리할 수 있습니다.

링크 조건에서 테이블 이름 1 내부 조인 테이블 이름 2에서 헤더 이름을 선택합니다. |

등가 링크: 링크에 동일한 데이터를 저장하는 헤더가 있다는 전제

select * from employees inner join departments on employees.dept_id = departments.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年总工资降序排列

비등가 링크: 테이블에 동일한 데이터를 저장하는 헤더가 없습니다.

select employee_id, basic, garde from salary inner join wage_grade on salary.basic between wage_grade.low and wage_grade.high (year(date)=2018, month(date)=12)
2018년 12월 직원 기본급 조회

garde를 level로 선택하고, year(date)=2018이고 Month(date)=12일 때 Salary.basic의 급여 내부 조인 Wage_grade의 총 인원수로 count(employee_id)를 선택합니다. 2018년 12월 기본급 직원 수

3개의 테이블을 조인하는 예

select name,basic,garde from employees inner join salary from employees.employee_id = salary.employee_id inner join wage_grade from salary.basic between wage_grade.low and wage_grade.high where year(date)=2018 and month(date)=12;

외부링크 쿼리

외부 링크는 두 테이블의 차이점을 비교합니다.

왼쪽 링크는 왼쪽 테이블의 데이터와 오른쪽 테이블의 데이터를 사용하여 비교합니다. 출력 결과는 왼쪽 테이블 헤더의 모든 데이터를 표시합니다.

링크와 일치하는 행만 오른쪽에 표시됩니다.

테이블 이름 1에서 헤더 이름을 선택하고 링크 조건에서 왼쪽 jion 테이블 이름 2를 선택합니다.

링크 조건에서 왼쪽 jion 테이블 이름 1에서 헤더 이름을 선택합니다.[여기서 |group by|

select dept_name, name from departments left join departments.dept_id=employees.dept_id (name은 null임)
 

오른쪽 링크는 오른쪽 테이블의 데이터와 왼쪽 테이블의 데이터를 사용하여 비교하며, 출력 결과의 오른쪽 헤더에 있는 데이터가 모두 표시됩니다.

링크와 일치하는 행만 오른쪽에 표시됩니다.

링크 조건에서 테이블 이름 1 오른쪽 jion 테이블 이름 2에서 헤더 이름 선택 ·[여기서 |group by|

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;

직원 이름을 "bob"으로 설정하고 dept_id=11로 직원을 업데이트합니다.

전체 링크 쿼리

다중 선택 명령으로 쿼리된 행을 결합합니다. 다중 선택 쿼리의 경우 테이블 헤더 수가 일관되어야 합니다.

중복된 줄의 출력이 제거되었습니다.

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

(쿼리 명령 선택) Union (쿼리 명령 선택);

중복 제거 없이 출력

쿼리 명령 선택) 모두 통합(쿼리 명령 선택);

중첩 쿼리

선택 쿼리 명령에는 선택 쿼리 명령이 포함되어 있습니다.

where 뒤에 중첩된 쿼리 그룹화

헤더 이름 판단 기호가 있는 library.table에서 헤더 이름 선택(쿼리 명령 선택)

select employee_id,date,basic,bonus from salary where year(date)=2018 and month(date)=12 and basic > (select basic from salary where year(date)=2018 and month(date)=12 and employee_id=100)을 검색합니다.


쿼리를 중첩한 후 ()의 쿼리 결과를 필터 조건으로 사용하고,

헤더 이름 판단 기호가 있는 library.table에서 헤더 이름 선택(쿼리 명령 선택)

dept_id를 선택하여 직원 그룹에서 dept_id, count(name)을 전체로 지정합니다.

총 < (

dept_id=(인 직원 중에서 count(name)을 선택하세요

dept_name='개발 부서'인 부서에서 dept_id를 선택하세요)

from 뒤에 쿼리를 중첩하고 ()의 쿼리 결과를 테이블로 사용합니다.

필터 조건이 있는 임시 테이블 이름으로 (쿼리 결과 선택)에서 헤더 이름을 선택합니다.

select employee_id, name, email, dept_name from (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의 헤더 이름으로;

select d.* ,(select count(name)from employees as e where d.dept_id=e.dept_id)as vumen from departments as d;