Devops 엔지니어 솔렐레 IT

SQL 기초 - SELECT(조회), ORDER BY(정렬), WHERE(조건) 본문

Devops 엔지니어가 알려주는 IT 기본 지식/데이터베이스 (Database)

SQL 기초 - SELECT(조회), ORDER BY(정렬), WHERE(조건)

솔렐레_ 2019. 9. 22. 09:00


안녕하세요. 솔렐레입니다.
이번 포스팅은 SQL(Structured Query Language) 구문에 대해서 진행해보려고 합니다. 많은 DBMS 중 저는 ORACLE을 기준으로 설명드리도록 하겠습니다. 요즘은 프로그램 개발뿐만 아니라 빅데이터나 데이터 분석 등 많은 분야에서 사용하면서 더욱 관심이 높이진 것 같습니다. 이에 따라 기본적으로 많이 사용하는 구문들에 대해서 정리하도록 하겠습니다. 그럼 시작해보겠습니다.


[DATABASE 기본 내용]
데이터베이스란 연관된 정보를 한 곳에 저장함으로써 구조적인 방식으로 관리되는 데이터의 집합을 의미합니다. 데이터베이스의 관리 시스템은 DBMS라 불리며 대표적으로 ORACLE, MySQL, MsSQL 등이 있습니다. SQL을 사용하기 위해서는 테이블, 열(컬럼), 스키마, 행(로우), 기본 키의 개념을 가지고 있어야 합니다. 테이블은 구조화된 데이터 시트라고 생각하면 이해하기 쉬울 것 같습니다. 컬럼은 테이블을 구성하는 각각의 정보를 의미합니다. 스키마는 데이터가 저장하는 방식을 정의할 수 있으며 논리적, 물리적으로 특정 정보를 표현하는 논리적인 구조를 말합니다. 테이블의 데이터는 행에 저장이 됩니다. 테이블에는 각 행을 고유하게 하는 열이 존재합니다.

[SQL의 종류]

데이터 정의어
(DDL: Data Definition Language)

CREATE 데이터베이스 테이블 생성
DROP 데이터베이스 테이블 삭제
ALTER 기존 데이터베이스 테이블 재정의
데이터 조작어
(DML: Data Manipulation Language)
INSERT 테이블에 데이터 삽입
DELETE 테이블 데이터 삭제
UPDATE 기존 테이블 데이터 수정
SELECT 테이블 내 데이터 조회
데이터 제어어
(DCL: Data Control Language)
GRANT 테이블에 권한 부여
REVOKE 부여한 권한 취소/회수


[SQL 기초 - 지정한 열 가져오기: SELECT, DISTINCT, AS]

-- 데이터 조회
SELECT 열 이름 FROM 테이블명;
SELECT 열 이름1, 열 이름2 FROM 테이블명;
SELECT * FROM 테이블명;

--조회 데이터 열 중복 삭제
SELECT DISTINCT 열 이름 FROM 테이블 명;
SELECT DISTINCT 열 이름1, 열 이름2 FROM 테이블 명;

-- 열 이름 별명
SELECT 열 이름 AS 새로운 열 이름 FROM 테이블 명;

SELECT 문은 SQL에서 가장 기초가 되는 문법입니다. 테이블 내에서 원하는 데이터를 가져올 때 사용하며 열 이름을 하나만 입력하면 해당하는 컬럼만 출력하게 됩니다. 열 이름을 다중으로 입력하면 여러 개의 컬럼을 가져올 수 있으며 '*' 을 입력했을 때는 모든 열에 있는 데이터를 가져올 수 있습니다.

열 이름 앞에 DISTINCT 키워드를 붙일 경우, 중복 없이 값을 출력할 수 있습니다. 여러 개의 열 이름을 적으면 집합처럼 중복된 값이 제거됩니다. 또 AS 키워드를 사용하게 되면 별칭이 지정되어 새로운 열 이름을 정의하여 사용할 수 있습니다. AS 키워드를 사용하면 인지하기 쉬운 값으로 치환하여 사용하기 때문에 직관적으로 표현이 가능합니다.

[SQL 기초 - 한 가지 열로 데이터 정렬하기: ORDER BY]

-- 데이터 정렬
SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 이름1;
SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 위치1;

SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 이름1, 열 이름2;
SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 위치1, 열 위치2;

-- 데이터 오름차순, 내림차순 정렬
SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 이름1 ASC;
SELECT 열 이름1, 열 이름2 FROM 테이블명 ORDER BY 열 이름1 DESC;

정렬 없이 SELECT 구문만 사용하게 되면 데이터를 무작위로 출력하게 됩니다. 특정 열을 기준으로 정렬할 때는 위와 같이 ORDER BY 구문을 이용합니다. 열 이름이나 위치를 지정하게 되면 해당 컬럼 기준으로 정렬하게 됩니다. 열 이름을 다수로 입력한다면 우선순위 순으로 정렬이 되며 기본적으로 오름차순 정렬이 되게 됩니다. 열 이름 뒤에 ASC(Ascending)를 붙이거나 아무것도 쓰지 않는다면 되면 오름차순으로 정렬되며 DESC(Decending)를 붙이면 내림차순으로 정렬이 됩니다.

[SQL 기초 - 특정한 조건을 만족하는 데이터 추출: WHERE, IN, LIKE]

-- 데이터 필터링
SELECT * FROM 열 이름1, 열 이름2 FROM 테이블명 WHERE 조건절;
SELECT * FROM 열 이름1, 열 이름2 FROM 테이블명 WHERE 조건절1 AND 조건절2;
SELECT * FROM 열 이름1, 열 이름2 FROM 테이블명 WHERE 조건절1 OR 조건절2;

-- OR 조건 포함/미포함 필터링
SELECT * FROM 열 이름1, 열 이름2 FROM 테이블명 WHERE 비교할 열 이름 IN(조건1, 조건2);
SELECT * FROM 열 이름1, 열 이름2 FROM 테이블명 WHERE 비교할 열 이름 NOT IN(조건1, 조건2);

-- 데이터 문자열 검색
SELECT * FROM 열 이름 FROM 테이블명 WHERE 열 이름 LIKE '%찾고 싶은 문자';
SELECT * FROM 열 이름 FROM 테이블명 WHERE 열 이름 LIKE '찾고 싶은 문자%';
SELECT * FROM 열 이름 FROM 테이블명 WHERE 열 이름 LIKE '%찾고 싶은 문자%';
SELECT * FROM 열 이름 FROM 테이블명 WHERE 열 이름 NOT LIKE '%원하지 않는 문자%';

WHERE 조건절은 엑셀의 필터 기능과 마찬가지로 원하는 조건을 기준으로 원하는 데이터만 추출할 수 있습니다. 예를 들어 WHERE BRAND_NM = 'NIKE'라고 했을 경우 브랜드 이름이 나이키인 데이터 로우만 출력이 됩니다. 조건절의 내용 중 AND 연산자를 이용하면 두 가지 조건을 모두 만족하는 데이터만 출력하게 됩니다. 조건을 추가하고 싶으면 계속해서 AND 연산자를 추가하면서 진행하면 됩니다. OR 연산자는 적어도 하나의 조건만 만족하더라도 결과를 출력이 됩니다.

IN 연산자는 여러 번 사용하는 OR 연산자를 하나로 묶은 것입니다. 특정 테이블로부터 특정한 조건들 안에 속하는 모든 데이터를 추출하게 됩니다. NOT IN은 반대로 해당하는 특정한 조건들 안에 속하지 않는 모든 데이터들이 출력됩니다.

LIKE 연산자를 사용할 경우에는 앞, 뒤에 오는 문자열이 정확하지 않을 경우 사용할 수 있습니다. '%'를 사용하면 모든 문자를 의미하여 앞뒤에 오는 단어는 모르지만 특정 문자열은 알고 있을 때 필터링하여 사용할 수 있습니다. '%' 대신 '_'를 이용하면 앞뒤 한 개의 단어를 모를 경우 사용할 수 있습니다.

[SQL 사용 시 유용한 팁]
1. SQL은 소문자와 대문자를 구분하지 않습니다.
2. SQL은 공백을 무시합니다. 따라서 복잡한 SQL을 작성할 경우 여러 줄로 나누어 쿼리를 작성하는 것이 좋습니다.
3. SQL의 키워드를 열 이름으로 바로 사용하면 에러가 발생합니다. 예를 들어 SELECT와 같은 키워드를 열 이름으로 사용하게 되면 오류가 발생하므로 유의해야 합니다.
4. SQL 문장은 세미콜론(;)을 사용하여 종결합니다.


지금까지 SQL에서 가장 많이 사용하는 SELECT, ORDER BY, WHERE에 대해서 알아보았습니다. SQL에서 가장 중요한 뼈대는 [SELECT * FROM 테이블명 WHERE 조건절]입니다. 모든 SQL이 해당 뼈대를 토대로 만들어지게 되어있으므로 어려운 SQL을 해석할 때 위의 구문을 파악해서 쿼리문을 읽는다면 많은 도움이 될 것입니다. 이어지는 SQL문은 조건을 그룹화할 수 있는 구문, 여러 테이블을 합쳐서 사용하는 구문과 데이터와 테이블에 대한 조작할 수 있는 구문을 정리하도록 하겠습니다. 감사합니다. :)

데이터베이스 테이블
Comments