STUDY/SQL

[SQL] 2. SQL 기본 및 활용 - Chapter 1. SQL 기본 ① 관계형 데이터베이스. SELECT, 함수

JUNGY00N 2023. 3. 11. 13:18

2023 유선배 SQL개발자(SQLD) 과외노트를 읽고 내용을 정리한 글입니다. 

 

2023 유선배 SQL개발자(SQLD) 과외노트 - YES24

SQL Server 분야 베스트 1위!핵심만 쏙쏙 담은 알찬 수험서! SD에듀가 가장 효율적·효과적인 합격의 길을 제안합니다.유튜브 선생님에게 배우는 유·선·배, 『유선배 SQL개발자 과외노트』와 함께 20

www.yes24.com


관계형 데이터베이스 개요

관계형 데이터베이스 (RDB, Relational Database)

: 관계형 데이터 모델에 기초를 둔 데이터베이스 

  • 관계형 데이터베이스에서의 설계는 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작된다. 

 

RDBMS (Relational Database Management System)

: RDB를 관리 ㆍ감독하기 위한 시스템 

  • Oracle, SQL Server(MSSQL), MySQL, MariaDB, PostgreSQL 등

 

TABLE

  • 관계형 데이터베이스에서는 모든 데이터를 2차원 테이블 형태로 표현한다.
  • 테이블은 관계형 데이터베이스의 기본 단위이고, 일반적으로 데이터베이스는 여러 개의 테이블로 구성된다.
  • 엑셀 작성 시 흔히 이용하는 표 형식을 떠올리면 된다. 
  • 세로 열을 Column(컬럼)이라고 한다.
  • 가로 행을 Row(로우)라고 한다.
  • 데이터를 저장하는 주된 목적은 데이터를 활용하는 데에 있고 우리는 그것을 테이블 형태로 조회하고 변경하고 삭제할 수 있다. 

SQL (Structured Auery Language)

: 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어 


SELECT문 

SELECT

: 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어 

SELECT 컬럼1, 컬럼2, . . .
FROM 테이블 WHERE 컬럼1 = '아무개';
  • 컬럼을 따로 명시하지 않고 * 을 쓰면 전체 컬럼이 조회된다.
  • 조회되는 컬럼의 순서는 테이블의 컬럼 순서와 동일하다.
  • 별도의 WHERE절이 없으면 테이블의 전체 Row가 조회된다.
SELECT * FROM 테이블;
  • 테이블명이나 컬럼명에 별도의 별칭을 붙여줄 수 있다. 
  • 여러 개의 테이블을 JOIN하거나 서브쿼리가 있을 때 컬럼명 앞에 테이블명을 같이 명시해야 하는 경우 테이블명은 비교적 길기 때문에 짧게 줄여 쓰기 위해 별칭을 붙여준다. 
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;

산술 연산자

: 수학에서 사용하는 사칙연산의 기능을 가진 연산자 

연산자 의미 우선순위
( ) 괄호로 우선순위를 조정할 수 있음  1
* 곱하기 2
/ 나누기
+ 더하기 3
- 빼기

합성 연산자 ( || )

: 문자와 문자를 연결할 때 사용하는 연산자

SELECT 'S'||'Q'||'L'||'개'||'발'||'자'|| AS SQLD
FROM DUAL;

▽ 결과

  SQLD
1 SQL개발자

함수

문자함수

CHR(ASCII 코드)

: ASCII 코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지 알려주는 함수

- ASCII 코드는 총 128개의 문자를 숫자로 표현할 수 있도록 정의해 놓은 코드 

SELECT CHR(65) FROM DUAL;

▽ 결과

  CHR(65)
1 A

LOWER(문자열)

: 문자열을 소문자로 변환해주는 함수

SELECT LOWER('JENNIE') FROM DUAL;

▽ 결과

  LOWER('JENNIE')
1 jennie

UPPER(문자열)

: 문자열을 대문자로 변환해주는 함수

SELECT UPPER('JENNIE') FROM DUAL;

▽ 결과

  UPPER('JENNIE')
1 JENNIE

LTRIM(문자열 [,특정문자]) 

[ ]는 옵션

: 특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거하고, 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않으면 멈춘다. 

- MSSQL의 경우 공백 제거만 가능하다.

SELECT LTRIM('         JENNIE') FROM DUAL;

SELECT LTRIM('블랙핑크', '블랙') FROM DUAL;

▽ 결과

  LTRIM('        JENNIE')
1 JENNIE
  LTRIM('블랙핑크','블랙')
1 핑크

RTRIM(문자열 [,특정문자]) 

[ ]는 옵션

: 특정 문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백을 제거하고, 명시해주었을 경우 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않으면 멈춘다. 

- MSSQL의 경우 공백 제거만 가능하다.

SELECT RTRIM('JENNIE     ') FROM DUAL;

SELECT RTRIM('블랙핑크', '핑크') FROM DUAL;

▽ 결과

  RTRIM('JENNIE    ')
1 JENNIE
  RTRIM('블랙핑크','핑크')
1 블랙

TRIM([위치] [특정문자] [FROM] 문자열) 

[ ]는 옵션

: 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거하고, 그렇지 않을 경우 문자열을 위치(LEADING or TRAILING or BOTH)로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춘다. LTRIM, RTRIM과 달리 특정 문자는 한 글자씩만 지정할 수 있다. 

- MSSQL의 경우 공백 제거만 가능하다.

SELECT TRIM('   JENNIE     ') FROM DUAL;

SELECT TRIM(LEADING '블' FROM '블랙핑크') FROM DUAL;

SELECT TRIM(TRAILING '크' FROM '블랙핑크') FROM DUAL;

▽ 결과

  TRIM('   JENNIE    ')
1 JENNIE
  TRIM(LEADING '블' FROM '블랙핑크')
1 랙핑크
  TRIM(TRAILING '크' FROM '블랙핑크')
1 블랙핑

SUBSTR(문자열, 시작점 [,길이] ) 

[ ]는 옵션

: 문자열의 원하는 부분만 잘라서 변환해주는 함수

- 길이를 명시하지 않았을 경우 문자열의 시작점부터 문자열의 끝까지 반환된다.

- MSSQL의 경우 SUBSTRING(문자열)

SELECT SUBSTR('블랙핑크제니',3,2) FROM DUAL;

SELECT SUBSTR('블랙핑크제니',3,4) FROM DUAL;

▽ 결과

  SUBSTR('블랙핑크제니',3,2)
1 핑크
  SUBSTR('블랙핑크제니',3,4)
1 핑크제니

LENGTH(문자열)

[ ]는 옵션

: 문자열의 길이를 반환해주는 함수

- MSSQL의 경우 LEN(문자열)

SELECT LENGTH('JENNIE') FROM DUAL;

▽ 결과

  LENGTH('JENNIE')
1 6

REPLACE(문자열, 변경 전 문자열 [,변경 후 문자열])

[ ]는 옵션

: 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수

- 변경 후 문자열을 명시해주지 않으면 문자열에서 변경 전 문자열을 제거한다.

SELECT REPLACE('블랙핑크제니','제니','지수') FROM DUAL;

SELECT REPLACE('블랙핑크제니','블랙') FROM DUAL

▽ 결과

  REPLACE('블랙핑크제니','제니','지수')
1 블랙핑크지수
  REPLACE('블랙핑크제니','블랙')
1 핑크제니

숫자 함수

ABS(수)

: 수의 절대값을 반환해주는 함수

SELECT ABS(-1) FROM DUAL;

▽ 결과

  ABS(-1)
1 1

 

SIGN(수)

: 수의 부호를 반환해주는 함수

- 양수이면 1, 음수이면 -1, 0이면 0을 반환

SELECT SIIGN(-7) FROM DUAL;

▽ 결과

  SIGN(-7)
1 -1

ROUND(수 [,자릿수])

[ ]는 옵션

: 수를 지정된 소수점 자릿수까지 반올림하여 반환해주는 함수

- 자릿수를 명시하지 않았을 경우 기본값은 0이며 반올림된 정수로 반환하고 자릿수가 음수일 경우 지정된 정수부를 반올림하여 반환

SELECT ROUND(163.76,1) FROM DUAL;

SELECT ROUND(163.76,-2) FROM DUAL;

▽ 결과

  ROUND(163.76,1)
1 163.8
  ROUND(163.76,-2)
1 200

TRUNC(수 [,자릿수])

[ ]는 옵션

: 수를 지정된 소수점 버림하여 반환해주는 함수

- 자릿수를 명시하지 않았을 경우 기본값은 0이며 버림된 정수로 반환하고 자릿수가 음수일 경우 지정된 정수부에서 버림하여 반환한다.

SELECT TRUNC(54.29,1) FROM DUAL;

SELECT TRUNC(54.29,-1) FROM DUAL;

▽ 결과

  TRUNC(54.29,1)
1 54.2
  TRUNC(54.29,-1)
1 50

CEIL(수)

: 소수점 이하의 수를 올림한 정수를 반환해주는 함수

- MSSQL의 경우 CEILING(문자열)

SELECT CEIL(72.86) FROM DUAL;

SELECT CEIL(-33.4) FROM DUAL;

▽ 결과

  CEIL(72.86)
1 73
  CEIL(-33.4)
1 -33

FLOOR(수)

: 소수점 이하의 수를 버림한 정수를 반환해주는 함수

SELECT FLOOR(22.3) FROM DUAL;

SELECT FLOOR(-22.3) FROM DUAL;

▽ 결과

  FLOOR(22.3)
1 22
  FLOOR(-22.3)
1 -23

MOD(수1, 수2)

: 수1을 수2로 나눈 나머지를 반환해주는 함수

SELECT MOD(15,7) FROM DUAL;

SELECT MOD(15,-4) FROM DUAL;

▽ 결과

  MOD(15,7)
1 1
  MOD(-15.-4)
1 -3

날짜 함수

SYSDATE

: 현재의 연, 월, 시, 분, 초를 반환해주는 함수

- MSSQL의 경우 GETDATE()

SELECT SYSDATE FROM DUAL;

▽ 결과

  SYSDATE
1 2023-03-11 12:57:08

EXTRACT(특정 단위 FROM 날짜 데이터)

: 날짜 데이터에서 특정 단위 (YEAR, DAY, HOUR, MINUTE, SECONDE)만을 출력해서 반환해주는 함수

- MSSQL의 경우 DATEPART(특정 단위, 날짜 데이터) 

SELECT 
EXTRACT ( YEAR FROM SYSDATE ) AS YEAR
EXTRACT ( MONTH FROM SYSDATE ) AS MONTH
EXTRACT ( DAY FROM SYSDATE ) AS DAY
FROM DUAL;

▽ 결과

  YEAR MONTH DAY
1 2023 3 11

ADD_MONTHS(날짜 데이터, 특정 개월 수)

: 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환해주는 함수

- 날짜의 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 반환된다. 

- MSSQL의 경우 DATEADD(특정 개월 수, 날짜 데이터)

SELECT 
ADD_MONTHS(TO_DATE('2023-12-31','YYYY-MM-DD'),-1) AS PREV_MONTH
ADD_MONTHS(TO_DATE('2023-12-31','YYYY-MM-DD'),1) AS NEXT_MONTH
FROM DUAL;

▽ 결과

  PREV_MONTH NEXT_MONTH
1 2023-11-30 00:00:00 2024-01-31 00:00:00

변환 함수

명시적 형변환과 암시적 형변환

  • 명시적 형변환
    : 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄 
    • TO_NUMBER(문자열) : 문자열 -> 숫자형
    • TO_CHAR(수 or 날짜 [,포맷]) : 수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환해주는 함수 
    • TO_DATE(문자열, 포맷) : 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수 
  • 암시적 형변환 
    : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함 

NULL 관련 함수

NVL(인수1, 인수2)

: 인수1의 값이 NULL일 경우 인수2를 반환하고, NULL이 아닐 경우 인수1을 반환해주는 함수

- MSSQL의 경우 ISNULL(인수1, 인수2)

NULLIF(인수1, 인수2)

: 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환해주는 함수 

COALESCE(인수1, 인수2, 인수3 ...)

: NULL이 아닌 최초의 인수를 반환해주는 함수 


CASE

- 함수와 성격이 같기는 하지만 표현 방식이 함수라기보다는 구문에 가깝다고 할 수 있다. 

- 문장으로는 '~이면 ~이고, ~이면 ~이다' 식으로 표현되는 구문이고, 필요에 따라 각 CASE를 여러 개로 늘릴 수도 있다.

- 같은 기능을 하는 함수로는 Oracle의 DECODE 함수가 있다.