-
12일차 - SQL (데이터 조작, DML) (1)CS지식/데이터베이스 2021. 5. 12. 20:47
오늘은 저번 시간에 이어 SQL의 종류 중 하나인 데이터조작기능을 하는 DML에 대해 배웠다.
오늘은 DML 중 데이터 검색을 하는 SELECT에 대해서만 배웠는데 내용이 상당히 많아 이해하는데 시간이 좀 걸렸다.
1. SQL 데이터 조작 기능
SQL에서 데이터를 조작하기 위해서는 DML을 사용하면 된다.
데이터 조작 기능으로는 데이터 검색, 새로운 데이터 삽입, 데이터 수정, 데이터 삭제가 있다.
오늘은 데이터 검색을 하는 SELECT에 대해 자세히 알아보고자 한다.
2. 데이터 검색 : SELECT문
(1) 기본검색
먼저, 기본적으로 사용되는 데이터 검색에 대해 알아보자.
SELECT [ALL|DISTINCT]속성_리스트 FROM 테이블_리스트 ;
SELECT키워드와 함께 검색하고 싶은 속성의 이름을 나열하고 FROM키워드 뒤에 검색하고 싶은 속성이 있는 테이블의 이름을 나열하면 된다.
[ ] 안에 있는 것은 추가적으로 옵션을 주고 싶을 때 사용하는 것이다.
ALL: 결과 테이블이 튜플의 중복을 허용하도록 지정하여 중복된 값이여도 결과 테이블에 표현되는 것이다.
DISTINCT: 결과 테이블이 튜플의 중복을 허용되지않도록 지정하는 것이다.
이외에 속성_리스트 뒤에 AS키워드와 표현하고싶은 속성이름을 사용해서 결과 테이블에서 속성의 이름을 바꾸어 출력이 가능하다.
(2) 산술식을 이용한 검색
SELECT 키워드와 함께 산술식을 제시하는 것이다.
산술식은 속성의 이름과 +, -, *, / 등의 산술연산자와 상수로 구성될 수 있다.
예를 들어, 금액이라는 속성을 곱하기 5해서 결과 테이블에 보여주고 싶으면
SELECT 금액 * 5 FROM ...
이라고 하면된다.
여기서 기존에 존재하는 테이블의 속성의 값이 변경되는 것이 아니라 결과 테이블에서만 계산된 결과값이 출력되는 것이다.
(3) 조건검색
조건검색은 우리가 원하는 데이터만 가져오고싶을 때 조건을 걸어서 조건을 만족하는 데이터만 검색하는 것이다.
SELCECT [ALL|DISTINCT]속성_리스트 FROM 테이블_리스트 WHERE 조건;
WHERE키워드와 함께 비교연산자나 논리연산자를 이용해서 조건을 제시한다.
(4) LIKE를 이용한 검색
LIKE키워드를 이용해 부분적으로 일치하는 데이터 검색을 할 수 있다.
단, 문자열을 이용하는 조건에만 LIKE키워드가 사용가능하다.
LIKE와 함께 사용하는 것은 *와 ?가 있다.
*는 0개 이상의 문자를 의미하며 문자의 내용과 개수는 상관 없다.
?는 한개의 문자를 의미하며 문자의 내용은 상관 없다.
(*, ?의 기능은 MS SQL기준이므로 MYSQL이나 ORACLE은 다를 수 있다.!!)
(5) NULL을 이용한 검색
NULL을 이용해서 해당 속성의 값이 NULL인지 아닌지를 물어볼 수 있다.
IS NULL키워드를 이용해 검색 조건에서 특정 속성의 값이 NULL 값인지를 비교할 수 있고
IS NOT NULL키워드를 이용하면 특정 속성의 값이 NULL값이 아닌지를 비교가능하다.
(6) 정렬 검색
ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력할 수 있다.
SELCECT [ALL|DISTINCT]속성_리스트 FROM 테이블_리스트 WHERE 조건 ORDER BY 속성리스트 [ASC|DESC] ;
ASC는 오름차순이고 DESC는 내림차순을 의미한다. 기본값은 오름차순으로 설정되어 있다.
여러 기준에 따라 정렬하고자 한다면 정렬 기준이 되는 속성을 차례대로 제시하면 된다.
(7) 집계함수를 이용한 검색
특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계함수를 이용해서 결과 테이블에 나타낼 수 있다.
예를 들어, 금액 속성의 값의 총합을 나타내고 싶을 때 집계함수를 이용하면 된다.
집계함수는 개수, 합계, 평균, 최대값, 최솟값의 계산 기능을 제공하는 것이다.
집계함수를 이용할 때 주의해야할 사항은
집계함수는 NULL인 속성 값은 제외하고 계산하고 WHERE절에서는 사용할 수 없고 SELECT절이나 HAVING정에서만 사용가능하다.
집계함수는 다음과 같다.
COUNT 속성 값의 개수 모든 데이터 MAX 속성 값의 최댓값 MIN 속성 값의 최솟값 SUM 속성 값의 합계 숫자 데이터만 사용 가능 AVG 속성 값의 평균 (8) 그룹별 검색
GROUP BY 키워드를 이용해 특정 속성의 값이 같은 튜플을 모아 그룹을 만들어 그룹별로 검색이 가능하다.
GROUP BY키워드와 함께 그룹을 나누는 기준이 되는 속성을 지정하고 HAVING키워드를 함께 이용해서 그룹에 대한 조건을 지정할 수 있다.
그룹을 나누는 기준이 되는 속성은 SELECT절에도 작성해주어야 한다.
예제를 보면서 조금 더 이해를 해보자.
제품테이블에서 제품은 3개 이상 제조한 제품업체별로 제품의 갯수와 제품 중 가장 비싼 단가를 검색하시오.
SELECT 제조업체, COUNT(*), MAX(단가) FROM 제품 GROUP BY 제조업체 HAVING COUNT(*) >=3;
검색하고자 하는 것이 제품의 갯수와 가장 비싼 단가이므로 SELECT에 COUNT(*)와 MAX(단가)를 작성한다.
그리고 제품업체별로 출력해야하므로 GROUP BY를 이용하고 제품업체중 3개 이상 제조한 곳을 원하므로
HAVING을 통해 조건을 걸어준다.
'CS지식 > 데이터베이스' 카테고리의 다른 글
데이터베이스란 무엇인가(With 기초가 튼튼한 데이터베이스) (0) 2021.05.23 13일차 - SQL (데이터 조작, DML) (2) (0) 2021.05.15 11일차 - 데이터베이스 언어 SQL (0) 2021.05.09 10일차 - 관계 데이터 연산 (0) 2021.05.06 9일차 - 정규형과 정규화 예제 (0) 2021.05.03