02 SELECT문
1. SELECT
저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어
SELECT * FROM 테이블;
위와 같이 컬럼을 따로 명시하지 않고 *를 쓰면 전체 컬럼이 조회되며 조회되는 컬럼의 순서는 테이블의 컬럼 순서와 동일하다.
별도의 WHERE 절이 없으면 테이블의 전체 ROW가 조회된다.
SELECT BAND.BAND_NAME, BAND_MEMBER.MEMBER_NAME FROM BAND,BAND_MEMBER WHERE BAND.BAND_CODE = BAND_MEMBER.BAND_CODE;
↓
SELECT B.BAND_NAME, BM.MEMBER_NAME FROM BAND B, BAND MEMBER BM WHERE B.BAND_CODE = BM.BAND_CODE;
FROM 절에서 BAND 테이블의 별칭을 B로, BAND_MEMBER 테이블의 별칭을 BM으로 변경한 예시이다.
테이블명이나 컬럼명에 별도의 별칭(Alias)을 붙일 수 있다.
여러 개의 테이블을 JOIN 하거나 서브쿼리가 있을 때 컬럼명 앞에 테이블명을 같이 명시해야 하는 경우 테이블명은 비교적 길기 때문에 줄여쓰기 위함이다.
2. 산술 연산자
수학에서 사용하는 사칙연산의 기능을 가진 연산자이다
연산자 | 의미 | 우선순위 |
() | 괄호로 우선순위를 조정할 수 있음 | 1 |
* | 곱하기 | 2 |
/ | 나누기(0으로 나눌 경우 에러 발생) | 2 |
+ | 더하기 | 3 |
- | 빼기 | 3 |
% (SQL Server) | 나머지(0으로 나눌 경우 NULL 반환) | 3 |
SELECT 10+5, 10-5, 10*5, 10/5 FROM DUAL;
SELECT * FROM SAMPLE;
SELECT C0L1+C0L2 AS A, C0L1-C0L2 AS s, COL1*COL2 AS M, C0L1/C0L2 AS D FROM SAMPLE;
SELECT COL1+COL2*COL1 AS RI, (COL1+COL2)*COL1 AS R2 FROM SAMPLE;
3. 합성 연산자
문자와 문자를 연결할 때 사용하는 연산자
SELECT 'S' || 'Q' || 'L' || '개' || '발' || '자' AS SQLD FROM DUAL;
SELECT * FROM SAMPLE;
SELECT COL1 || ' ' || 'SQLD' || ' ' || COL2 AS RESULT FROM SAMPLE;
03 함수
1. 문자 함수
1) CHR(ASCII 코드)
CHR 함수는 ASCII 코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지를 알려주는 함수
SELECT CHR(65) FROM DUAL;
2) LOWER(문자열)
문자열을 소문자로 변환해주는 함수
SELECT LOWER('JENNIE') FROM DUAL;
3) UPPER(문자열)
문자열을 대문자로 변환해주는 함수
SELECT UPPER('jennie') FROM DUAL;
4) LTRIM(문자열 [,특정 문자])
특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거하고, 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다.
SELECT LTRIM(' JENNIE') FROM DUAL;
SELECT LTRIM( '블랙핑크', '블랙' ) FROM DUAL;
5) RTRIM(문자열 [,특정 문자])
특정 문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백을 제거하고, 명시해주었을 경우 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다.
SELECT RTRIM('JENNIE ') FROM DUAL;
SELECT RTRIM( '블랙핑크', '핑크') FROM DUAL;
6) TRIM([위치] [특정 문자] [FROM] 문자열 )
옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거하고, 그렇지 않을 경우 문자열을 위치(LEADING or TRAILING or BOTH)로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춘다. LTRIM, RTRIM과는 달리 특정 문자는 한 글자만 지정할 수 있다.
위치 옵션
- BOTH (기본값): 문자열의 양쪽에서 특정 문자를 제거
- LEADING: 문자열의 왼쪽에서 특정 문자를 제거
- TRAILING: 문자열의 오른쪽에서 특정 문자를 제거
SELECT TRIM(' JENNIE ') FROM DUAL;
SELECT TRIM(LEADING '블' FROM '블랙핑크') FROM DUAL;
SELECT TRIM(TRAILING '크' FROM '블랙핑크') FROM DUAL;
7) SUBSTR(문자열, 시작점 [,길이])
문자열의 원하는 부분만 잘라서 반환해주는 함수이다. 길이를 명시하지 않았을 경우 문자열의 시작점부터 문자열의 끝까지 반환된다.
SELECT SUBSTR('블랙핑크제니', 3, 2)FROM DUAL;
SELECT SUBSTR('블랙핑크제니', 3, 4)FROM DUAL;
8) LENGTH(문자열)
문자열의 길이를 반환해주는 함수이다.
SELECT LENGTH('JENNIE') FROM DUAL;
SELECT LENGTH( '블랙핑크') FROM DUAL;
9) REPLACE(문자열, 변경 전 문자열 [,변경 후 문자열])
문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수
변경 후 문자열을 명시해 주지 않으면 문자열에서 변경 전 문자열을 제거한다
SELECT REPLACE('블랙핑크제니', '제니', '지수') FROM DUAL;
SELECT REPLACE('블랙핑크제니', '블랙') FROM DUAL;
10) LPAD(문자열 길이, 문자)
문자열이 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채우는 함수
SELECT LPAD('JENNIE', 10, 'V) FROM DUAL;
2. 숫자 함수
1) ABS(수)
수의 절댓값을 반환해주는 함수
SELECT ABS(-1) FROM DUAL;
2) SIGN(수)
수의 부호를 반환해주는 함수
양수이면 1, 음수이면 -1, 0이면 0을 반환한다.
SELECT SIGN(-7) FROM DUAL;
SELECT SIGN(7) FROM DUAL;
3) ROUND(수 [자릿수])
수를 지정된 소수점 자릿수까지 반올림하여 반환해 주는 함수
자릿수를 명시하지 않았을 경우 기본값은 0이며 반올림된 정수로 반환하고 자릿수가 음수일 경우 지정된 정수부를 반올림하여 반환한다.
SELECT ROUND(163.76, 1) FROM DUAL;
SELECT ROUND(163.76, -2) FROM DUAL;
4) TRUNC(수 [,자릿수])
수를 지정된 소수점 자릿수까지 버림하여 반환해 주는 함수
자릿수를 명시하지 않았을 경우 기본값은 0이며 버림된 정수로 반환하고 자릿수가 음수일 경우 지정된 정수부에서 버림하여 반환한다.
SELECT TRUNC(54.29, 1) FROM DUAL;
SELECT TRUNC(54.29, -1) FROM DUAL;
5) CEIL(수)
소수점 이하의 수를 올림한 정수를 반환해 주는 함수
SELECT CEIL(72.86) FROM DUAL;
SELECT CEIL(-33.4) FROM DUAL;
6) FLOOR(수)
소수점 이하의 수를 버림한 정수를 반환해 주는 함수
SELECT FLOOR(22.3) FROM DUAL;
SELECT FLOOR(-22.3) FROM DUAL;
7) MOD(수1, 수2)
수1을 수2로 나눈 나머지를 반환해주는 함수
단, 수2가 0일 경우 수1을 반환한다.
SELECT MOD(15, 7) FROM DUAL;
SELECT MOD(15, -4) FROM DUAL;
3. 날짜 함수
1) SYSDATE
현재의 연, 월, 일, 시, 분, 초를 반환해주는 함수
SELECT SYSDATE FROM DUAL;
2) EXTRACT(특정 단위 FROM 날짜 데이터)
날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만을 출력해서 반환해주는 함수
SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR,EXTRACT(MONTH FROM SYSDATE) AS MONTH, EXTRACT(DAY FROM SYSDATE) AS DAY FROM DUAL;
3) ADD_MONTHS(날짜 데이터, 특정 개월 수)
날짜 데이터에서 특정 개월 수를 더한 날짜를 반환해주는 함수
날짜의 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 반환된다.
SELECT
ADD_MONTHS(TO_DATE('2021-12-31','YYYY-MM-DD'), -1) AS PREV_MONTH,
ADD_MONTHS(TO_DATE('2021-12-31','YYYY-MM-DD'), 1) AS NEXT_MONTH
FROM DUAL;
위의 쿼리는 TO_DATE 함수를 사용하여 문자열을 날짜로 변환하고, ADD_MONTHS 함수를 사용하여 이전 달과 다음 달을 계산
이전 달을 계산할 때는 -1을 사용하고, 다음 달을 계산할 때는 1을 사용
4. 변환 함수
1) 명시적 형변환과 암시적 형변환
데이터베이스에서 데이터 유형에 대한 형변환을 할 수 있는 방법은 두 가지가 있다.
- 명시적 형변환 : 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄
- 암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함
위의 예시처럼, 조건절에서 VARCHAR 유형의 BIRTHDAY 컬럼을 숫자와 비교할 경우, 데이터베이스는 오류를 내지 않고 내부적으로 BIRTHDAY 컬럼을 NUMBER형으로 변환하게 되는데 이럴 때 쓰이는 것이 암시적 형변환이다.
하지만 이 경우, 성능 저하를 불러올 수도 있고 때에 따라서는 에러를 내는 경우도 있기 때문에 되도록 명시적 형변환을 사용하는 것이 좋다.
2) 명시적 형변환에 쓰이는 함수
TO_NUMBER(문자열)
문자열을 숫자형으로 변환해주는 함수
TO_CHAR(수 or 날짜 [, 포맷])
수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환해주는 함수
현재 날짜와 시간을 'YYYYMMDD HH24MISS' 형식의 문자열로 변환하여 반환
TO_DATE(문자열, 포맷)
포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수
문자열 '20210602'를 날짜 형식으로 변환
5. NULL 관련 함수
1) NVL(인수1, 인수2)
인수1의 값이 NULL일 경우 인수2를 반환하고 NULL이 아닐 경우 인수1을 반환해주는 함수
→ REVIEW_SCORE(컬럼) 데이터가 NULL일 경우 0을 반환하고 NULL이 아닐 경우 REVIEW.SCORE 값을 반환
2) NULLF(인수1, 인수2)
인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환해주는 함수
→ REVIEW_SCORE(컬럼) 데이터가 0일 경우 NULL을 반환하고 0이 아닐 경우 REVIEW_ SCORE 값을 반환
3) COALESCE(인수1, 인수2, 인수3 …)
NULL이 아닌 최초의 인수를 반환해주는 함수
4) NVL2(인수1, 인수2, 인수3)
인수1 이 NULL이 아닌 경우 인수2를 반환하고 NULL인 경우 인수3을 반환하는 함수
→ REVIEW_SCORE(컬럼) 데이터가 NULL이 아닐 경우 '리뷰있음을 반환하고 NULL일 경우 '리뷰없음'을 반환
6. CASE
'~이면 ~이고, ~이면 ~이다' 식으로 표현되는 구문
필요에 따라 각 CASE를 여러 개로 늘릴 수도 있다.
SUBWAY_UNE 열의 값에 따라 다른 결과를 반환하는 CASE 문이다.
SUBWAY_UNE 열의 값이
- '1'일 경우에는 'BLUE'가 반환
- '2'일 경우에는 'GREEN'이 반환
- '3'일 경우에는 'ORANGE'가 반환
- 위의 어떤 조건에도 해당하지 않을 경우에는 'GRAY'가 반환
04 WHERE절
SELECT 컬럼명1, 컬럼명2 … FROM 테이블명 WHERE 조건절;
INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문
1. 비교 연산자
2. 부정 비교 연산자
3. SQL 연산자
BETWEEN A AND B
LIKE '비교 문자열'
IN (LIST)
IS NULL
4. 부정 SQL 연산자
5. 논리 연산자
논리 연산자에는 처리 순서가 존재한다.
SQL에 명시된 순서와는 관계없이 () → NOT → AND → OR 순으로 처리
'Study > 데이터베이스' 카테고리의 다른 글
SQL 활용 1 (0) | 2024.05.19 |
---|---|
SQL 기본 3 (0) | 2024.05.09 |
SQL 기본 1 (0) | 2024.04.04 |
데이터 모델링의 이해 3 (0) | 2024.04.04 |
데이터 모델링의 이해 2 (0) | 2024.03.28 |