검은색은 My-SQL 실제상황(?)이고 파란색은 설명입니다.
(직접 실행한걸 퍼오다보니 테이블이 찌그러져서 보입니다. 양해해주세요 ^^;)
Enter password: ********* 비밀번호는 비밀입니다. -.-;
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.20-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE DC;
Query OK, 1 row affected (0.00 sec)
DC란 이름의 데이터베이스를 생성합니다.
mysql> USE DC;
Database changed
데이터 베이스 DC를 사용합니다.
mysql> CREATE TABLE DEPARTMENT (
-> DEPTNO INT NOT NULL,
-> DNAME CHAR (10),
-> LOCATION CHAR (10),
-> PRIMARY KEY (DEPTNO)
-> );
Query OK, 0 rows affected (0.14 sec)
DEPARTMENT 테이블을 생성합니다. 각애트리뷰트의 이름과 자료형 그리고 기본키를 설정합니다.
mysql> CREATE TABLE EMPLOYEE (
-> EMPNO INT NOT NULL,
-> EMPNAME CHAR (10),
-> TITLE CHAR (10),
-> MANAGER INT,
-> SALARY INT,
-> DNO INT,
-> PRIMARY KEY (EMPNO)
-> );
Query OK, 0 rows affected (0.09 sec)
EMPLOYEE 테이블을 생성합니다. 각애트리뷰트의 이름과 자료형 그리고 기본키를 설정합니다.
mysql> CREATE TABLE PROJEMP (
-> PROJNO INT NOT NULL,
-> PROJNAME CHAR (10),
-> PMANAGER INT,
-> BUDGET INT,
-> PRIMARY KEY (PROJNO)
-> );
Query OK, 0 rows affected (0.14 sec)
PROJEMP 테이블을 생성합니다. 각애트리뷰트의 이름과 자료형 그리고 기본키를 설정합니다.
mysql> INSERT INTO EMPLOYEE VALUES (4377, '이성래', '사장', NULL, 5000000, 2);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO EMPLOYEE VALUES (3426, '박영권', '과장', 4377, 3000000, 1);
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO EMPLOYEE VALUES (3011, '이수민', '부장', 4377, 4000000, 3);
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO EMPLOYEE VALUES (3427, '최종철', '사원', 3011, 1500000, 3);
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO EMPLOYEE VALUES (1003, '조민희', '과장', 4377, 3000000, 2);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO EMPLOYEE VALUES (2106, '김창섭', '대리', 1003, 2500000, 2);
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO EMPLOYEE VALUES (1365, '김상원', '사원', 3426, 1500000, 1);
Query OK, 1 row affected (0.04 sec)
EMPLOYEE 테이블에 투플을 삽입합니다. 앞에서 정의한 애트리뷰트의 순서에 맞게 알맞은 값을 입력합니다.
mysql> INSERT INTO DEPARTMENT VALUES (1, '영업', '서울');
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO DEPARTMENT VALUES (2, '기획', '인천');
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO DEPARTMENT VALUES (3, '개발', '부산');
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO DEPARTMENT VALUES (4, '총무', '서울');
Query OK, 1 row affected (0.04 sec)
DEPARTMENT 테이블에 투플을 삽입합니다. 앞에서 정의한 애트리뷰트의 순서에 맞게 알맞은 값을 입력합니다.
mysql> INSERT INTO PROJEMP VALUES (01, '청소로봇', 1003, 100000000);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO PROJEMP VALUES (02, 'PMP산업', 4377, 120000000);
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO PROJEMP VALUES (03, '애니메이션', 4377, 70000000);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO PROJEMP VALUES (04, '데이터마이닝', 3426, 90000000);
Query OK, 1 row affected, 1 warning (0.06 sec)
PROJEMP 테이블에 투플을 삽입합니다. 앞에서 정의한 애트리뷰트의 순서에 맞게 알맞은 값을 입력합니다.
mysql> show databases;
+----------+
| Database |
+----------+
| dc |
| friend |
| mysql |
| test |
+----------+
4 rows in set (0.00 sec)
데이터 베이스들을 확인합니다. 현재 사용하고 있는 'dc'가 맨 앞에 표시되어 있습니다. 예전에 만든 것들도 보이는군요.
mysql> show tables;
+--------------+
| Tables_in_dc |
+--------------+
| department |
| employee |
| projemp |
+--------------+
3 rows in set (0.00 sec)
현재 사용중인 데이터 베이스의 테이블들을 보여줍니다. 앞에서 use dc;를 해서 'dc' 데이터베이스를 사용하고 있으므로 'dc' 데이터베이스에 속한 테이블들을 보여 줍니다. 앞에서 만들었던 테이블들이 나타나는것을 볼 수 있습니다.
mysql> desc department;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| DEPTNO | int(11) | | PRI | 0 | |
| DNAME | char(10) | YES | | NULL | |
| LOCATION| char(10) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
department 테이블의 구조를 확인합니다. 앞에서 정의해준대로 보이는군요. DEPTNO가 기본키입니다.
mysql> desc employee;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| EMPNO | int(11) | | PRI | 0 | |
| EMPNAME| char(10)| YES | | NULL | |
| TITLE | char(10) | YES | | NULL | |
| MANAGER| int(11) | YES | | NULL | |
| SALARY | int(11) | YES | | NULL | |
| DNO | int(11) | YES | | NULL | |
+---------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)
employee 테이블의 구조를 확인합니다. 앞에서 정의해준대로 보이는군요. EMPNO가 기본키입니다.
mysql> desc projemp;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| PROJNO | int(11) | | PRI | 0 | |
| PROJNAME| char(10)| YES | | NULL | |
| PMANAGER| int(11) | YES | | NULL | |
| BUDGET | int(11) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
4 rows in set (0.01 sec)
projemp 테이블의 구조를 확인합니다. 앞에서 정의해준대로 보이는군요. PROJNO가 기본키입니다.
mysql> select * from department;
+--------+-------+----------+
| DEPTNO| DNAME| LOCATION|
+--------+-------+----------+
| 1 | 영업 | 서울 |
| 2 | 기획 | 인천 |
| 3 | 개발 | 부산 |
| 4 | 총무 | 서울 |
+--------+-------+----------+
4 rows in set (0.00 sec)
department 테이블의 데이터를 확인합니다. 입력한대로 보입니다.
mysql> select * from employee;
+-------+---------+-------+---------+---------+------+
|EMPNO|EMPNAME|TITLE |MANAGER| SALARY | DNO |
+-------+---------+-------+---------+---------+------+
| 1003 | 조민희 | 과장 | 4377 | 3000000 | 2 |
| 1365 | 김상원 | 사원 | 3426 | 1500000 | 1 |
| 2106 | 김창섭 | 대리 | 1003 | 2500000 | 2 |
| 3011 | 이수민 | 부장 | 4377 | 4000000 | 3 |
| 3426 | 박영권 | 과장 | 4377 | 3000000 | 1 |
| 3427 | 최종철 | 사원 | 3011 | 1500000 | 3 |
| 4377 | 이성래 | 사장 | NUL | 5000000 | 2 |
+-------+---------+-------+---------+---------+------+
7 rows in set (0.34 sec)
employee 테이블의 데이터를 확인합니다. 입력한대로 보입니다.
mysql> select * from projemp;
+--------+------------+----------+-----------+
| PROJNO| PROJNAME| PMANAGER| BUDGET |
+--------+------------+----------+-----------+
| 1 | 청소로봇 | 1003 | 100000000 |
| 2 | PMP산업 | 4377 | 120000000 |
| 3 | 애니메이션 | 4377 | 70000000 |
| 4 | 데이터마이 | 3426 | 90000000 |
+--------+------------+----------+-----------+
4 rows in set (0.00 sec)
projemp 테이블의 데이터를 확인합니다. 입력한대로 보입니다.
-------------------------------------------------------
데이터 베이스 작성을 완료하였습니다.
이제부터는 SQL을 이용하여 필요한 데이터만 골라내도록 하겠습니다.
-------------------------------------------------------
* 직급이 대리인 모든 사원들의 이름과 사원번호, 이들이 소속된 부서의 이름과 부서번호를 검색하라.
mysql> SELECT EMPNAME, EMPNO, DEPTNO, DNAME
-> FROM EMPLOYEE AS E, DEPARTMENT AS D
-> WHERE E.DNO = D.DEPTNO AND (E.TITLE = '대리');
+---------+-------+--------+-------+
|EMPNAME|EMPNO|DEPTNO|DNAME|
+---------+-------+--------+-------+
| 김창섭 | 2106 | 2 | 기획 |
+---------+-------+--------+-------+
1 row in set (0.00 sec)
* 각 프로젝트에 대하여 프로젝트의 이름, 관리자의 이름, 그 관리자가 소속된 부서의 이름을 검색하라.
mysql> SELECT DISTINCT PROJNAME, EMPNAME, DNAME
-> FROM EMPLOYEE AS E, DEPARTMENT AS D, PROJEMP AS P
-> WHERE E.EMPNO = P.PMANAGER AND E.DNO = D.DEPTNO;
+------------+---------+-------+
| PROJNAME |EMPNAME|DNAME|
+------------+---------+-------+
| 청소로봇 | 조민희 | 기획 |
| PMP산업 | 이성래 | 기획 |
| 애니메이션 | 이성래 | 기획 |
| 데이터마이 | 박영권 | 영업 |
+------------+---------+-------+
4 rows in set (0.00 sec)
* 모든 사원들에 대하여 이름과 관리자의 이름을 검색하라.
mysql> SELECT E.EMPNAME, M.EMPNAME
-> FROM EMPLOYEE AS E, EMPLOYEE AS M
-> WHERE E.MANAGER = M.EMPNO;
+---------+---------+
|EMPNAME|EMPNAME|
+---------+---------+
| 조민희 | 이성래 |
| 김상원 | 박영권 |
| 김창섭 | 조민희 |
| 이수민 | 이성래 |
| 박영권 | 이성래 |
| 최종철 | 이수민 |
+---------+---------+
6 rows in set (0.00 sec)
* 부서번호 2에 근무하면서 프로젝트 예산이 100,000,000원인 프로젝트를 관리하는 사원들의 이름과 급여를 검색하라.
mysql> SELECT EMPNAME, SALARY
-> FROM EMPLOYEE AS E, DEPARTMENT AS D, PROJEMP AS P
-> WHERE E.EMPNO = P.PMANAGER AND E.DNO = D.DEPTNO AND D.DEPTNO = 2 AND P.BU
DGET = 100000000;
+---------+---------+
|EMPNAME| SALARY|
+---------+---------+
| 조민희 | 3000000 |
+---------+---------+
1 row in set (0.00 sec)
* 서울에 위치한 부서에서 근무하는 사원들의 이름을 검색하라.
mysql> SELECT EMPNAME
-> FROM EMPLOYEE AS E, DEPARTMENT AS D
-> WHERE E.DNO = D.DEPTNO AND LOCATION='서울';
+---------+
|EMPNAME|
+---------+
| 김상원 |
| 박영권 |
+---------+
2 rows in set (0.00 sec)
* 부서번호 1에 근무하는 사원들 중에서
적어도 부서번호 3에 근무하는 어떤 한 사원만큼 급여를 받는 사원들의 이름을 열거하라.
mysql> SELECT EMPNAME
-> FROM EMPLOYEE
-> WHERE DNO=1 AND SALARY >=
-> (SELECT MIN(SALARY)
-> FROM EMPLOYEE
-> WHERE DNO = 3);
+---------+
|EMPNAME|
+---------+
| 김상원 |
| 박영권 |
+---------+
2 rows in set (0.00 sec)
* 부서번호 3에 근무하지 않는 사원들 중에서
부서번호 3에 근무하는 모든 사원들의 급여보다 많은 급여를 받는 사원들의 이름을 검색하라.
mysql> SELECT EMPNAME
-> FROM EMPLOYEE
-> WHERE DNO<>3 AND SALARY >=
-> (SELECT MAX(SALARY)
-> FROM EMPLOYEE
-> WHERE DNO=3);
+---------+
|EMPNAME|
+---------+
| 이성래 |
+---------+
1 row in set (0.00 sec)
mysql>
아이고 빡쎠라... -.-;
저같은 초보님들에세 조금이나마 도움이 되길 바라며~!
좋은하루되세요~!
참고 ) 데이터베이스배움터 (홍의경 저), 백성욱 교수님 수업