반응형
*SQL 코드 관련 1(INNER JOIN / 사원, 부서DB)
1. 데이터 베이스 삭제 / 생성 / 선택
# a5 데이터베이스 삭제/생성/선택
삭제 : drop database if exists a5;
생성 : create database a5;
선택 : use a5;
2. 테이블(부서 dept) 생성 / 테이블 내 값 추가 / 확인
# 부서(dept) 테이블 생성 및 홍보부서 기획부서 추가
1. 부서 테이블 생성
create table dept (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL UNIQUE
);
2. 부서 테이블에 홍보 부서 추가
insert into dept
SET regDate = NOW(),
`name` = '홍보';
3. 부서 테이블에 기획 부서 추가
INSERT INTO dept
SET regDate = NOW(),
`name` = '기획';
4. 추가 되었는지 부서 테이블 확인
select *
from dept;
2-1. 테이블(사원 emp) 테이블 생성 / 테이블 내 값 추가 / 확인
# 사원(emp) 테이블 생성 및 홍길동사원(홍보부서), 홍길순사원(홍보부서), 임꺽정사원(기획부서) 추가
1. 사원 테이블 생성
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
);
2. 각 사원 부서 설정
insert into emp
set regDate = NOW(),
`name` = '홍길동',
deptName = '홍보';
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길순',
deptName = '홍보';
INSERT INTO emp
SET regDate = NOW(),
`name` = '임꺽정',
deptName = '기획';
3. 테이블 내 부서 이름 변경
# 홍보를 마케팅으로 변경
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;
3-1. 테이블 내 부서 이름 변경 ( 구조 변경 )
# 홍보를 마케팅으로 변경
# 구조를 변경하기로 결정(사원 테이블에서, 이제는 부서를 이름이 아닌 번호로 기억)
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;
4. INNER JOIN 관련
- INNER JOIN은 업무에서 주로 사용.
- WHERE 조건문이 없다면 조인될 조건에 따라 두 테이블이 모두 결합(Join) 된다.
* INNER JOIN 사용방법
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색조건]
# 사장님께 드릴 인명록을 생성
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 `부서명`, `사원번호`;
*/
*SQL 코드 관련 2
1. 데이터 베이스 삭제 / 생성 / 선택
# a6 DB 삭제/생성/선택
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
2. 테이블(부서 dept) 생성 / 테이블 내 값 추가 / 확인
# 부서(홍보, 기획)
CREATE TABLE dept (
id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL
);
INSERT INTO dept
SET regDate = NOW(),
`name` = '홍보';
INSERT INTO dept
SET regDate = NOW(),
`name` = '기획';
3. 테이블(부서 dept) 생성 / 테이블 내 값 추가 / 확인
# 사원(홍길동/홍보/5000만원, 홍길순/홍보/6000만원, 임꺽정/기획/4000만원)
CREATE TABLE emp (
id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL,
deptId INT(10) UNSIGNED NOT NULL,
salary INT(10) UNSIGNED NOT NULL
);
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길동',
deptId = 1,
salary = 5000;
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길순',
deptId = 1,
salary = 6000;
INSERT INTO emp
SET regDate = NOW(),
`name` = '임꺽정',
deptId = 2,
salary = 4000;
4. 특정 값의 수 / 큰 값 / 작은 값 출력 ( COUNT / MAX / MIN )
- COUNT : 입력된 값(특정 테이블 등)에 대한 수 출력
- MAX(값) : 입력된 값에 대한, 가장 큰 값 출력
- MIN(값) : 입력된 값에 대한, 가장 작은 값 출력
# 사원 수 출력
SELECT COUNT(*)
FROM emp;
# 가장 큰 사원 번호 출력
SELECT MAX(id)
FROM emp;
# 가장 고액 연봉
SELECT MAX(salary)
FROM emp;
# 가장 저액 연봉
SELECT MIN(salary)
FROM emp;
5. 특정 값의 합계 / 평균 및 MAX, MIN 응용 (SUM, AVG)
# 회사에서 1년 고정 지출(인건비)
SELECT SUM(salary)
FROM emp;
# 부서별, 1년 고정 지출(인건비)
SELECT deptId, SUM(salary)
FROM emp
GROUP BY deptId;
# 부서별, 최고연봉
SELECT deptId, MAX(salary)
FROM emp
GROUP BY deptId;
# 부서별, 최저연봉
SELECT deptId, MIN(salary)
FROM emp
GROUP BY deptId;
# 부서별, 평균연봉
SELECT deptId, AVG(salary)
FROM emp
GROUP BY deptId;
6. INNER JOIN , GROUP 등 응용
# 부서별, 부서명, 사원리스트, 평균연봉, 최고연봉, 최소연봉, 사원수
## V1(조인 안한 버전)
SELECT E.deptId AS 부서번호,
GROUP_CONCAT(E.name) AS 사원리스트,
TRUNCATE(AVG(E.salary), 0) AS 평균연봉,
MAX(E.salary) AS 최고연봉,
MIN(E.salary) AS 최소연봉,
COUNT(*) AS 사원수
FROM emp AS E
GROUP BY E.deptId
## V2(조인해서 부서명까지 나오는 버전)
SELECT D.name AS 부서,
GROUP_CONCAT(E.name) AS 사원리스트,
TRUNCATE(AVG(E.salary), 0) AS 평균연봉,
MAX(E.salary) AS 최고연봉,
MIN(E.salary) AS 최소연봉,
COUNT(*) AS 사원수
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id
GROUP BY E.deptId
반응형
'프로그래밍 > 자바, JDBC' 카테고리의 다른 글
세 자리 수 a, b 곱셈 계산(각 자릿수 별) (0) | 2020.06.23 |
---|---|
MySQL 컬럼 생성 시 의미 (0) | 2020.06.20 |
MySQL 데이터 갯수 가져오기 (0) | 2020.06.18 |
SQL 명령어 (0) | 2020.06.16 |
MySQL, JDBC 연동 (0) | 2020.06.16 |