9월04일(금)

Win Cha·2026년 9월 6일

SELECT t_product.pname AS 구매상품
FROM t_order
INNER JOIN t_user ON t_order.userNo = t_user.id
INNER JOIN t_product ON t_order.productNo = t_product.id
WHERE t_user.userName = '손흥민';

SQL 쿼리 설명 ==> '손흥민'이라는 회원이 구매한 상품의 이름을 조회하는 명령어입니다.

주문 내역, 사용자 정보, 상품 정보가 각각 다른 테이블에 나뉘어 있을 때, 이를 하나로 연결(JOIN)하여 원하는 데이터를 추출하는 구조입니다. 각 구문별 상세 설명은 다음과 같습니다.

  • SELECT t_product.pname AS 구매상품: 최종적으로 출력할 데이터를 지정합니다. t_product 테이블의 pname(상품명) 컬럼을 가져오며, 출력 결과 화면에서는 컬럼 이름을 구매상품이라는 별칭으로 보여줍니다.
  • FROM t_order: 조회의 기준이 되는 중심 테이블로 t_order(주문 테이블)를 지정합니다.
  • INNER JOIN t_user ON t_order.userNo = t_user.id: 주문 테이블과 사용자 테이블(t_user)을 결합합니다. 두 테이블을 연결하는 기준은 주문 테이블의 userNo(구매자 번호)와 사용자 테이블의 id(사용자 고유 번호)가 일치하는 데이터입니다.
  • INNER JOIN t_product ON t_order.productNo = t_product.id: 주문 테이블과 상품 테이블(t_product)을 결합합니다. 주문 테이블의 productNo(주문된 상품 번호)와 상품 테이블의 id(상품 고유 번호)가 일치하는 데이터를 연결합니다.
  • WHERE t_user.userName = '손흥민': 이렇게 세 테이블을 모두 연결한 데이터 중에서, 사용자 이름(userName)이 '손흥민'인 조건만 필터링하여 최종 결과를 가져옵니다.

< 오늘의 문제와 해답 : mySQL 문접이해와 응용>

a5 데이터베이스 삭제/생성/선택

drop database if exists a5;

create database a5;

use a5;

부서(dept) 테이블 생성 및 홍보부서 기획부서 추가

create table dept (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
regDate DATETIME NOT NULL,
name CHAR(100) NOT NULL UNIQUE
);

insert into dept
SET regDate = NOW(),
name = '홍보';

INSERT INTO dept
SET regDate = NOW(),
name = '기획';

select *
from dept;

사원(emp) 테이블 생성 및 홍길동사원(홍보부서), 홍길순사원(홍보부서), 임꺽정사원(기획부서) 추가

create table emp (
id int(10) unsigned not null auto_increment,
primary key(id),
regDate datetime not null,
name char(100) not null,
deptName char(100) not null
);

insert into emp
set regDate = NOW(),
name = '홍길동',
deptName = '홍보';

INSERT INTO emp
SET regDate = NOW(),
name = '홍길순',
deptName = '홍보';

INSERT INTO emp
SET regDate = NOW(),
name = '임꺽정',
deptName = '기획';

홍보를 마케팅으로 변경

select *
from dept;

update dept
set name = '마케팅'
where name = '홍보';

select *
from emp;

update emp
set deptName = '마케팅'
where deptName = '홍보';

SELECT *
FROM emp;

마케팅을 홍보로 변경

UPDATE dept
SET name = '홍보'
WHERE name = '마케팅';

SELECT *
FROM dept;

UPDATE emp
SET deptName = '홍보'
WHERE deptName = '마케팅';

SELECT *
FROM emp;

홍보를 마케팅으로 변경

구조를 변경하기로 결정(사원 테이블에서, 이제는 부서를 이름이 아닌 번호로 기억)

ALTER TABLE emp add COLUMN deptId int(10) unsigned not null;

select *
from emp;

update emp
set deptId = 1
where deptName = '홍보';

UPDATE emp
SET deptId = 2
WHERE deptName = '기획';

SELECT *
FROM emp;

alter table emp drop column deptName;

select *
from dept;

UPDATE dept
SET name = '마케팅'
WHERE name = '홍보';

select *
from dept;

select *
from emp;

사장님께 드릴 인명록을 생성

select *
from emp;

사장님께서 부서번호가 아니라 부서명을 알고 싶어하신다.

그래서 dept 테이블 조회법을 알려드리고 혼이 났다.

SELECT *
FROM dept
where id = 1;

사장님께 드릴 인명록을 생성(v2, 부서명 포함, ON 없이)

이상한 데이터가 생성되어서 혼남

SELECT emp.*, dept.name AS 부서명
FROM emp
inner join dept;

사장님께 드릴 인명록을 생성(v3, 부서명 포함, 올바른 조인 룰(ON) 적용)

보고용으로 좀 더 편하게 보여지도록 고쳐야 한다고 지적받음

SELECT emp.*, dept.id, dept.name AS 부서명
FROM emp
inner join dept
ON emp.deptId = dept.id;

사장님께 드릴 인명록을 생성(v4, 사장님께서 보시기에 편한 칼럼명(AS))

SELECT emp.id AS 사원번호,
emp.name AS 사원명,
DATE(emp.regDate) AS 입사일,
dept.name AS 부서명
FROM emp
INNER JOIN dept
ON emp.deptId = dept.id
order by 부서명, 사원번호;

0개의 댓글