Deperecated/SQLD

SQLD - DML

누알라리 2020. 2. 14. 23:36

앞 절에서 테이블을 생성하고 생성된 테이블의 구조를 변경하는 명령어에 대해서 알아보았다. (DDL)

 

지금 부터는 만들어진 테이블에 관리하기를 원하는 자료들을 입력, 수정, 삭제, 조회하는 DML(DATA MANIPULATION LANGUAGE) 사용 방법을 알아본다.

 

mysql> DESC PLAYER
    -> ;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| PLAYER_ID     | char(7)      | NO   | PRI | NULL    |       |
| PLAYER_NAME   | varchar(20)  | NO   |     | NULL    |       |
| TEAM_ID       | char(3)      | NO   |     | NULL    |       |
| E_PLAYER_NAME | varchar(40)  | YES  |     | NULL    |       |
| NICKNAME      | varchar(30)  | YES  |     | NULL    |       |
| JOIN_YYY      | char(4)      | YES  |     | NULL    |       |
| POSITION      | varchar(10)  | YES  |     | NULL    |       |
| NATION        | varchar(20)  | YES  |     | NULL    |       |
| BACK_NO       | decimal(2,0) | YES  |     | NULL    |       |
| BIRH_DATE     | datetime     | YES  |     | NULL    |       |
| SOLAR         | char(1)      | YES  |     | NULL    |       |
| HEIGHT        | smallint     | YES  |     | NULL    |       |
| WEIGHT        | smallint     | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
13 rows in set (0.00 sec)

 

1. INSERT

해당 칼럼명과 입력되어야 하는 값을 서로 1:1 로 매핑해서 입력하면 된다.

해당 칼럼의 데이터 유형 이 CHAR 나 VARCHAR2 등 문자 유형일 경우 『 ' 』(SINGLE QUOTATION)로 입력할 값을 입력한 다.

숫자일 경우 『 ' 』(SINGLE QUOTATION)을 붙이지 않아야 한다.

 

▶ INSERT INTO 테이블명 (COLUMN_LIST)VALUES (COLUMN_LIST 에 넣을 VALUE_LIST);
▶ INSERT INTO 테이블명 VALUES (전체 COLUMN 에 넣을 VALUE_LIST);

첫 번째 유형은 테이블의 칼럼 을 정의할 수 있는데, 이때 칼럼의 순서는 테이블의 칼럼 순서와 매치할 필요는 없으며, 정의하지 않은 칼럼은 Default 로 NULL 값이 입력된다.

단, Primary Key 나 Not NULL 로 지정된 칼럼은 NULL 이 허용되지 않는다.

 

 

두 번째 유형은 모든 칼럼에 데이터를 입력하는 경우로 굳이 COLUMN_LIST 를 언급하지 않아도 되지만, 칼럼의 순서대로 빠짐없이 데이터가 입력되어야 한다.

데이터를 입력하는 경우 정의되지 않은 미지의 값인 E_PLAYER_NAME 은 두 개의 『 '' 』SINGLE QUOTATION 을 붙여서 표현하거나, NATION 이나 BIRTH_DATE 의 경우처럼 NULL 이라고 명시적 으로 표현할 수 있다

 

mysql> INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, BACK_NO, HEIGHT, WEIGHT) VALUES ( '2002007', '박지성', 'K07', 'MF',7,178,73);
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO PLAYER VALUES ('2002010', '이청용', 'K07','', 'BlueDragon', '2002', 'MF','', 17,NULL,'1',180,67);
Query OK, 1 row affected (0.01 sec)

 

2. SELECT

SELECT [ALL/DISTINCT] 보고 싶은 칼럼명, 보고 싶은 칼럼명, … FROM 해당 칼럼들이 있는 테이블명;

 

1. ALL

-Default 옵션이므로 별도로 표시하지 않아도 된다.

- 중복된 데이터가 있어도 모두 출력한다.

 

2. DISTINCT

- 중복된 데이터가 있는 경우 1 건으로 처리해서 출력한다.

- 조회하기를 원하는 칼럼명을 SELECT 다음에 콤마 구분자(,)로 구분하여 나열하고, FROM 다음에 해당 칼럼이 존재하는 테이블명을 입력하여 실행시킨다.

mysql> SELECT PLAYER_ID, PLAYER_NAME from player;
+-----------+-------------+
| PLAYER_ID | PLAYER_NAME |
+-----------+-------------+
| 2002007   | 박지성      |
| 2002010   | 이청용      |
+-----------+-------------+
2 rows in set (0.00 sec)

 

3. 와일드카드 애스터리스크(*)

mysql> SELECT * FROM PLAYER
    -> ;
+-----------+-------------+---------+---------------+------------+----------+----------+--------+---------+-----------+-------+--------+--------+
| PLAYER_ID | PLAYER_NAME | TEAM_ID | E_PLAYER_NAME | NICKNAME   | JOIN_YYY | POSITION | NATION | BACK_NO | BIRH_DATE | SOLAR | HEIGHT | WEIGHT |
+-----------+-------------+---------+---------------+------------+----------+----------+--------+---------+-----------+-------+--------+--------+
| 2002007   | 박지성      | K07     | NULL          | NULL       | NULL     | MF       | NULL   |       7 | NULL      | NULL  |    178 |     73 |
| 2002010   | 이청용      | K07     |               | BlueDragon | 2002     | MF       |        |      17 | NULL      | 1     |    180 |     67 |
+-----------+-------------+---------+---------------+------------+----------+----------+--------+---------+-----------+-------+--------+--------+
2 rows in set (0.00 sec)

 

4. ALIAS(AS) 부여하기

- 조회된 결과에 일종의 별명(ALIAS, ALIASES)을 부여해서 칼럼 레이블을 변경할 수 있다.

칼럼 별명 (ALIAS)에 대한 사항을 정리하면 다음과 같다.

- 칼럼명 바로 뒤에 온다.

- 칼럼명과 ALIAS 사이에 AS, as 키워드를 사용할 수도 있다. (option)

- 이중 인용부호(Double quotation)는 ALIAS 가 공백, 특수문자를 포함할 경우와 대소문자 구분 이 필요할 경우 사용된다.

- 별명 중간에 공백이 들어가는 경우 " "을 사용해야 한다.

 

mysql> SELECT PLAYER_ID AS 선수아이디, PLAYER_NAME AS 선수명, TEAM_ID AS 팀명 FROM PLAYER;
+------------+--------+------+
| 선수아이디 | 선수명 | 팀명 |
+------------+--------+------+
| 2002007    | 박지성 | K07  |
| 2002010    | 이청용 | K07  |
+------------+--------+------+
2 rows in set (0.00 sec)

 

3. 산술 연산자와 합성 연산자

1. 산술 연산자

- NUMBER 와 DATE 자료형에 대해 적용된다.

- 우선순위를 위한 괄호 적용이 가능

mysql> SELECT PLAYER_NAME AS 이름, ROUND(WEIGHT / ((HEIGHT/100) * (HEIGHT/100)),2) AS BMI비만지수 FROM PLAYER;
+--------+-------------+
| 이름   | BMI비만지수 |
+--------+-------------+
| 박지성 |       23.04 |
| 이청용 |       20.68 |
+--------+-------------+
2 rows in set (0.00 sec)

 

2. 합성(CONCATENATION) 연산자

- (Oracle) : 문자와 문자를 연결하는 경우 2 개의 수직 바(||)에 의해 이루어진다.

- (SQL Server) : 문자와 문자를 연결하는 경우 + 표시에 의해 이루어진다.

 

- 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수를 사용할 수 있다.

- 칼럼과 문자 또는 다른 칼럼과 연결시킨다.

 

- 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.

 

mysql> SELECT CONCAT(PLAYER_NAME,'선수') AS NAME FROM PLAYER;
+------------+
| NAME       |
+------------+
| 박지성선수 |
| 이청용선수 |
+------------+
2 rows in set (0.00 sec)

 

 

 

'Deperecated > SQLD' 카테고리의 다른 글

SQLD - 함수(FUNCTION)  (0) 2020.02.17
SQLD - WHERE절  (0) 2020.02.16
SQLD - TCL  (0) 2020.02.16
SQLD - DDL  (0) 2020.02.14