MySQL SELECT 취득 결과로 테이블 만들기

MySQL에서 다른 테이블에서 취득한 결과로 테이블을 만드는 방법을 보겠습니다.

테이블에서 데이터를 취득하기 위해 SELECT를 사용합니다.

테이블을 생성하기 위해서는 CREATE TABLE을 사용합니다.

테이블을 생성하기 위한 CREATE TABLE와 데이터를 취득하기 위한 SELECT를 같이 사용하면 취득한 결과를 새로운 테이블에 저장할 수 있습니다.

먼저 작성 방법을 보겠습니다.

CREATE TABLE 생성할 테이블명
SELECT *
FROM 데이터 취득 테이블명

 

SELECT문에서 취득한 결과로 새로운 테이블이 생성이 됩니다.

그리고 새로 생성한 테이블에는 취득한 결과가 등록이 됩니다.

샘플을 보면서 확인해 보겠습니다.

mysql> SELECT * FROM Member;
+----+----------+-------+------+--------+---------+
| id | Memberid | name  | age  | gender | company |
+----+----------+-------+------+--------+---------+
|  1 |        1 | tom   |   24 | F      | A       |
|  2 |        2 | cat   |   36 | F      | A       |
|  3 |        3 | work  |   29 | M      | C       |
|  4 |        4 | bench |   45 | F      | A       |
|  5 |        5 | post  |   59 | F      | B       |
|  6 |        6 | gre   |   21 | M      | C       |
|  7 |        8 | php   |   23 | F      | NULL    |
|  8 |        9 | da    |   61 | M      | NULL    |
|  9 |        7 | jang  |   36 | M      | E       |
+----+----------+-------+------+--------+---------+
9 rows in set (0.01 sec)

 

Member 테이블의 gender컬럼에는 F와 M값이 있습니다.

gender값이 M인 데이터만 추출해 Member_males 테이블을 새로 만들어 데이터를 저장하겠습니다.

CREATE TABLE Member_males
SELECT *
FROM Member
WHERE gender = ‘M’;

 

mysql> CREATE TABLE Member_males SELECT * FROM Member WHERE gender = 'M';
Query OK, 4 rows affected (0.30 sec)
Records: 4  Duplicates: 0  Warnings: 0

 

Member테이블에서 gender값이 M인 데이터만 추출해 Member_males 테이블에 등록이 되었는지 확인해보겠습니다.

mysql> SELECT * FROM Member_males;
+----+----------+------+------+--------+---------+
| id | Memberid | name | age  | gender | company |
+----+----------+------+------+--------+---------+
|  3 |        3 | work |   29 | M      | C       |
|  6 |        6 | gre  |   21 | M      | C       |
|  8 |        9 | da   |   61 | M      | NULL    |
|  9 |        7 | jang |   36 | M      | E       |
+----+----------+------+------+--------+---------+
4 rows in set (0.00 sec)

 

Member_males 테이블도 새로 생성이 되었고 Member 테이블의 gender 값이 M인 데이터만 추출해 등록되었습니다.

필요한 컬럼만 새로운 테이블에 생성하고 싶은 경우에는 SELECT에서 조정을 할 수 있습니다.

CREATE TABLE 생성할 테이블명
SELECT 컬럼1 ,
컬럼2 ,
컬럼3 ,

FROM 데이터 취득 테이블명

 

SELECT에서 취득한 항목으로 테이블에 컬럼이 만들어집니다.

CREATE TABLE SELECT로 생성한 테이블과 원본 테이블의 컬럼 속성을 비교해보겠습니다.

우선 원본 테이블의 속성을 확인해보겠습니다.

mysql> SHOW COLUMNS FROM Member;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| Memberid | int         | YES  |     | NULL    |                |
| name     | varchar(32) | YES  |     | NULL    |                |
| age      | int         | YES  |     | NULL    |                |
| gender   | varchar(4)  | YES  |     | NULL    |                |
| company  | varchar(32) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
6 rows in set (0.03 sec)

 

CREATE TABLE SELECT로 생성한 테이블 속성을 확인해보겠습니다.

mysql> SHOW COLUMNS FROM Member_males;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   |     | 0       |       |
| Memberid | int         | YES  |     | NULL    |       |
| name     | varchar(32) | YES  |     | NULL    |       |
| age      | int         | YES  |     | NULL    |       |
| gender   | varchar(4)  | YES  |     | NULL    |       |
| company  | varchar(32) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

 

원본 테이블과 컬럼의 데이터 타입은 동일합니다.

하지만 기본키 또는 AUTO_INCREMENT 설정은 가져오지 못했습니다.

위 테이블에서는 인덱스 설정을 하지 않았지만 만약 인덱스를 설정한 경우에도 가져오지 못합니다.

CREATE TABLE SELECT를 사용해 테이블을 생성할 경우에는 임시로 데이터를 저장하는 정도로 사용하는 것이 좋습니다.

기본키인덱스등의 정보를 가져오지 못하기 때문에 데이터의 적합성이나 성능이 떨어질 수 있습니다.

댓글