Seung's Learning Record

[SQL] DML 구문 본문

프로그래밍/SQL

[SQL] DML 구문

70_0ewd 2024. 2. 20. 00:54

SQL에는 DML, DDL, DCL, TCL구문으로 분류된다.

  • DML 구문
    - 데이터 조작 언어 
    - 테이블의 행에 사용하는 구문이므로 테이블 정의가 선행되어야 함
    - SELECT, INSERT, UPDATE, DELETE가 여기에 속함
    - ROLLBACK, COMMIT 가능

  • DDL 구문
    - 데이터 정의 언어
    - 데이터 베이스 개체(데이터베이스, 테이블, 뷰, 인덱스)를 생성, 삭제, 변경
    - CREATE, DROP, ALTER가 여기에 속함
    - ROLLBACK, COMMIT 불가능

  • DCL 구문
    - 데이터 제어 언어
    - 사용자에게 어떠한 권한을 부여하거나 빼앗을 때 사용
    - GRANT, REVOKE
    - DDL구문과 마찬가지로 ROLLBACK, COMMIT 불가능

  • TCL 구문
    - 트랜잭션 제어 언어
    - 데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는데 사용
    - COMMIT, ROLLBACK, SAVEPOINT가 여기에 속함

DML 구문

SELECT

테이블에서 원하는 데이터를 추출해내는 구문

SELECT select_expr
	[FROM tabel_references]
    	[WHERE where_condition]
    	[GROUP BY{col_name | expr | position}]
    	[HAVING where_condition]
    	[ORDER BY {col_name | expr | position}]
  • select_expr : 테이블에서 추출을 원하는 컬럼
                           여러개를 원할 시에 콤마로 구분하며 출력하고 싶은 순서대로 작성
                           테이블의 전체 컬럼 출력을 원할 시에는 * 입력
                           DISTINCT 명령어를 컬럼명 앞에 붙이면 중복 제외
  • FROM 절 : 데이터를 추출해 오고자 하는 테이블 지정
  • WHERE 절 : 특정한 조건을 충족하는 데이터를 조회하고자 할 때 사용
//조건 연산자
WHERE Populatoin < 80000000;	

//관계연산자(AND,OR,NOT 등)
WHERE Populatoin < 80000000 AND Population > 70000000;	

//범위 검색 BETWEEN AND
WHERE Population BETWEEN 70000000 AND 80000000;

//비교 연산자 = 
WHERE CountryCode = 'KOR';	

//이산적인 값 검색 IN
WHERE Name IN('Seoul','NEW YORK', 'TOKYO');
WHERE CountryCode IN('KOR','JPN');

//문자열 검색 LIKE
WHERE CountryCode LIKE'KO_';	//_는 하나의 문자만 매칭
WHERE Name LIKE 'S %';	//%는 여러개의 문자 매

//서브 쿼리(쿼리 내부에 또다른 쿼리)
WHERE CountryCode = (	
	SELECT CountryCode
	FROM city
	WHERE Name = 'Seoul');

//서브 쿼리의 결과 중 하나라도 만족하면 출력 ANY, SOME
WHERE CountryCode > ANY (	
	SELECT CountryCode
	FROM city
	WHERE Name = 'S %');
                        
//서브 쿼리의 결과를 모두 만족하면 출력 ALL
WHERE CountryCode > ALL (	
	SELECT CountryCode
	FROM city
	WHERE Name = 'S %');
  • GROUP BY 절 : 그룹으로 묶어주는 역할이며 집계 함수와 함께 사용
    • AVG(), MIN(), MAX(), COUNT(), COUNT(DISTINCT), STDEV(), VARIANCE()
    • AS를 통해 별칭 지정 가능
    • 동시에 여러 컬럼을 지정하여서 그룹화 가능
SELECT CountryCode, MAX(Population) AS Max_Popu
FROM city
GROUP BY CountryCode
  • HAVING 절 : GROUP BY절에 대한 조건 제한. 따라서 무조건 GROUP BY 뒤에 나와야 함.
  • ORDER BY 절 : 결과가 출력되는 순서를 조절
                               기본적으로는 오름차순, DESC 입력 시에 내림차순 정렬
                               여러개의 순서 정렬 혼합 가능
  • LIMIT : 출력 개수를 제한하여 상위 n개만 출력 (ex. LIMIT 10)

INSERT

테이블에 데이터를 삽입하는 구문

INSERT INTO 테이블명 VALUES (값1, 값2, ...);
INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES (값1, 값2);
INSERT INTO 테이블명 SELECT * FROM 다른 테이블명;

컬럼명 미지정 시, VALUE 다음에 나오는 값들의 순서 및 개수는 테이블에 정의된 컬럼의 순서 및 개수와 동일해야 한다.
SELECT문을 사용하여 INSERT 할 경우에는 두 테이블의 형태가 같아야 한다.


UPDATE

기존에 입력되어 있는 값을 변경하는 구문

UPDATE 테이블명 SET 수정할 컬럼 = 변경할 데이터
WHERE 변경 조건;

이때 WHERE절을 생략할 경우, 테이브르이 전체 행의 내용이 변경되니 주의하자.


DELETE

행 단위로 데이터를 삭제하는 구문

DELETE FROM 테이블명 
WHERE 삭제컬럼 조건;

UPDATE와 마찬가지로 WHERE절을 생략할 경우, 모든 값이 날라가니 주의하자. 또한 데이터가 지워진다해서 테이블의 용량 자체가 줄어들지 않는 다는점을 기억해두자.