[DB] SQL 기본 : 데이터 변경(1)

나무나무·2025년 1월 4일

DB

목록 보기
5/9

INSERT

  • 테이블에 데이터 삽입 시 사용하는 구문
  • 데이터 삽입 시에는 순서와 데이터 유형에 맞춰서 테이블에 데이터를 삽입해 주어야 한다.
  • NULL을 허용하지 않는 column 값일 경우 데이터를 생략하면 오류가 난다. default값이 지정되어 있는 Column 값은 삽입할 값을 생략할 경우 미리 저장해둔defult값이 삽입된다.
  • NULL을 허용하지 않는 기본키(Primary Key)의 경우 반드시 값을 삽입해주어야 하며, 중복을 허용하지 않기 때문에 이미 존재하는 값 또한 삽입할 수 없다.
  • 만약 중복되도 오류를 발생시키지 않고 넘어가고 싶은 경우 INSERT구문에 IGNORE 구문만 넣어주면 실제로 값은 입력되지 않지만 오류는 무시하고 넘어갈 수 있게 됨.

예제 코드 ▼

-- VALUES에 값을 저장할 때는 usertbl(userID, NAME, birthYear, addr)의 개수와 항목에 맞춰서 값 저장
INSERT INTO usertbl(userID, NAME, birthYear, addr) 
VALUES ('hong123', '홍길동', 2015, '서울');

-- NAME 도 NULL을 허용하지 않는 column이기 때문에 NAME 필드 값을 입력하지  않으면 이 역시 에러가 발생하게 된다.  
INSERT INTO usertbl(userID, birthYear, addr) 
VALUES ('lee123', 2015, '강원');

-- usertbl 테이블에 여러개의 행 삽입
INSERT INTO usertbl(userID, NAME, birthYear, addr)
VALUES ('LIM123', '임꺽정', 1977, '경기' ),
		 ('moon123', '문인수', 2000 , '서울');
-- 두 개의 괄호 작성, 각 괄호 하나 당 하나의 행 내용이 됨. 

-- 테이블 복사
-- 서브 쿼리를 이용해 usertbl 모든 내용을 가져와서 usertbl_copy에 복사할 것이다.
-- 그러나 아래의 실행  결과로는 기본키가 존재하지 않게 나온다. 
CREATE TABLE usertbl_copy(
	SELECT *
	FROM usertbl
);

-- 테이블 복사 / 구조만 복사함. 
-- 아래의 결과는 데이터는 없고 구조만 복사함
CREATE TABLE usertbl_copy(
	SELECT *
	FROM usertbl
	WHERE 1 = 0
);

UPDATE

기존에 테이블에 입력되어 있는 값을 수정할 때 사용하는 구문
예제 코드 ▼

 -- hong123의 id를 가진 경우 이름을 고길동으로 변경
 -- WHERE 절을 사용하지 않는 경우 모든 테이블의 이름이 고길동으로 바뀌게 됨
 UPDATE usertbl
 SET NAME = '고길동'
 WHERE userID = 'hong123';

-- 그럼 모든 값을 다 동일하게 바꿀 일이 뭐가 있을까?
-- 모든 사원의 급여를 10%씩 인상시켜줄게!
UPDATE emp_salary
SET salary = salary * 1.1;

DELETE

행 단위로 데이터를 삭제할 때 사용하는 구문
WHERE절을 주로 함께 사용하며, 생략할 경우 테이블의 모든 행들이 삭제되기 때문에 경고문이 출력되게 된다.
예제 코드 ▼

-- WHERE  없으면 테이블 모든 행을 지움
-- 실무에서는 DELETE 쿼리를 자주 사용하지는 않음. -> 먼저 내가 지우려는 데이터가 맞는지 확인한 후 지우는걸 추천
DELETE FROM usertbl
WHERE userID LIKE 'hong123';

-- mobile1 값이 NULL인 상위 2명을 삭제
DELETE FROM usertbl
WHERE mobile1 IS NULL
LIMIT 2; 

-- WHERE 없이 쿼리 실행 시 테이블 전체 삭제
DELETE FROM emp_salary;

-- 확인해보면 테이블 내 데이터들이 전부 삭제된 것을 확인할 수 있다.
SELECT * FROM emp_salary;

조건부 데이터 입력, 변경

  • 기본 키가 중복되서 입력될 경우 데이터는 입력되지 않음.
  • 중복이 되도 오류 발생하지 않고 넘어가려면 INSERT 구문에 IGNORE 구문만 넣어주면 오류를 무시하고 넘어감(데이터는 입력이 안됨)
  • 중복되지 않으면 INSERT 실행, 중복되면 UPDATE 실행 → INSERT INTO ~ ON

Commit & Roll Back

  • 쿼리문 작성 후, 바로 DB에 확정하지 않고 버퍼에 잠깐 저장해둠. 이를 COMMIT을 해주어야 DB에 적용이 됨. → 우리가 쓰는 DB는 Autocommit이 적용되어 있음(SELECT @@autocommit / 해당 결과가 1이면 활성화, 0이면 비활성화)
  • COMMIT을 실행하지 않으면 ROLLBACK으로 실행 취소하기가 가능함.
  • AUTOCOMMIT이 활성화되어 있는 경우 ROLLBACK으로 실행 취소가 불가능함.
  • AUTOCOMMIT이 비활성화되어 있는 경우 변경사항 확정을 위해선 COMMIT 실행해야 함.

SUBQUERY : 쿼리문 내 쿼리문

  • 예제코드
    -- 가장 큰 키, 가장 작은 키의 이름과 키
    SELECT NAME AS '이름',
    		 height AS '키'
    FROM usertbl
    WHERE height = (SELECT MIN(height) FROM usertbl) 
    	OR height = (SELECT MAX(height) FROM usertbl);
    -- main query 실행 전에 sub query가 먼저 실행된 뒤, 결과 값을 main에서 사용
    
  • 실행 순서 : FROM(어디서 데이터를 가져올 지) → WHERE(조건 실행, 일부 데이터 제외) → GROUP BY(그룹으로 묶어줌) → HAVING(집계 함수 결과에 대한 조건 부여) → SELECTORDER BY(정렬) → LIMIT
  • 작성 순서 : SELECT (DISTINCT) → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
profile
백엔드 개발자 나무입니다

0개의 댓글