책 리뷰/초보자를 위한 SQL 200제
[Day4/30] 초보자를 위한 SQL 200제
조조링
2024. 10. 29. 15:48
728x90
반응형
이 카테고리는 정보문화사의 "초보자를 위한 SQL 200제" 30일 코스를 학습 하면서 실습한 내용입니다.
1. 대소문자 변환 함수 배우기 (UPPER, LOWER, INITCAP)
사원 테이블의 이름을 출력하는데, 첫 번째 컬럼은 이름을 대문자로, 두 번째 컬럼은 소문자로 출력하고, 세 번째 컬럼은 이름의 첫 번째 철자는 대문자로 하고 나머지는 소문자로 출력
SELECT UPPER(ename), LOWER(ename), INITCAP(ename)
FROM emp
- UPPER: 대문자로 출력
- LOWER: 소문자로 출력
- INITCAP: 첫 번째 철자만 대문자로 출력, 나머지는 소문자로 출력
- UPPER, LOWER 함수는 테이블 내 특정 문자 데이터를 검색하고자 할 때 데이터가 대문자인지 소문자로 저장되어 있는지 확실하지 않을 때 정확한 데이터 검색을 위해 사용
이름이 scott인 사원의 이름과 월급 조회 (이름이 소문자, 대문자인지 모를 때)
SELECT ename, sal
FROM emp
WHERE LOWER(ename) = 'scott';
2. 문자에서 특정 철자 추출하기 (SUBSTR)
영어 단어 SMITH에서 SMI만 잘라내서 출력
SELECT SUBSTR('SMITH',1,3)
FROM DUAL;
- SUBSTR(문자, a, b): 문자에서 특정 위치의 문자열 추출
- a: 추출할 철자의 시작 위치 번호
- b: 시작 위치로부터 몇 개의 철자를 추출할 지, 생략 시 끝까지 추출
- SUBSTR(’SMITH’,-2,2): -2 자리인 T부터 두 개의 철자를 추출해서 TH 반환
3. 문자열의 길이 출력 (LENGTH)
이름을 출력하고 그 옆에 이름의 철자 개수 출력
SELECT ename, LENGTH(ename)
FROM emp;
4. 문자에서 특정 철자의 위치 출력하기 (INSTR)
사원 이름 SMITH에서 알파벳 철자 M이 몇 번째 자리에 있는지 출력
SELECT INSTR('SMITH','M')
FROM DUAL;
- INSTR: 문자에서 특정 철자의 위치를 출력하는 함수
abcdefgh@naver.com에서 naver.com만 출력
SELECT SUBSTR('abcdefg@naver.com', INSTR('abcdefg@naver.com','@')+1)
FROM DUAL;
5. 특정 철자를 다른 철자로 변경하기 (REPLACE)
이름과 월급을 출력하는데, 월급을 출력할 때 숫자 0을 *로 출력
SELECT ename, REPLACE(sal, 0, '*')
FROM emp;
- REPLACE: 특정 철자를 다른 철자로 변경하는 문자 함수
이름과 월급을 출력하는데, 월급의 숫자 -~3까지를 *로 출력
SELECT ename, REGEXP_REPLACE(sal, '[0-3]', '*') as SALARY
FROM emp;
- REGEXP_REPLACE: 정규식 함수로, 더 복잡한 형태의 검색패턴으로 데이터를 조회할 수 있게 해주는 함수
이름의 두 번째 자리의 한글을 *로 출력
SELECT REPLACE(ENAME, SUBSTR(ENAME, 2,1), '*') as "전광판_이름"
FROM test_ename;
6. 특정 철자를 N개 만큼 채우기 (LPAD, RPAD)
이름과 월급을 출력하는데, 월급 컬럼의 자릿수를 10자리로 하고, 월급을 출력하고 남은 나머지 자리에 *를 채워서 출력
SELECT ename, LPAD(sal, 10, '*') as salary1, RPAD(sal, 10, '*') as salary2
FROM emp;
- KING의 월급은 5000으로 4자리여서 나머지 6자리에 *를 채워서 출력
- LPAD의 뜻이 "왼쪽으로 채워 넣다"여서 왼쪽으로 *를 채우고 있다.
- LPAD나 RPAD를 이용하면 SQL로 데이터를 시각화하기 유용
7. 특정 철자 잘라내기 (TRIM, RTRIM, LTRIM)
첫 번째 컬럼은 영어 단어 smith 철자를 출력하고, 두 번째 컬럼은 s를 잘라서 출력하고, 세 번째 컬럼은 h를 잘라서 출력하고, 네 번째 컬럼은 'smiths' 양쪽에 s를 잘라서 출력
SELECT 'smith', LTRIM('smith','s'), RTRIM('smith','h'), TRIM('s' from 'smiths')
FROM dual;
임의로 JACLK 사원 데이터를 입력할 때 JACLK 오른쪽에 공백 하나 넣어서 입력 (INSERT) 후 검색
INSERT INTO emp(empno, ename, sal, job, deptno) values(8291, 'JACLK ',3000,'SALESMAN', 30);
commit;
SELECT ename, sal
FROM emp
WHERE ename='JACLK'; # 출력안됨
SELECT ename, sal
FROM emp
WHERE RTRIM(ename) = 'JACLK';
- RTRIM(ename) = 'JACLK'으로 JACLK 데이터 검색할 때 사원 이름 오른쪽에 있는 공백 제거하고 검색
8. 반올림해서 출력하기 (ROUND)
876.567 숫자를 출력하는 데 소수점 두 번째 자리인 6에서 반올림, 일의 자리에서 반올림 출력
SELECT '876.567' as 숫자, ROUND(876.567,1), ROUND(876.567,-1)
FROM dual;
728x90
반응형