공부한지 한달이 넘어가는... SQL... 프로그래머스 문제를 풀다보니 예전에 공부했던 개념들을 복습해야겠다는 생각이 들었다....😶
SQL의 기본이라고 할 수 있는 SELECT 명령은 데이터 검색을 위한 것으로, 질문을 던지면 데이터베이스 서버가 클라이언트로 결과를 반환해 준다. 데이터를 추가할 경우에는 SELECT와는 반대로 클라이언트에서 서버로 데이터를 전송하여 서버가 전송받은 데이터를 데이터베이스에 저장한다.
Insert의 기본적인 명령은 다음과 같다.
INSERT INTO 테이블명 VALUES(값 1, 값 2, ... );
예를 들어보자.
다음과 같이 sample41 테이블이 있다고 하자
no | a | b |
---|---|---|
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
이 테이블에 1,'ABC','2014-01-25' 값을 no,a,b에 추가하고싶다면 다음과 같이 명령을 작성하면 된다.
👩🏻💻 명령
INSERT INTO sample41 VALUES(1,'ABC','2014-01-25')
👩🏻💻 결과
no | a | b |
---|---|---|
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
1 | ABC | 2014-01-25 |
이 때 만약 열을 지정해서 지정된 열에만 값을 추가하고 싶다면?
👉🏻 VALUES 앞에 괄호를 통해 열을 지정해주면 된다.
👩🏻💻 명령
INSERT INTO sample41(a, no) VALUES(2,'A')
👩🏻💻 결과
no | a | b |
---|---|---|
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
1 | ABC | 2014-01-25 |
2 | A | NULL |
주목할 점은 별도의 값을 지정하지 않았던 b열에는 기본값으로 NULL(b열의 default 값)이 저장된다는 점이다.
❓기본값(default)이란?
명시적으로 값을 지정하지 않았을 경우 사용하는 초깃값을 말한다.
열을 지정해 행을 추가할 때 지정하지 않은 열은 default 값을 사용하여 저장된다.
ex)
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
no | int(11) | NO | NULL | ||
d | int(11) | YES | 0 |
-> no 열의 기본값은 NULL
-> d 열의 기본값은 0
+) 기본값을 추가하고 싶다면 별도의 값을 지정하지 않거나 VALUES(DEFAULT)로 지정하면 된다.
⚠️ 만약 특정 열에 NOT NULL 제약이 걸려있다면?
INSERT 명령을 이용해 NULL 값을 추가하려고 하면 에러가 발생한다.
때문에 NULL값을 추가할 때는 주의할 필요가 있다!
ISNULL
을 이용해 NULL인지 아닌지 확인을 해야한다.
데이터베이스의 테이블에서 행을 삭제하기 위해 DELETE 명령을 사용한다. 기본적인 명령은 다음과 같다.
DELETE FROM 테이블명 WHERE 조건식
예를 들어보자.
다음과 같이 sample41 테이블이 있다고 하자
no | a | b |
---|---|---|
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
1 | ABC | 2014-01-25 |
이 테이블에서 no=3인 행을 제거하고싶다면 다음과 같이 명령을 작성하면 된다.
👩🏻💻 명령
DELETE FROM sample41 WHERE no=3;
👩🏻💻 결과
no | a | b |
---|---|---|
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
👉🏻 WHERE 뒤에 제거하고 싶은 행의 조건을 적어주면 된다.
👉🏻 주의할점은 조건에 해당되는 모든 행이 삭제된다.
데이블의 셀에 저장되어 있는 값을 갱신 즉, 수정하고 싶다면 UPDATE 명령을 사용하면 된다. 기본적인 명령은 다음과 같다.
UPDATE 테이블명 SET 열1=값1, 열2=값2, .... WHERE 조건식
예를 들어보자.
다음과 같이 sample41 테이블이 있다고 하자
no | a | b |
---|---|---|
2 | 3 | 2013-02-25 |
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
이 테이블에서 no=2인 행의 b값을 '2014-09-07'로 바꾸고 싶다면 다음과 같이 명령을 작성하면 된다.
👩🏻💻 명령
UPDATE sample41 SET b='2014-09-07' WHERE no=2;
👩🏻💻 결과
no | a | b |
---|---|---|
2 | 3 | 2014-09-07 |
4 | 3 | 2014-01-25 |
5 | 4 | 2014-09-07 |
👉🏻 WHERE 구를 생략한다면 테이블의 모든 행이 갱신된다.
👉🏻 INSERT와 마찬가지로 열의 자료형에 맞는 값을 지정해야 한다.
⚠️ 테이블에 존재하지 않는 열을 지정하면 에러가 발생함으로 SELECT를 통해 값이 있는지 확인하는 것이 중요하다.
1) UPDATE 명령으로 증가 연산을 계산할 수 있다.
다음과 같이 sample41가 있을 때 모든 no에 대해 1씩 증가시키고 싶다면 다음과 같이 코드를 작성할 수 있다.
👩🏻💻 명령
UPDATE sample41 SET no=no+1;
👩🏻💻 결과
no | a | b |
---|---|---|
3 | 3 | 2014-09-07 |
5 | 3 | 2014-01-25 |
6 | 4 | 2014-09-07 |
👉🏻 모든 행의 no 값에 1씩 더해진 것을 알 수 있다.
2) 복수개의 열을 갱신시킬 수 있다.
UPDATE 테이블명 SET 열명1=값1, 열명2=값2, ... WHERE 조건식
예를 들어 다음과 같이 두개의 명령문을 통해 수행할 UPDATE 명령을 하나의 명령문으로 통합하여 실행할 수 있다.
① 두개의 명령문 이용
UPDATE sample41 SET a='xxx' WHERE no =2;
UPDATE sample41 SET b='2014-01-01' WHERE no=2;
② 하나의 명령문 이용
UPDATE sample41 SET a='xxx', b='2014-01-01' WHERE no =2;
👉🏻 이 때, 주의할 점은 SET 구를 어떤 순서로 갱신 처리를 하는지 알아둘 필요가 있다는 점이다. MySQL에서는 SET구에 기술된 순서로 갱신 처리가 일어나므로 열을 참조할 떄 처리 순서를 고려하여 명령을 작성해야한다.