티스토리 뷰
728x90
반응형
목차 |
01. 관계형 데이터베이스 개요 02. SELECT문 03. 함수 04. WHERE절 |
01. 관계형 데이터베이스 개요
- 관계형 데이터베이스(RDB) - 관계형 데이터 모델에 기초를 둔 데이터베이스 / DB의 설계는 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것
- RDBMS : RDB를 관리/감독하기 위한 시스템 / 오라클, SQL Server(MSSQL), MySQL, MariaDB, PostgreSQL 등
- TABLE - 엑셀표같은 느낌... 솔직히 다 아는 내용이니 패스
- SQL - 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어
02. SELECT문
- 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어
-- 기본형
SELECT 컬럼1, 컬럼2, ... FROM 테이블 WHERE 컬럼1 = "메롱";
/* "*"을 쓰면 모든 테이블이 조회되고
WHERE절이 없으면 전체 ROW가 조회됨 */
SELECT * FROM 테이블;
-- 별칭사용(줄임말과 비슷)
SELECT BAND.BAND_NAME
FORM BAND
WHERE BAND.BAND_CODE = "123";
SELECT B.BAND_NAME
FORM BAND B
WHERE B.BAND_CODE = "123";
- 산술연산자 : 연산 시 NULL값이 포함되어 있으면 결과값은 NULL이 됨.
-- 우선순위 : 괄호 → 곱셈/나눗셈 → 더하기/빼기
SELECT 10+5 FROM DUAL;
SELECT COL1+COL2 AS A FROM SAMPLE;
SELECT (COL1+COL2)*COL2 AS R1 FROM SAMPLE;
- 합성연산자 : 문자와 문자를 연결할 때 사용
SELECT '메'||'롱'||'크크크' AS T1 FROM YAM;
-- 출력) 메롱크크크
SELECT '치킨'||' '||'먹고싶다' AS T2 FROM YAM2;
-- 출력) 치킨 먹고싶다
03. 함수
- 문자함수
-- 1. CHR(ASCII코드) : ASCII코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지 알려줌
SELECT CHR(65) FROM T1;
-- 결과) A
-- 2. LOWER(문자열) : 문자열을 소문자로 변환
SELECT LOWER('YAMDURIAN') FROM T1;
-- 결과) yamdurian
-- 3. UPPER(문자열) : 문자열을 대문자로 변환
SELECT UPPER('apple') FROM T1;
-- 결과) APPLE
/* 4. LTRIM(문자열 [,특정문자]) : 특정 문자 명시 안하면 문자열의 왼쪽 공백 제거,
명시했다면 문자열을 왼쪽부터 한글자씩 특정 문자와 비교해 특정문자 포함되면 제거, 없으면 멈춤 */
-- SQL Server(MSSQL)의 경우 공백만 가능
SELECT LTRIM(' 메롱') FROM T1;
-- 결과) 메롱
SELECT LTRIM('메시호날두', '메시') FROM T1;
-- 결과) 호날두
-- 5. RTRIM(문자열 [,특정문자]) : 4번과 동일(왼쪽 → 오른쪽으로)
/* 6. TRIM([위치][특정문자][FROM] 문자열) *[]는 옵션
옵션이 없을 경우, 왼쪽&오른쪽 공백 제거하고,
그렇지 않으면 문자열을 위치(LEADING, TRAILING, BOTH)로 지정된 곳부터
한 글자씩 특정 문자와 비교해 같으면 제거, 아니면 멈춤
이때 특정 문자는 한 글자만 지정 가능 */
-- SQL Server(MSSQL)의 경우 공백만 가능
SELECT TRIM(' 배불러 ');
-- 결과) 배불러
SELECT TRIM(LEADING '불' FROM '배불러');
-- 결과) 배러
/* 7. SUBSTR(문자열, 시작점[길이])
문자열의 원하는 부분만 잘라서 반환... 길이 명시 안하면 문자열의 시작점~끝까지 반환 */
-- SQL Server의 경우 SUBSTRING(문자열)
SELECT SUBSTR('저녁을너무많이먹었어', 3, 5) FROM T1;
-- 결과) 을너무많이
-- 8. LENGTH(문자열) : 문자열 길이 반환 / MSSQL - LEN(문자열)
SELECT LENGTH('메롱메') FROM T1;
-- 결과) 3
/* REPLACE(문자열, 변경 전 문자열 [변경 후 문자열])
문자열에서 변경 전 문자열을 변경 후 문자열로 바꿔주는 함수
변경 후 문자열이 없다면 변경전 문자열 제거 */
SELECT ('너무너무 배불러', '불러', '고파') FROM T1;
-- 결과) 너무너무 배고파
- 숫자함수
-- 1. ABS(수) : 수의 절대값 반환
SELECT ADS(-10) FROM T1;
-- 결과) 10
-- 2. SIGN(수) : 수의 부호 반환... 양수(1), 음수(-1), 0(0)
SELECT SIGN(-183) FROM T1;
-- 결과) 1
/* 3. ROUND(수, [자릿수])
수를 지정된 소수점 자릿수까지 반올림 해 반환
자릿수 명시 안 하면 기본값 0 ~> 반올림된 정수 반환
자릿수가 음수일 경우 ~> 지정된 정수부를 반올림 */
SELECT ROUND(164.234, 1) FROM T1;
-- 결과) 164.2
SELECT ROUND(164.234, -2) FROM T1;
-- 결과) 200
/* 4. TRUNC(수, [자릿수])
수를 지정된 소수점 자릿수까지 반환
자릿수 명시 X ~> 기본값 0
음수? 지정된 정수부에서 버림해 반환 */
SELECT TRUNC(54.29, 1) FROM T1;
-- 결과) 54.2
SELECT TRUNC(54.29, -1) FROM T1;
-- 결과) 50
-- 5. CEIL(수) : 소수점 이하의 수를 올림한 정수 반환 / MSSQL - CEILING(문자열)
SELECT CEIL(72.86) FROM T1;
-- 결과) 73
SELECT CEIL(-134.333) FROM T1;
-- 결과) -134
-- 6. FLOOR(수) : 소수점 이하의 수를 버림한 정수를 반환
SELECT FLOOR(22.4) FROM T1;
-- 결과) 22
SELECT FLOOR(-22.4) FROM T1;
-- 결과) -23
-- 7. MOD(수1, 수2) : 수1을 수2로 나눈 나머지 반환
SELECT MOD(15, -4) FROM T1;
-- 결과) 3
- 날짜함수
-- 1. SYSDATE : 현재 연/월/일/시/분/처 반환 / MSSQL - GETDATE()
SELECT SYSDATE FROM T1;
-- 결과) 2023-03-15 00:01:33
-- 2. EXTRACT(특정 단위 FROM 날짜 데이터) : 날짜 데이터에서 특정 단위만 출력해 반환 / MSSQL - DATEPART(특정단위, 날짜데이터)
-- 특정단위 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
SELECT EXTRACT(MONTH FROM SYSDATE) AS MOTH FROM T1;
-- 결과) 3
-- 3. ADD_MONTHS(날짜데이터, 특정개월수) : 날짜데이터 + 특정 개월수 반환
-- 날짜의 이전/다음 달에 기준 날짜의 일자 존재하지 않으면 해당 월의 마지막 일자 반환
-- MSSQL - DATEADD(MONTH, 특정개월수, 날짜데이터)
SELECT ADD_M0NTH(TO_DATE('2023-03-15', 'YYYY-MM-DD'), -1) FROM T1;
-- 결과) 2023-04-15
- 변환함수
- 명시적 형변환 : 변환 함수를 사용해 데이터 유형 변환을 명시적으로 나타냄
- 암시적 형변환 : DB가 내부적으로 알아서 데이터 유형 변환
- => 성능저하 문제로 명시적 형변환을 사용하는 것이 좋음.
-- 명시적 형변환에 쓰이는 함수
-- 1. TO_NUMBER(문자열) : 문자열을 수자형으로 바꿔줌
SELECT TO_NUMBER('4949') FROM T1;
-- 결과) 4949
SELECT TO_NUMBER('QWERTY') FROM T1;
-- 결과) 에러발생
-- 2. TO_CHAR(수 or 날짜 ,[포맷]) : 수, 날짜형의 데이터를 포맷 형식의 문자형으로 변환
SELECT TO_CHAR(123) FROM T1;
-- 결과) 1234
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD HH24MISS') FROM T1;
-- 결과) 20230315 001212
-- 3. TO_DATE(문자열, 포맷) : 포맷 형식의 문자형 데이터를 날짜형으로 변환
-- YYYY(년) / MM(월) / DD(일)
-- HH(12시) / HH24(24시) / MI(분) / SS(초)
SELECT TO_DATE('20230315', 'YYYYMMDD') FROM T1;
-- 결과) 2023-03-15
- NULL 관련함수
-- 1. NVL(인수1, 인수2) : 인수1이 NULL일 경우 인수2 반환, NULL이 아니면 인수1 반환
-- MSSQL - ISNULL(인수1, 인수2)
-- 2. NULLIF(인수1, 인수2) : 인수1, 2가 같으면 NULL을, 다르면 인수1 반환
-- 3. COALESCE(인수, 인수2, 인수3, ...) : NULL이 아닌 최초의 인수 반환
- CASE : ~이면 ~이고, ~이면 ~이다 / 표현방식이 함수보단 구문느낌
-- 세 개 다 같은 결과 값 반환
-- 1
CASE WHEN SUBWAY_LINE = '1' THEN 'BLUE'
WHEN SUBWAY_LINE = '2' THEN 'GREEN'
ELSE 'GRAY' -- ELSE는 옵션
END
-- 2
CASE SUBWAY_LINE
WHEN '1' THEN 'BLUE'
WHEN '2' THEN 'GREEN'
ELSE 'GRAY'
END
-- 3 오라클
DECODE(SUBWAY_LINE, '1', 'BLUE', '2', 'GREEN', 'GRAY')
04. WHERE절
- INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문
-- SELECT 기본형
SELECT 컬럼명1, 컬럼명2 ... FROM 테이블명 WHERE 조건절;
SELECT * FROM STUDENT WHERE NAME = '최민갱';
-- 결과) 최민갱
SELECT * FROM STUDENT WHERE NAME <> '최민갱';
-- 결과) 최민갱을 제외한 데이터 반환
-- UPDATE 기본형
UPDATE 테이블명 SET 컬럼명 = 새로운 데이터 WHERE 조건절;
UPDATE STUDENT SET 성적 = 'A+' WHERE NAME = '최민갱';
-- 결과) 최민갱 학생의 성적을 A+로 업데이트
-- DELETE 기본형
DELETE FROM 테이블명 WHERE 조건절;
DELETE FROM STUDENT WHERE AGE = 20;
-- 결과) STUDENT 테이블에서 AGE가 20인 데이터 삭제
- 비교연산자 / 부정 비교연산자 / SQL연산자 / 부정SQL연산자 / 논리연산자 사용 가능
- SQL연산자
- BETWEEN A AND B : A와 B의 사이(A, B 포함)
- LIKE '비교문자열' : 비교문자열 포함
- IN (LIST) : LIST 중 하나와 일치
- IS NULL : NULL 값
- 논리연산자
- AND : 모든 조건이 TRUE
- OR : 하나 이상의 조건이 TRUE
- NOT : TRUE면 FALSE이고, FALSE이면 TRUE
- SQL연산자
WHERE AGE BETWEEN 20 AND 24;
WHERE NAME LIKE '%림';
WHERE AGE IN (20, 23);
WHERE NAME IS NULL;
728x90
반응형
'자격증 > SQLD' 카테고리의 다른 글
[SQL기본및활용] 2-2. SQL활용 (2) (1) | 2023.03.17 |
---|---|
[SQL기본및활용] 2-2. SQL활용 (1) (0) | 2023.03.16 |
[SQL기본및활용] 2-1. SQL 기본 (2) (0) | 2023.03.16 |
[데이터모델링의이해] 1-2. 데이터모델과 SQL (0) | 2023.03.14 |
[데이터모델링의이해] 1-1. 데이터모델링의 이해 (0) | 2023.03.13 |