본문 바로가기
💿DBMS/오라클

[20210531] DB, SQL 기초, DQL

by 캔 2021. 5. 31.

데이터베이스에는 계층형, 관계형, 객체 관계형, 문서형 등 다양한 형태가 있다. 그러나 그중에서 가장 많이 사용되는 것은 관계형 데이터베이스(Relational Database)이며 관계형 DB를 관리하는 프로그램을 RDBMS(Relational DataBase Management Sytem)이라고 한다. RDBMS에는 MySQL, MSSQL, 오라클(Oracle), MariaDB 등이 있다.

이 카테고리에서는 카테고리 명칭에서 알 수 있듯이 오라클 데이터베이스를 사용하여 DBMS를 다루는 방법에 대해서 알아보고자 한다. SQL문의 사용법은 DBMS마다 대부분 동일하나 조금씩 다른 부분이 있을 수 있으니 참고하길 바란다.

SQL도 일종의 언어이기 때문에 주석문이 존재한다. SQL에서 '--'는 한 줄 주석 시작, '/*'과 '*/'은 블록 주석의 끝을 나타낸다.

--한 줄 주석

/*
블록 주석
*/

데이터베이스를 다루기 위해서는 데이터베이스에 관한 언어를 알아야 한다. DB 언어는 다음과 같다.

1. DQL(Data Query Language): 데이터 조회 언어
   - SELECT: 데이터베이스에서 데이터를 검색해서 사용자가 원하는 데이터를 확인 및 사용할 수 있다.

2. DML(Data Manpulation Language): 데이터 조작 언어
   - INSERT, ALTER, DROP, TRUNCATE: 데이터베이스의 테이블에 새로운 행의 삽입, 수정, 삭제를 위한 명령어

3. DDL(Data Definition Language): 데이터 정의 언어
   - CREATE, VIEW, DROP, TRUNCATE: 데이터베이스에서 테이블의 생성, 변경, 삭제 등을 수행하는 명령어
   테이블 뷰, 유저, 시퀀스 동의어

4. DCL(Data Control Language): 데이터 제어 언어
   - GRANT, REVOKE: 데이터베이스에 접속하는 사용자에게 데이터베이스와 그 안의 구조에 대한 액세스 권한을 부여 또는 제거

5. TCL(Transaction Control Language): 트랜잭션(데이터 수행 처리 단위) 제어 언어
   - COMMIT, SAVEPOINT, ROLLBACK: 확정, 어느 시점의 데이터 저장, 되돌리기를 위한 명령어

 

1. 데이터 조회 언어(Data Query Language) - SELECT

   기본 문법: SELECT 칼럼명 FROM 테이블명 WHERE 조건;

칼럼명에 해당하는 칼럼(열)을 테이블명에 해당하는 테이블에서 조회 또는 가져오는 명령어이다. SQL에서 명령어 단위가 끝난 후에는 ';'(세미콜론)을 붙여서 명령어의 끝을 알려주어야 한다.

칼럼명은 일반적인 산술 연산(숫자형은 +, -, *, /, 날짜형은 +, -)이 가능하며, AS 구문으로 별칭(Alias)을 만들 수 있다.

   예: SELECT 칼럼명 AS 별칭 FROM 테이블명 WHERE 조건;

SELECT문을 사용하면 조건에 해당하는 자료들(혹은 열들)을 모두 가져온다. 만약 중복되지 않는 자료를 가져오기 위해서는 DISTINCT라는 키워드를 사용하면 된다.

   예: SELECT DISTINCT 칼럼명 FROM 테이블명 WHERE 조건;

DISTINCT를 사용하지 않으면 기본적으로 조건에 해당하는 모든 자료를 가져온다. 이는 DISTINCT 키워드 대신 ALL 키워드를 사용한 것과 같다.

  예: SELECT ALL 칼럼명 FROM 테이블명 WHERE 조건;

조건이 두 개 이상일 때는 AND나 OR 연산자를 사용하면 된다.

   예: SELECT 칼럼명 FROM 테이블명 WHERE 조건1 AND 조건2;

   예: SELECT 칼럼명 FROM 테이블명 WHERE 조건1 OR 조건2;

위 두 SELECT문이 '~사이의 수/날짜'나 '~중에 하나'를 뜻하는 조건일 경우, BETEEN~AND~, IN() 구문을 사용할 수 있다.

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 BETWEEN 숫자/날짜1 AND 숫자/날짜2;

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 IN(값1, 값2);

오라클 DB에서 문자열은 '(작은따옴표)로 감싼다.(큰따옴표가 아님에 주의)

문자열 중 일부가 일치하는 자료를 검색할 때는 LIKE와 와일드 문자를 사용한다.

%-여러 문자를 의미

_ - 한 문자를 의미

칼럼의 자료 중 세 번째 문자가 'A'인 자료를 찾는다면 다음과 같다.

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 LIKE '__A%';(언더바가 두 개이므로 두 글자 다음 글자가 A이고 A 뒤에 문자 여러 개가 있는 자료를 찾는다.)

만약 와일드 문자가 아니라 '%'와 '_'를 자료형에서 찾으려면 ESCAPE 키워드를 사용하면 된다.

다음과 같이 ESCAPE '\'을 붙여주면 LIKE 문에서 '\' 이후의 글자를 문자 '%'나 '_'로 인식하게 된다.

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 LIKE '_\_A\%%' ESCAPE '\';(첫 번째 문자 뒤에 '_a%'가 들어가 있고 뒤에 다른 문자열이 붙는 자료를 찾는다.)

NULL 값이거나 NULL이 아닌 자료를 찾을 경우 다음과 같다.

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 IS NULL;

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 IS NOT NULL;

조건식에서 논리 연산자 AND, OR, NOT이 사용 가능하다.

AND는 위에서 BETWEEN 조건1 AND 조건2와 같이 조건과 조건 사이에 사용한다.

OR도 마찬가지이며, NOT은 연산자 앞에 사용하여 부정 연산을 시행해준다.

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 NOT BETWEEN 조건1 AND 조건 2;

   예: SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 NOT IN('값1', '값2');

특정 필드(칼럼)의 자료의 크기 순으로 정렬하기 위해서는 ORDER BY 구문을 사용하며 ASC와 DESC 옵션이 있다. 기본값은 오름차순 ASC이며, 생략이 가능하다.

   예: SELECT 칼럼명 FROM 테이블명 ORDER BY 칼럼명 ASC;

   예: SELECT 칼럼명 FROM 테이블명 ORDER BY 칼럼명 DESC;

ORDER BY는 칼럼명 대신 별칭(Alias)도 사용 가능하다.

NULL 값을 먼저 출력하려면 NULLS FIRST, 마지막에 출력하려면 NULLS LAST 키워드를 사용하면 된다.

   예: SELECT 칼럼명 FROM 테이블명 ORDER BY 칼럼명 ASC NULLS FIRST;

   예: SELECT 칼럼명 FROM 테이블명 ORDER BY 칼럼명 ASC NULLS LAST;