공부/인프런 - Rookiss

Part 5-2-10. SQL 입문 : INSERT, DELETE, UPDATE

셩잇님 2024. 2. 12. 19:04
반응형

 

 

💅 SQL 입문

 

 지난 시간에는 그룹화(GROUP BY)를 통해 데이터를 새롭게 검색하는 방법에 대해서 알아보았다. 또한 GROUP BY를 사용할 때에는 HAVNING 이라는 키워드까지 함께 사용하여 WHERE 절과 동일한 느낌으로 조건을 추가하는 것 까지 알 수 있었다. 이번 시간에는 SELECT가 아닌 INSERT, DELETE, UPDATE를 통해 검색뿐만 아니라, 데이터 추가, 수정, 삭제에 대해서 알아보는 시간을 가져보도록 한다.

 


 

🐲 테이블 변경

 

 기존에 사용하던 Players 테이블이 아닌 salaries 테이블을 이용하여 실습을 진행할 것이다. 

 

 

salaries 테이블 정보

 salaries 테이블 정보는 크게 yearID(연도), teamID(팀 ID), lgID(리그 ID), playerID(선수 ID), salary(연봉)로 구분되어 있다. 해당 테이블에 INSERT를 실습하여 보자.

 


 

🐲 INSERT

 

 기본적으로 데이터를 삽입하기 위해서는 다음과 같은 형식을 따른다. 

 

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는 이미 존재하고 있는 데이터의 VALUE를 수정한다.

 

--UPDATE 테이블명 SET [열=값, ....] WHERE [조건]

 

 만약 해당 데이터베이스에서 팀 ID가 'KOR'이고, 이에 속하면 연봉을 2배, 년도를 1년 증가시키고 싶다면 다음과 같이 작성해주면 된다.

UPDATE salaries
SET salary = salary * 2, yearID = yearID + 1
where teamID = 'KOR'

 

 UPDATE문에서 주의할 점은, WHERE 절에 조건이 없다면 해당 데이터베이스 모든 행이 수정된다는 점이다. 😮

 


 

🐲 DELETE

 

DELETE는 이미 존재하고 있는 데이터를 제거해준다.

--DELETE FROM (테이블명) WHERE (조건)

 

 테스트를 위해 지금까지 년도가 2020년도 이상인 데이터를 생성했으니, 해당 데이터를 삭제하는 쿼리문을 작성해보자.

DELETE FROM salaries
WHERE yearID >= 2020

 

 역시나 주의할 점은 UPDATE처럼 WHERE 절에 조건이 없다면 데이터베이스의 모든 행이 삭제된다는 점이다. 잘못해서 홀라당 날려버리는 일이 없도록 조심하자.

 



반응형