이번 포스팅에서는 SQLD 시험 관련 개념을 정리해보도록 하겠습니다.
SQL 자격검정 실전문제 책을 풀면서 나오는 개념들을 쭉 정리해볼게요 ㅎㅎ
명령어 종류 | 명렁어 | 설명 |
---|---|---|
데이터 조작어(DML: Data Manipulation Language) | SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. |
INSERT UPDATE DELETE | 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블의 새로운 행에 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다. | |
데이터 정의어(DDL: Data Definition Language) | CREATE ALTER DROP RENAME | 테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다. |
데이터 제어어(DCL : Data Control Language) | GRANT REVOKE | 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다. |
트랜잭션 제어어(TCL : Transaction Control Language) | COMMIT ROLLBACK | 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. |
https://jaehoney.tistory.com/191 참조
- SELECT 쿼리문은 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 총 6단계를 거칩니다
Ex) ORDER BY 절에서 Alias 사용
SELECT CONCAT(first_name, last_name) AS full_name
FROM user
ORDER BY full_name;
EX) WHERE 절에서 Alias 사용
SELECT CONCAT(first_name, last_name) AS full_name
FROM user
WHERE full_name = 'VioletBeach';
WHERE
, GROUP BY
, ORDER BY
등을 수행하게 됩니다WHERE
쿼리를 먼저 수행한 후 GROUP BY
, ORDER BY
는 필터링된 ID만을 가지고 후속 쿼리에서 실행할 수도 있을 것입니다Oracle에서는 '' (빈 문자열)을 NULL로 처리합니다. 이는 Oracle의 특이한 점 중 하나로, Oracle에서는 빈 문자열을 자동으로 NULL 값으로 변환합니다. 따라서 Oracle에서 VARCHAR2 타입의 컬럼에 ''를 저장하려고 하면, 그 결과는 NULL이 됩니다.
다른 데이터베이스 시스템, 예를 들어 MySQL이나 PostgreSQL에서는 ''를 빈 문자열로 정확하게 저장하고, 이는 NULL과 구별됩니다. 이 시스템들에서는 빈 문자열과 NULL이 명확하게 다른 의미를 가집니다.
구분 | 연산자 | 연산자의 의미 |
---|---|---|
비교 연산자 | = | 같다 |
> | 보다 크다 | |
>= | 보다 크거나 같다 | |
< | 보다 작다 | |
<= | 보다 작거나 같다 | |
SQL 연산자 | BETWEEN a AND b | a와 b의 값 사이에 있으면 된다(a와 b값 포함) |
IN (list) | 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다 | |
LIKE '비교문자열' | 비교 문자열과 형태가 일치하면 된다(%, _ 사용) | |
IS NULL | NULL 값인 경우 | |
논리 연산자 | AND | 앞에 있는 조건과 뒤에 오는 조건이 참이 되면 결과도 참이 된다 |
OR | 앞의 조건이 참이거나 뒤의 조건이 참이 되어야 결과도 참이 된다 | |
NOT | 뒤에 오는 조건에 반대되는 결과를 되돌려 준다 | |
부정 비교 연산자 | != | 같지 않다 |
^= | 같지 않다 | |
<> | 같지 않다(ISO 표준, 모든 운영체제에서 사용가능) | |
NOT 컬럼명 = | ~와 같지 않다 | |
NOT 컬럼명 > | ~보다 크지 않다 | |
부정 SQL 연산자 | NOT BETWEEN a AND b | a,b 값을 포함하지 않는다 |
NOT IN (list) | list 값과 일치하지 않는다 | |
IS NOT NULL | NULL 값을 갖지 않는다 |
LTRIM
은 첫 번째 인자 값인 문자열의 왼쪽 첫 문자부터 확인해서 두 번째 인자 값인 지정문자가 나타나면 해당 문자를 제거합니다.
다른 문자 사이 또는 오른쪽에 있는 지정 문자는 제거되지 않습니다.
CONCAT
는 두 개 이상의 문자열을 하나로 결합하는 함수입니다. 이 함수는 인자로 받은 문자열들을 순서대로 연결하여 새로운 문자열을 생성합니다. 다양한 데이터베이스 시스템에서 사용할 수 있으며, SQL 표준에 따라 설계되었습니다. 예를 들어, CONCAT('Hello, ', 'world!')
는 'Hello, world!'
라는 문자열을 반환합니다.
REPLACE
는 문자열 내에서 지정된 패턴이나 문자를 찾아 다른 문자나 문자열로 치환하는 기능을 제공합니다. 이 함수는 세 개의 인자를 받으며, 첫 번째는 원본 문자열, 두 번째는 치환 대상 문자열, 세 번째는 치환할 문자열입니다. 예를 들어, REPLACE('Hello world', 'world', 'everyone')는 'Hello everyone'라는 문자열을 반환합니다. 이 함수는 데이터 정제 또는 특정 패턴을 수정할 때 유용하게 사용됩니다.
LENGTH
는 문자열의 길이를 계산하여 반환하는 함수입니다. 이 함수는 문자열에 포함된 문자의 개수를 정수형으로 반환하며, 공백도 문자로 계산합니다. 예를 들어, LENGTH('Hello world')
는 11을 반환합니다(공백 포함). 문자열 처리에서 길이 정보가 필요할 때 사용되며, 데이터 유효성 검사나 특정 길이 기반의 조건을 확인할 때 유용합니다.
CHR
는 주어진 ASCII 코드 값에 해당하는 문자를 반환합니다. 이 함수는 숫자 형태의 ASCII 코드를 인자로 받고, 해당 코드에 해당하는 문자를 문자열 형태로 반환합니다. 예를 들어, CHR(65)
는 'A'를 반환합니다. 특히, 일반적인 문자뿐만 아니라 특수 제어 문자도 반환할 수 있어, 예를 들어 CHR(10)
은 줄바꿈을 의미하는 개행 문자를 반환하며, 이는 텍스트 데이터에서 새로운 줄을 시작할 때 사용될 수 있습니다.
TO_DATE
는 문자열을 날짜 타입으로 변환하는 데 사용됩니다. 이 함수는 두 개의 주요 인자를 받습니다
첫 번째 인자는 날짜 정보를 담고 있는 문자열이고, 두 번째 인자는 이 문자열의 형식을 설명하는 날짜 포맷입니다. 이 포맷을 사용하여 데이터베이스가 문자열을 적절한 날짜 값으로 해석할 수 있게 도와줍니다.
예를 들어, TO_DATE('201501', 'YYYYMM')에서:
201501
는 문자열로 제공된 날짜 정보입니다.
YYYYMM
는 이 문자열이 '년도와 월' 정보만 포함하고 있음을 나타내는 포맷 코드입니다.
이 함수는 일(day) 정보가 포함되어 있지 않기 때문에 기본적으로 월의 첫 번째 날짜인 1일
을 사용하여 2015년 1월 1일
을 반환합니다.
EXTRACT
는 날짜/시간 값에서 특정 부분(예: 년, 월, 일, 시간 등)을 추출하는 데 사용됩니다. 이 함수는 두 가지 주요 인자를 받습니다: 첫 번째 인자는 추출하고자 하는 부분을 나타내며, 두 번째 인자는 날짜/시간 값입니다.
EXTRACT(YEAR FROM TO_DATE('201501', 'YYYYMM')) = EXTRACT(YEAR FROM SVC_END_DATE) AND
EXTRACT(MONTH FROM TO_DATE('201501', 'YYYYMM')) = EXTRACT(MONTH FROM SVC_END_DATE)
EXTRACT(YEAR FROM ...)와 EXTRACT(MONTH FROM ...)를 사용하여 주어진 날짜 값에서 연도와 월을 추출합니다.
SVC_END_DATE에서도 마찬가지로 연도와 월을 추출하여, TO_DATE로부터 얻은 연도와 월과 일치하는지 비교합니다.