MySQL 테이블(Table) 생성
CREATE TABLE DEPT (
DEPTNO DECIMAL(2), -- 부서 번호
DNAME VARCHAR(14), -- 부서 이름
LOC VARCHAR(13), -- 부서 위치
CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO) -- 주요 키를 부서 번호로 지정
);
: 부서 데이터에 관한 테이블이며 PK는 부서 번호로 지정.
CREATE TABLE EMP (
EMPNO DECIMAL(4), -- 사원 번호
ENAME VARCHAR(10), -- 사원 이름
JOB VARCHAR(9), -- 직군
MGR DECIMAL(4), -- 관리자
HIREDATE DATE, -- 고용 일자
SAL DECIMAL(7,2), -- 급여
COMM DECIMAL(7,2), -- 커미션
DEPTNO DECIMAL(2), -- 부서번호
CONSTRAINT PK_EMP PRIMARY KEY (EMPNO), -- 주요 키를 사원 번호로 지정
CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)
-- 부서 테이블의 부서 번호를 참조하는 외래 키
);
: 사원에 관한 테이블이며 PK는 사원 번호로 지정
CREATE TABLE SALGRADE (
GRADE TINYINT, -- 급여 등급
LOSAL SMALLINT, -- 급여 액수 범위(최소)
HISAL SMALLINT -- 급여 액수 범위(최대)
);
: 급여 등급에 관한 테이블
테이블(Table) 내 데이터 삽입
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,STR_TO_DATE('17-12-1980','%d-%m-%Y'),800,NULL,20); INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,STR_TO_DATE('20-2-1981','%d-%m-%Y'),1600,300,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,STR_TO_DATE('22-2-1981','%d-%m-%Y'),1250,500,30);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,STR_TO_DATE('2-4-1981','%d-%m-%Y'),2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,STR_TO_DATE('28-9-1981','%d-%m-%Y'),1250,1400,30);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,STR_TO_DATE('1-5-1981','%d-%m-%Y'),2850,NULL,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,STR_TO_DATE('9-6-1981','%d-%m-%Y'),2450,NULL,10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,STR_TO_DATE('13-7-1987','%d-%m-%Y')-85,3000,NULL,20);
INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,STR_TO_DATE('17-11-1981','%d-%m-%Y'),5000,NULL,10);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,STR_TO_DATE('8-9-1981','%d-%m-%Y'),1500,0,30); INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,STR_TO_DATE('13-7-1987', '%d-%m-%Y'),1100,NULL,20); INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,STR_TO_DATE('3-12-1981','%d-%m-%Y'),950,NULL,30); INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,STR_TO_DATE('3-12-1981','%d-%m-%Y'),3000,NULL,20); INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,STR_TO_DATE('23-1-1982','%d-%m-%Y'),1300,NULL,10); INSERT INTO SALGRADE VALUES (1,700,1200); INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000); INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
: 각 테이블에 값을 삽입해준다.
테이블(Table) 내 데이터 추출 실습
1. 사원 테이블의 모든 레코드 조회
: SELECT * FROM EMP
=> EMP 테이블 내에서 모든 열(Column)의 데이터를 조회한다.
2. 사원의 이름과 입사일 조회
: SELECT ENAME, HIREDATE FROM EMP;
=> EMP 테이블 내에서 사원 이름과 입사일에 관한 열(Column)을 가져온다.
3. 직책(Job) 목록 구하기
: SELECT DISTINCT JOB FROM EMP;
=> EMP 테이블 내에서 직책 목록을 가져오되 중복 레코드는 제외한다.
4. 총 사원 수
: SELECT COUNT(EMPNO) FROM EMP;
=> COUNT는 레코드 수를 반환하며, NULL이 아닌 수를 반환한다.
WHRER 조건을 이용한 테이블(Table) 데이터 추출
1. 부서 번호가 10인 부서에 근무하는 사원
: SELECT * FROM EMP WHERE DEPTNO = 10;
=> EMP 테이블 내에서 부서 번호(DEPTNO)가 10인 데이터 추출.
2. 급여가 2500 이상 되는 사원
: SELECT * FROM EMP WHERE SAL >= 2500;
=> EMP 테이블 내에서 급여(SAL)가 2500 이상 되는 사원 데이터 추출.
3. 사원 이름이 'S'를 포함하는 사원의 이름과 사원 번호
: SELECT EMPNO, ENAME FROM EMP WERE ENAME LIKE '% S%';
=> 사원 이름(ENAME)에서 S를 포함하는 사원의 이름(ENAME)과 사원 번호(EMPNO)
4. 커미션이 300, 500, 1400인 사원의 사원 번호, 이름, 커미션
: SELECT EMPNO, ENAME, COMM FROM EMP WHRER COMM=300 OR COMM=500 OR COMM=1400;
=> 커미션(COMM)이 300 또는 500 또는 1400인 사원의 사원 번호(EMPNO), 이름(ENAME), 커미션(COMM) 데이터 추출
5. 급여가 1200에서 3500 사이인 사원의 사원 번호, 이름, 급여
: SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL BETWEEN 1200 AND 3500;
=> BETWEEN A AND B를 사용함으로써 급여의 범위를 설정할 수 있음.
6. 직급이 매니저이고 부서 번호가 30번인 부서에 근무하는 사원 이름, 사원 번호, 직급, 부서 번호
: SELECT ENAME, EMPNO, JOB, DEPTNO FROM EMP WHERE JOB = 'MANAGER' AND DEPTNO = 30;
=> WHERE 조건 뒤에 직급이 매니저이면서 부서 번호가 30인 조건을 설정
7. 커미션이 300, 500, 1400이 모두 아닌 사원의 사원 번호, 이름, 커미션
: SELECT EMPNO, ENAME, COMM FROM EMP WHERE NOT COMM IN(300, 500, 1400);
=> NOT을 사용함으로써 '아닌'이라는 조건을 설정할 수 있음.
8. 이름에 'S'가 포함되지 않는 사원의 사원 번호, 이름
: SELECT EMPNO, ENAME FROM EMP WHRE NOT ENAME LIKE '% S%';
=> 이름에 S가 포함되는 조건 앞에 NOT을 붙여서 제외 조건으로 변경
9. 매니저가 NULL인 사원의 이름과 직급
: SELECT ENAME, JOB FROM EMP WHERE MGR IS NULL;
=> 열(Column)이 NULL인지 판단하려면 IS NULL 또는 IS NOT NULL을 사용할 수 있다.
참조 사이트
'BigQuery&SQL_' 카테고리의 다른 글
BigQuery 강의 1 (0) | 2024.12.09 |
---|---|
MySQL 예시 코드 및 실습 2 (0) | 2022.04.25 |
MySQL 데이터 베이스(Database) 정리 (0) | 2022.04.19 |