지금까지는 기존 데이터베이스를 검색하는 내용이였다면, 이번 시간엔 직접 데이터를 넣고, 수정하고, 지우는 방법을 알아보자.
금일 수행할 데이터베이스를 살펴보자. dbo.salaries로 가면
이와 같은 데이터베이스를 확인할 수 있다. 각각 년도, 팀ID, 리그ID, 선수ID와 연봉인걸 알 수 있다.
기본적으로 데이터를 삽입하기 위해서는 다음과 같은 양식을 따른다.
INSERT INTO (테이블명) VALUES (테이블의 열 별 값)
해당 양식으로 다음과 같은 쿼리문을 작성해보자.
INSERT INTO salaries
VALUES(2020, 'KOR','NL','rookiss',900000);
--각각 년도, 팀ID,리그 ID,선수ID, 연봉이다.
1개 행이 적용되었다는 글과 완료시간이 뜨면 잘 적용된 것이니,
SELECT *
FROM salaries
ORDER BY yearID DESC;
로 조회를 해보자.
만일 해당 쿼리문에 일부 속성이 빠져있으면 어떻게 될까?
INSERT INTO salaries
VALUES(2020, 'KOR','NL','rookiss2');
--연봉이 빠져있다.
제공된 값의 개수나 열 이름이 테이블 정의와 일치하지 않는다는 오류가 뜨며 삽입이 되지 않는다. 어찌보며 당연한 결과이다. 연봉만 빠져있는 데이터베이스는 존재하지 않으니 말이다.
당연히 테이블 속성의 순서를 바꾸는 것 또한 오류가 나거나 엉뚱한 값이 삽입될 것이다.
일부 속성 값만 넣고 싶거나, 속성들의 순서에 구애받고 싶지 않다면 다음과 같이 작성하면 된다.
INSERT INTO (테이블명)(테이블 내 열) VALUES(테이블 내 열 값들)
INSERT INTO salaries(yearID,teamID,playerID,lgID,salary)
VALUES(2020, 'KOR','rookiss2','NL',80000);
--1)속성들의 순서에 구애받고 싶지 않은 경우. 리그ID와 플레이어ID 순서가 바뀌어있다.
INSERT INTO salaries(yearID,teamID,playerID,lgID)
VALUES(2020, 'KOR','rookiss3','NL');
--2)일부 속성 값만 넣는 경우다.
이때 2) 코드 수행 후, 테이블을 조회하면 salary에는 NULL값이 붙어있다. dbo.salaries를 우클릭하고 디자인으로 이동해보자.
요런 형태가 나온다. salary 열에선 NULL을 허용한다 했으니, 2)에서 값을 넣지 않은 경우 기본적으로 NULL이 들어간 것이다. 만일 기본값을 설정해뒀다면, NULL이 아닌 기본값으로 값이 들어갈 것이다.
해당 이미지에서 열쇠모양은 Primary Key이자 Composite Key이다. 이 4개의 열들 덕분에 하나의 '고유한' 행들이 존재할 수 있다는 것. 따라서 1)코드를 수행하고, 또 다시 수행하려고 하면 당연히 되지 않을 것이다. 이미 4개의 열로 인해 고유한 행이 탄생했는데 한번 더 수행시 이를 어기게 되니까.
UPDATE는 이미 존재하고 있는 데이터를 수정해준다. 그다지 어려운 것은 없다.
--UPDATE 테이블명 SET [열=값,....] WHERE [조건]
해당 데이터베이스에서 팀ID가 'KOR'이고, 이에 속하면 연봉을 2배, 년도를 1년 증가시키고 싶다면 다음과 같이 작성해주면 된다.
UPDATE salaries
SET salary=salary*2 ,yearID=yearID+1
where teamID='KOR'
주의할 점은, WHERE절이 없으면 해당 데이터베이스 모든 행이 수정된다는 점이다. 참고하자.
DELETE는 이미 존재하고 있는 데이터를 제거해준다.
--DELETE FROM (테이블명) WHERE (조건)
우리가 지금까지 년도가 2020년도 이상인 데이터를 생성했으니, 해당 데이터를 삭제하는 쿼리문을 작성해보자.
DELETE FROM salaries
WHERE yearID>=2020
역시나 주의할 점은 UPDATE처럼 WHERE 절이 없다면 데이터베이스 모든 행이 삭제된다는 점. 잘못해서 홀라당 날려버리는 일이 없도록 조심하자.