CHAPTER 03. 검색문(SELECT)

starlikedh
|2021. 3. 5. 15:54

 단순 검색

테이블에 있는 데이터를 검색하기 위한 명령어가 SELECT 이며 형식은 아래와 같다.

SELECT [DISTINCT] column-commalist
FROM table-names
[WHERE predicate]
[GROUP BY column-commalist [HAVING predicate]]
[ORDER BY column-commalist]

- 테이블 내의 모든 정보 검색 : SELECT * 를 통한 확인
- 특정 열의 내용 검색 : 검색하고자 하는 열이 테이블 내의 특정 열일 경우 필요한 열의 이름을 SELECT문에 나열

SELECT stu_no, stu_name
FROM student;

- 중복 행 제거 : SELECT 문 뒤에 DISTINCT를 사용하면  검색 할 때 중복되는 값이 제거되어 검색
DISTINCT 다음에 여러 열을 기술할 경우 기술된 열의 값을 모두 비교하여 중복 행을 제거하게 됨
- 수식을 포함한 검색 : 검색할 열에 값을 변형하여 수식을 포함한 값을 검색할 수 있음

SELECT stu_no, sub_no, enr_grade, enr_grade+10
FROM enrol;

- 결과 열에 별칭(ALIAS) 부여하기 : 테이블 선언 시 부여했던 열의 이름은 열의 의미나 특징을 축약하여 표현하게 됨.
경우에 따라 사용자가 이해하기 어려울 수 있으니 이런 경우 AS를 이용하여 열의 이름을 바꾸어 검색 가능.

SELECT stu_no as ID, stu_name as name
FROM student;

- 연결 연산자 : 2개 이상의 열을 합쳐서 검색할 수 있으며 이때 연결연산자 || 를 사용하면 된다.

SELECT stu_dept || ',' || stu_name || '입니다' as 학과성명
FROM student;

 조건 검색

- 테이블의 데이터 중 특정 조건에 맞는 행을 검색하고자 할 때 WHERE절을 이용한다.

SELECT stu_name, stu_dept, stu_grade, stu_class
FROM student
WHERE stu_dept = '컴퓨터정보';

- 논리연산자 : WHERE 절에서 논리연산자 NOT, AND, OR를 사용하여 여러 개의 조건을 결합하여 표현 가능
- 범위 조건 : 특정 데이터의 범위를 검색하고자 한다면 WHERE절에 BETWEEN ~ AND 를 사용하여 검색  가능

SELECT *
FROM student
WHERE stu_weight between 60 and 70; 

- LIKE를 이용한 검색 : 사용자가 어떤 열의 데이터 값 중 일부만 알고 있을 경우 그 내용을 이용하여 검색하는 방법

SELECT stu_no, stu_name, stu_dept
FROM student
WHERE stu_name like '김%';

- 널 값 처리 : 관계형 데이터베이스는 테이블 내에 널 값이 존재할 수 있음.
널 값은 비교연산자와 비교될 수 없으며, 그 연산의 결과는 참이 될 수 없음.

- IN : 여러 개 조건 값 중 하나만 만족하는 행을 처리할 경우 사용

 검색 결과의 정렬

- 정렬은 데이터를 어떤 기준에 의해 나열하는 것을 의미함.
- 나열 방법에는 오름차순과 내림차순 2가지 방법이 존재하고,
특정 열을 기준으로 정렬하고자 할 경우 ORDER BY 절 사용.

- SELECT 문의 마지막에 위치하며 오름차순으로 정렬할 경우 생략 가능하며,
내림차순으로 정렬할 경우에는 반드시 DESCENDING 또는 DESC 명시

SELECT stu_no, stu_name
FROM student
ORDER BY stu_no;

- 별칭이 붙어 있는 열을 기준으로 정렬하는 질의문

 함수란?

- C언어에서처럼 하나 이상의 인수를 전달받아 처리한 결과값을 함수의 이름에 실어 반환해 주는 프로그램 모듈
- 각 행에 대해 처리된 결과를 반환하는 함수와 데이터 그룹에 대한 처리 결과를 반환하는 그룹함수로 구분

 단일행 함수

- 숫자 함수 
ROUND(인수1, 인수2) : 인수1의 값을 인수2의 자리로 반올림하여 반환
TRUNC(인수1, 인수2) : 인수1의 값을 인수2의 자리까지 유지하고, 나머지는 절삭하여 반환
MOD(인수1, 인수2) : 인수1의 값을 인수2의 값으로 나눈 나머지를 반환
ABS(인수) :  인수의 절대값을 반환
FLOOR(인수) : 소수점 이하 자리를 절삭하여 반환

- 문자 함수
LOWER(인수) : 인수를 모두 소문자로 변환하여 반환
UPPER(인수) : 인수를 모두 대문자로 변환하여 반환
INITCAP(인수) : 인수 단어의 첫 번째 문자를 대문자로 변환하여 반환
CONCAT(인수1, 인수2) : 두 개의 문자 인수를 연결하여 반환
SUBSTR(인수1, 인수2, 인수3, 인수4) : 문자열 인수1의 일부분을 추출하여 반환
LENGTH(인수) : 문자 인수의 길이를 반환
INSTR(인수1, 인수2, 인수3, 인수4) : 문자인수 중 특정 문자의 절대위치를 반환
LPAD(인수1, 인수2, 인수3) : 자릿수를 지정하고 빈 공간을 특정 문자로 왼쪽부터 채워서 문자열을 반환
RPAD(인수1, 인수2, 인수3) : 자릿수를 지정하고 빈 공간을 특정 문자로 오른쪽부터 채워서 문자열을 반환

- 날짜 함수
SYSDATE : 시스템의 오늘 날짜를 반환
날짜 연산 : 날짜에 +, - 연산을 함
MONTHS_BETWEEN(인수1, 인수2) : 인수1, 인수2의 날수 차이를 반환
NEXT_DAY(인수1, 인수2) : 인수1에서 가장 가짜운 인수2의 요일을 반환
ADD_MONTH(인수1, 인수2) : 인수1에 인수2의 달을 더하여 반환
LAST_DAY(인수1) : 인수1이 속한 달의 마지막 날을 반환
ROUND(인수1, 인수2) : 인수1의 값을 인수2를 기준으로 반올림하여 반환
TRUNC(인수1, 인수2) : 인수1의 값을 인수2를 기준으로 절사하여 반환

- 변환 함수 : 오라클에서도 c언어처럼 데이터의 형을 변환할 수 있음
TO_NUMBER : 문자 데이터를 숫자 데이터로 변환
TO_ DATE : 문자 데이터를 날짜 데이터로 변환
TO_CHAR : 숫자, 날짜 데이터를 문자 데이터로 변환
- NULL 값과 관계가 있는 함수
NVL(인수1, 인수2) : 인수 값이 NULL인지 체크하여 연산이 가능한 값으로 변환하여 반환하는 함수
인수1의 값이 널이면 인수2의 값으로 인수1을 변환하여 반환

NVL2(인수1, 인수2, 인수3) : 인수1이 널 값이 아니면 인수2의 값을 반환해주고 널 값이면 인수3의 값을 반환해주는 함수
NULLIF(인수1, 인수2) : 인수1과 인수2의 값을 비교하여 그 값이 같으면 NULL을 아니면 인수1의 값을 반환하는 함수

CASE : 조건에 따른 처리가 가능하게 함
DECODE : 주로 보고서를 작성하는 데 사용되는 함수

 그룹 함수

- 여러 행에 대한 연산 즉 평균, 개수 등의 결과값을 반환하는 함수
- GROUP BY 절에 정의된  열을 기준으로 행을  그룹화시켜 그룹함수를 적용하면 각 그룹에 하나의 결과를 반환하며,
만약 GROUP BY절을 사용하지 않으면  하나의 결과값을 반환

COUNT() : 조건을 만족하는 열의 데이터 값들의 개수를 반환
COUNT(*) : 모든 행의 개수를 반환
SUM() : 조건을 만족하는 열의 데이터 값들의 합을 반환
AVG() : 조건을 만족하는 열의 데이터 값들의 평균을 반환
MAX() : 조건을 만족하는 열의 데이터 값들 중 최대값을 반환
MIN() : 조건을 만족하는 열의 데이터 값들 중 최소값을 반환
STDDEV() : 조건을 만족하는 열의 데이터 값들의 표준편차를 반환
VARIANCE() : 조건을 만족하는 열의 데이터 값들의 분산 값을 반환
- 단일행을 이용한 GROUP BY절
: 주로  GROUP BY절은 그룹을 지어 그룹별 대표 값을 반환하는데 주로 사용되며,
결과에 대한 순서화를 하기 위해 ORDER BY 절을 사용할 수 있다. 

- 다중열 GROUP BY절
: GROUP BY절에 두 개  이상의 열이 기술될 수 있으며,
이 경우 GROUP BY 절의 왼쪽에서 오른쪽 열의 순으로 
행을 그룹지어 처리

- HAVING절 사용
: 그룹함수를 적용한 결과에 다시 조건을 부여할 때는 HAVING절을 사용