본문 바로가기

카테고리 없음

My-SQL 간단한 질의들 SQL 표현 실습

검은색은 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>

 

아이고 빡쎠라... -.-;

저같은 초보님들에세 조금이나마 도움이 되길 바라며~!

좋은하루되세요~!

 

참고 ) 데이터베이스배움터 (홍의경 저), 백성욱 교수님 수업