본문 바로가기
SQLD

[SQLD] SQL 기본 쿼리문 정리

by DUSTIN KANG 2023. 11. 19.

SQL 실행 순서

 

DDL

데이터 구조를 정의하는 명령어로 데이터베이스 객체를 생성하거나 삭제, 변경할 때 사용하는 명령어입니다.

DDL 명령어는 시스템이나 클라이언트에 큰 영향을 미칠 수 있기 때문에 신중하게 사용하는 것이 좋습니다.

신중한 작업이니 만큼 데이터베이스 관리자나 설계자가 사용하는 명령어입니다. 

데이터베이스 객체
Table, TableSpace, View, index, Procedure, Function

 

테이블을 생성하는 명령어

  • `CREATE TABLE '생성할 테이블'` 라는 명령어로 테이블을 생성할 수 있다.
  • `AUTO INCREMENT`를 부여하면 고유 번호를 생성할 수 있다.
  • 객체를 의미할 수 있는 적절한 이름을 사용해야 하며 단수형으로 작성해야 한다.
  • 제약조건으로 기본키를 설정하는 경우 `CONSTRAINT 테이블_PK PRIMARY KEY (column1, column2)`로도 설정 가능하다.
  • 외래키는  `Foreign Key (this_column) references other_table(other_id)`으로 설정한다.
CREATE TABLE Product (
	PROD_ID VARCHAR(10) PRIMARY KEY,
	PROD_NM VARCHAR(100) NOT NULL,
	REG_DT DATE NOT NULL,
	REGR_NO INT(10) NULL,
);

 

테이블을 삭제하는 명령어

  • `DROP TABLE '삭제할 테이블'`이라는 명령어로 테이블을 삭제할 수 있다.
  • 만약 테이블 내 모든 데이터를 제거하고 싶은 경우 `TRUNCATE TABLE '테이블 명'`으로  테이블의 초기 상태를 만든다.
  • `DROP TABLE IF EXISTS 테이블`은 테이블이 있는 경우 제거하는 명령어입니다.
DROP TABLE Product;
# TRUNCATE TABLE Product;

테이블을 변경하는 명령어

  • `ALTER TABLE 테이블'`이라는 명령어로 테이블 내부에 컬럼을 수정하는 등 변경 작업을 할 수 있다.
  • 테이블의 이름을 변경하고 싶은 경우 `RENAME '테이블명' TO '새 테이블 명'`으로 변경할 수 있다.
ALTER TABLE Product ADD (PROD_DT DATE NOT NULL);
ALTER TABLE Product DROP COLUMN PROD_DT;

# ALTER TABLE Product MODIFY (REGR_NO NOT NULL); -- 컬럼 속성 변경
# ALTER TABLE Product SET UNUSED COLUMN REGR_NO; -- 컬럼 사용 안함 처리
# ALTER TABLE Product DROP UNUSED COLUMNS; -- 컬럼 사용 안함 처리된 컬럼 제거
SQL Server에서는 `ALTER TABLE 테이블 명 MODIFY COUMN ();` 대신에 `ALTER TABLE 테이블명 ALTER COLUMN ();`을 사용합니다.
추가적으로 `RENAME`도 `SP_RENAME 변경전, 변경후`로 사용합니다.
더보기

CHAR과 VARCHAR의 차이

CREATE TABLE suppliers
( supplier_id int NOT NULL,
  supplier_name char(50) NOT NULL,
  contact_name char(50)
);

 

상위 코드를 보면, 데이터베이스에서 문자열을 저장할 때 CHAR()라는 데이터 유형을 사용한다는 것을 알 수 있습니다. 여기서 CHAR과 VARCHAR랑 차이가 있는데요. 결론적으로 차이는 다음과 같습니다. 결론적으로 두 데이터 유형은 할당 공간의 차이라 볼 수 있습니다.

  • CHAR : 고정된 길이의 문자열을 저장, 남은 부분은 공백으로 채워집니다. CHAR(5) -> '더스틴 '
  • VARCHAR : 가변 길이의 문자열을 저장, 필요한 만큼만 동적으로 할당됩니다. VARCHAR(5) -> '더스틴'
DDL에 관해 Oracle과 SQL Server 차이점이 존재합니다.
- Oracle은 DDL 수행 후 AUTO COMMIT 됩니다.
- SQL Server는 DDL 수행후 AUTO COMMIT이 수행되지 않습니다.

DML

데이터베이스 내부 스키마에 데이터를 입력, 수정, 삭제 하거나 조회하기 위해 사용되는 명령어 입니다.

주로 데이터를 조작할 때 사용하는 명령어로 질의 방법에 따라 성능의 차이가 있습니다.

데이터를 추가하는 명령어

  • `INSERT` 명령어를 사용해 테이블에 데이터(Record)를 삽입할 수 있습니다.
  • 데이터를 삽입할 때 `DATE` 자료형을 숫자형식으로 입력하면 유료가 발생합니다.
  • `VALUES (), (), ();`를 통해 여러개의 데이터를 삽입할 수 있습니다.
INSERT INTO course
	VALUES (1, '데이터베이스', 4000000, '2012-05-05 00:00:00');
    
## 다른 방법도 존재합니다.
INSERT INTO course (course_id, course_name, course_cost)
	VALUES (2, '인공지능', 25000000);

 

데이터를 조회하는 명령어

  • `SELECT` 명령어를 사용해 테이블에 저장된 값을 조회할 수 있습니다.
  • 항상 `WHERE` 이나 `Limit`등을 사용해 제한을 걸어야 합니다. 이유는 DB에 큰 부하를 방지하기 위해(쿼리가 느려질 수 있음)입니다.
SELECT *
FROM Course
WHERE course_name like '데%'
  • ALIAS : `AS`는 컬럼이나 테이블의 별칭을 지을 때 사용합니다. 단, `GROUP BY`절에서는 사용할 수 없습니다. 
  • ORDER BY : 데이터를 정렬할 때 사용하는 명령어로 `DESC`(내림차순), `ASC`(오름차순)으로 정렬할 수 있습니다.
  • GROUP BY : 해당 컬럼이 같은 것끼리 묶어주는 명령어 입니다. 만약 집계 함수를 사용하면 묶은 데이터의 값을 반환할 수 있습니다.
  • 집계 함수 :  SUM(), MAX(), MIN(), AVG(), COUNT(), `COUNT()`는 널 값을 제외하고 계산합니다.
  • 수학 함수 : ABS(), CELING(), FLOOR(), TRUNCATE(수, 자릿수), ROUND(수, 자릿수)
  • 문자열 함수 : REPEAT(문자열, 반복 횟수), REVERSE(문자열), SUBSTR(문자열, 인덱스), SUBSTR(문자열, 인덱스, 길이)
  • 날짜 함수 : NOW(), CURDATE, CURTIME(), YEAR(), MONTH()
  • 유니크한 값 출력 : `DISTINCT()`
  • LIKE : 특정 값과 비슷한 값을 필터링할 때 사용니다. (역개념 : NOT LIKE)
  • IN : 리스트의 값들과 일치하는지 필터링할 때 사용합니다.
  • IS NULL : 특정 값이 널 값인지 확인합니다. (비교연산자는 사용할 수 없습니다.)

💡 WHERE 과 HAVING 의 차이
- WHERE : 그룹화 하기 전에 필터링을 적용
- HAVING : 그룹화 한 결과에 대해 필터링을 적용

데이터를 삭제하는 명령어

테이블의 특정한 조건으로 데이터를 삭제하는 명령어입니다.

DELETE FROM course WHERE course_id = 1;
비슷하게 모든 데이터를 삭제할 수 있는 명령어로 `TRUNCATE`가 있습니다.
`TRUNCATE`는 `DELETE` 명령어에 비해 속도가 빠른편입니다. 하지만 자동으로 AUTO COMMIT이 되기 때문에 복구가 불가능하니 조심히 사용해야 합니다. 

데이터를 변경하는 명령어

테이블의 특정한 조건의 데이터를 수정하는 명령어입니다.

UPDATE course
	SET course_cost = 1000000
	WHERE course_name = '인공지능';

DCL

객체들을 사용하기 위해 권한을 주고 회수하는 명령어입니다. 

  • 데이터 권한 부여 : GRANT 권한 ON 테이블 TO 사용자
  • 데이터 권한 제거 : REVOKE 권한 ON 테이블 FROM 사용자
  • 트랜잭션 제어(TCL) : `COMMIT` `ROLLBACK` `SAVEPOINT`
GRANT SELECT, INSERT, DELETE, UPDATE ON Course TO userA;
REVOKE SELECT, INSERT, DELETE, UPDATE ON Course FROM userA;

 

UNIQUE, PRIMARY KEY, FOREIGN KEY, DEFAULT, DATE를 활용한 명령어들도 존재하니 한번씩 사용해봅시다.
참고자료(W3 School SQL) >

 


오늘도 저의 포스트를 읽어주셔서 감사합니다. ☕️

설명이 부족하거나 이해하기 어렵거나 잘못된 부분이 있으면 부담없이 댓글로 남겨주시면 감사하겠습니다.