Data/Sql

[SQLD] SQL 기본 - Select, Where, Group by, Order by, Join, 함수들

재은초 2024. 5. 23. 17:59
반응형

관계형 데이터베이스란?

  • RDB라고 불리는 관계형 데이터베이스는 말 그대로 관계형 데이터 모델에 기초를 둔 데이터베이스이다.
  • 관계형 데이터베이스에서의 설계는 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작된다.
  • RDBMS는 이러한 RDB를 관리 및 감독하기 위한 시스템이다.
  • Oracle, SQL Server(MMSQL), MySQL, MariaDB, PostgreSQL 등이 이에 속한다.

TABLE

  • 관계형 데이터베이스는 모든 데이터를 2차원 테이블 형태로 표현한다.
  • 세로 열을 컬럼(Column)이라고 하고, 가로 행을 로우(Row)라고 한다.
  • 테이블은 관계형 데이터베이스의 기본 단위이고 일반적으로 데이터베이스는 여러 개의 테이블로 구성된다.

SQL

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

 

SELECT 문

  • 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어이다.
  • 컬럼을 따로 명시하지 않고 * 를 쓰면 전체 컬럼이 조회되며 조회되는 컬럼의 순서는 테이블의 컬럼 순서와 동일하다.
  • 별도의 WHERE 절이 없으면 테이블의 전체 Row가 조회된다.
  • 테이블명이나 컬럼명에 별도의 별칭(Alias)을 붙일 수 있다.
  • Alias를 붙을 때는 앞에 AS를 넣어도 되고 넣지 않아도 된다.

산술 연산자

  • 수학에서 사용하는 사칙연산의 기능을 가진 연산자이다.
    • () : 괄호로 우선순위를 조정할 수 있음
    • * : 곱하기
    • / : 나누기, 0으로 나눌 경우 에러 발생
    • + : 더하기
    • - : 빼기
    • % (SQL Server) : 나머지, 0으로 나눌 경우 NULL 반환

합성 연산자

  • || : 문자와 문자를 연결할 때 사용하는 연산자이다.

 

함수

문자 함수

  • CHR(ASCII 코드) : ASCII 코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지 알려주는 함수이다. SQL Server(MSSQL)의 경우 CHAR(ASCII 코드)
  • LOWER(문자열) : 문자열을 소문자로 변환해주는 함수이다.
  • UPPER(문자열) : 문자열을 대문자로 변환해주는 함수이다.
  • LTRIM(문자열 [,특정 문자]) : 특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거하고, 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다. SQL Server(MSSQL)의 경우 공백 제거만 가능
  • RTRIM(문자열 [,특정 문자]) : 특정 문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백을 제거하고, 명시해주었을 경우 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다. SQL Server(MSSQL)의 경우 공백 제거만 가능
  • TRIM([위치][특정 문자] [FROM] 문자열) : 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거하고, 그렇지 않을 경우 문자열을 위치(LEADING/TRAILING/BOTH)로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춘다. LTRIM, RTRIM과 달리 특정 문자는 한 글자만 지정할 수 있다. SQL Server(MSSQL)의 경우 공백 제거만 가능
  • SUBSTR(문자열, 시작점, [,길이]) : 문자열의 원하는 부분만 잘라서 반환해주는 함수이다. 길이를 명시하지 않았을 경우 문자열의 시작점부터 문자열의 끝까지 반환된다. SQL Server(MSSQL)의 경우 SUBSTRING(문자열)
  • LENGTH(문자열) : 문자열의 길이를 반환해주는 함수이다. SQL Server(MSSQL)의 경우 LEN(문자열)
  • REPLACE(문자열, 변경 전 문자열 [, 변경 후 문자열]) : 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수이다. 변경 후 문자열을 명시해주지 않으면 문자열에서 변경 전 문자열을 제거한다.
  • LPAD(문자열, 길이, 문자) : 문자열이 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채우는 함수이다.

숫자 함수

  • ABS(수) : 수의 절댓값을 반환해주는 함수이다.
  • SIGN(수) : 수의 부호를 반환해주는 함수이다. 양수면 1, 음수면 -1, 0이면 0을 반환한다.
  • ROUND(수 [,자릿수]) : 수를 지정된 소수점 자릿수까지 반올림하여 반환해주는 함수이다. 자릿수를 명시하지 않았을 경우 기본값은 0이며 반올림된 정수로 반환한다. 자릿수가 음수일 경우 지정된 정수부를 반올림하여 반환한다.
  • TRUNC(수 [,자릿수]) : 수를 지정된 소수점 자릿수까지 버림하여 반환해주는 함수이다. 자릿수를 명시하지 않았을 경우 기본값은 0이며 버림된 정수로 반환한다. 자릿수가 음수일 경우 지정된 정수부에서 버림하여 반환한다.
  • CEIL(수) : 소수점 이하의 수를 올림한 정수를 반환해주는 함수이다. SQL Server(MSSQL)의 경우 CEILING(문자열)
  • FLOOR(수) : 소수점 이하의 수를 버림한 정수를 반환해주는 함수이다.
  • MOD(수1, 수2) : 수1을 수2로 나눈 나머지를 반환해주는 함수이다. 수2가 0일 경우 수1을 반환한다.

날짜 함수

  • SYSDATE : 현재의 연, 월, 일, 시, 분, 초를 반환해주는 함수이다. SQL Server(MSSQL)의 경우 GETDATE( )
  • EXTRACT(특정 단위 FROM 날짜 데이터) : 날짜 데이터에서 특정 단위만을 출력해서 반환해주는 함수이다. SQL Server(MSSQL)의 경우 DATEPART(특정 단위, 날짜 데이터)
  • ADD_MONTHS(날짜 데이터, 특정 개월 수) : 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환해주는 함수이다. 날짜의 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 반환된다. SQL Server(MSSQL)의 경우 DATEADD(MONTH, 특정 개월 수, 날짜 데이터)

변환 함수

  • 명시적 형변환 : 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타내는 것
  • 암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환하는 것

명시적 형변환에 쓰이는 함수: SQL Server(MSSQL)의 경우 CONVERT나 CAST 함수 사용

  • TO_NUMBER(문자열) : 문자열을 숫자형으로 변환해주는 함수이다.
  • TO_CHAR(수 or 날짜 [, 포맷] : 수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환해주는 함수이다.
  • TO_DATE(문자열, 포맷) : 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수이다.

NULL 관련 함수

  • NVL(인수1, 인수2) : 인수1의 값이 NULL일 경우 인수2를 반환하고 NULL이 아닐 경우 인수1을 반환해주는 함수이다. SQL Server(MSSQL)의 경우 ISNULL(인수1, 인수2)
  • NULLIF(인수1, 인수2) : 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환해주는 함수이다.
  • COALESCE(인수1, 인수2, 인수3 …) : NULL이 아닌 최초의 인수를 반환해주는 함수이다.
  • NVL2(인수1, 인수2, 인수3) : 인수1이 NULL이 아닌 경우 인수2를 반환하고 NULL인 경우 인수3을 반환하는 함수이다.
  • CASE : CASE 문에서는 ELSE 뒤의 값이 DEFAULT 값이 되고 별도의 ELSE가 없을 경우 NULL 값이 DEFAULT 값이 된다. 같은 기능을 하는 함수로는 Oracle의 DECODE 함수가 있다.

 

WHERE 절

  • INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문이다.

비교 연산자

  • = : 같음
  • < : 작음
  • <= : 작거나 같음
  • > : 큼
  • >= : 크거나 같음

부정 비교 연산자

  • != : 같지 않음
  • ^= : 같지 않음
  • <> : 같지 않음
  • not 컬럼명 = : 같지 않음
  • not 컬럼명 > : 크지 않음

SQL 연산자

  • BETWEEN A AND B : A와 B의 사이(A, B 포함)
  • LIKE ‘ 비교 문자열’ : 비교 문자열을 포함. ‘%’는 문자열을 의미, ‘_’는 하나의 문자를 의미. ‘_’ 혹은 ‘%’ 기호가 포함된 문자 검색시 ESCAPE 지정
  • IN (LIST) : LIST 중 하나와 일치
  • IS NULL : NULL 값

부정 SQL 연산자

  • NOT BETWEEN A AND B : A와 B의 사이가 아님(A, B 미포함)
  • NOT IN (LIST) : LIST 중에 일치하는 것이 없음
  • IS NOT NULL : NULL 값이 아님

논리 연산자

  • AND : 모든 조건이 TRUE
  • OR : 하나 이상의 조건이 TRUE
  • NOT : TRUE면 FALSE이고 FALSE이면 TRUE
  • 논리 연산자 처리 순서 : ( ) → NOT → AND → OR

 

GROUP BY 절

  • GROUP BY 절은 데이터를 그룹별로 묶을 수 있도록 해주는 절이다.
  • GROUP BY 뒤에는 그룹핑의 기준이 되는 컬럼이 온다.
  • 컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있다.

집계 함수

  • COUNT(*) : 전체 Row를 Count하여 반환
  • COUNT(컬럼) : 컬럼값이 NULL인 Row를 제외하고 Count하여 반환
  • COUNT(DISTINCT 컬럼) : 컬럼값이 NULL이 아닌 Row에서 중복을 제거한 Count를 반환
  • SUM(컬럼) : 컬럼값들의 합계를 반환
  • AVG(컬럼) : 컬럼값들의 평균을 반환
  • MIN(컬럼) : 컬럼값들의 최솟값을 반환
  • MAX(컬럼) : 컬럼값들의 최댓값을 반환

HAVING 절

  • HAVING 절은 GROUP BY 절을 사용할 때 WHERE 절처럼 사용하는 조건절이다.
  • 주로 데이터를 그룹핑한 후 특정 그룹을 골라낼 때 사용한다.
  • HAVING 절은 논리적으로 GROUP BY 절 이후에 수행되기 때문에 그룹핑 후에 가능한 집계 함수로 조건을 부여할 수 있다.
  • HAVING 절은 논리적으로 SELECT 절 전에 수행되기 때문에 SELECT 절에 명시되지 않은 집계 함수로도 조건을 부여할 수 있다.

 

ORDER BY 절

  • ORDER BY 절은 SELECT 문에서 논리적으로 맨 마지막에 수행된다
  • ORDER BY 절을 사용하여 SELECT한 데이터를 정렬할 수 있다.
  • ORDER BY 절을 따로 명시하지 않으면 데이터는 임의의 순서대로 출력된다.
  • ORDER BY 절 뒤에는 정렬의 기준이 되는 컬럼이 오게 되는데 컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있다.

ORDER BY 절 뒤에 오는 옵션

  • ASC : 오름차순 (옵션 생략 시 ASC가 기본 값)
  • DESC : 내림차순 
  • SELECT 문의 논리적 수행 순서: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY

 

JOIN이란?

  • 데이터베이스에서 조인은 각기 다른 테이블을 한 번에 보여줄 때 쓰는 쿼리이다.

EQUI JOIN

  • Equal(=) 조건으로 JOIN하는 것으로 가장 흔히 볼 수 있는 JOIN 방식이다.

Non EQUI JOIN

  • Equal(=) 조건이 아닌 다른 조건(Between, >, >=, <, <=)으로 JOIN하는 방식이다.

OUTER JOIN

  • 다른 JOIN과 다르게 조건에 만족하지 않는 행들도 출력되는 형태이다.
  • Oracle에서는 모든 행이 출력되는 테이블의 반대편 테이블의 옆에(+) 기호를 붙여 작성한다.

 

STANDARD JOIN

  • SQL 문법에 차이가 너무 클 경우 호환성 이슈가 발생하고 SQL을 사용하는 사람들 입장에서도 효율성이 떨어지기 때문에 표준이 되는 ANSI SQL을 지정하게 되었다.
  • STANDARD JOIN은 ANSI SQL 중 하나이다.

INNER JOIN

  • JOIN 조건에 충족하는 데이터만 출력되는 방식이다.
  • JOIN 조건을 ON 절을 사용하여 작성한다.

OUTER JOIN

  • LEFT OUTER JOIN : SQL에서 왼쪽에 표기된 테이블의 데이터는 무조건 출력되는 JOIN이다. 오른쪽 테이블에 JOIN되는 데이터가 없는 Row들은 오른쪽 테이블 컬럼의 값이 NULL로 출력된다.
  • RIGHT OUTER JOIN : SQL에서 오른쪽에 표기된 테이블의 데이터는 무조건 출력되는 JOIN이다. 왼쪽 테이블에 JOIN되는 데이터가 없는 Row들은 왼쪽 테이블 컬럼의 값이 NULL로 출력된다.
  • FULL OUTER JOIN : 왼쪽, 오른쪽 테이블의 데이터가 모두 출력되는 방식이다. LEFT OUTER JOIN과 RIGHT OUTER JOIN의 (중복값을 제거 한) 합집합이라고 할 수 있다.

NATURAL JOIN

  • A 테이블과 B 테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN되는 방식이다.
  • Oracle에서는 USING 조건절을 이용하여 같은 이름을 가진 컬럼 중 원하는 컬럼만 JOIN에 이용할 수 있다. 단, SELECT 절에서 USING 절로 정의된 컬럼 앞에는 별도의 Alias나 테이블명을 붙이지 않아야 한다.

CROSS JOIN

  • A 테이블과 B 테이블 사이에 JOIN 조건이 없는 경우, 조합할 수 있는 모든 경우를 출력하는 방식이다.

 

Reference

  • 2024 SD에듀 유선배 SQL개발자(SQLD) 과외노트
반응형