goodthings4me.tistory.com

직전 포스팅(SQL 기본 문법)에 이어서 SQL 함수와 서브 쿼리 연습 후 정리한 내용임. 문자, 숫자, 날짜, 그리고 중복 제거와 관련한 함수를 연습해보고, 서브 쿼리에 대한 내용도 정리해서 올려봅니다.
문자 관련 함수
# 오라클 함수를 실행하기 위해서는 SELECT 문 내에 있어야 함
▶ UPPER, LOWER, INITCAP
UPPER : 대문자로 바꿈
LOWER : 소문자로 바꿈
INITCAP : 맨 앞 글자는 대문자, 나머지는 소문자로 바꿈
select ename, upper(ename), lower(ename), initcap(ename) from emp;
select * from emp where upper(ename) = upper('smith');
select * from emp where upper(ename) like upper('%smith%');
▶ LENGTH, SUBSTR
LENGTH : 문자열의 길이를 구함
select ename, length(ename) from emp;
SUBSTR : 문자열의 일부를 추출
SUBSTR(문자열, 시작위치, 추출 길이)
select job, substr(job, 1, 2), substr(job, 3, 2) from emp;
▶ LPAD, RPAD
* PAD는 padding 의미
LPAD : 문자 왼쪽을 채움
RPAD : 문자 오른쪽을 채움
select 'oracle', LPAD('oracle', 10, '*'), rpad('oracle', 7, '*') from dual;

▶ CONCAT, DUAL
- 오라클에 dual이라는 가상의 테이블이 있음
CONCAT : 두 문자를 합치기
select concat('oracle ', 'database') from dual;
DUAL : 오라클 데이터베이스에서 객체를 실행시켜 눈으로 확인 가능하게 만들어주는 가상의 테이블
SELECT [객체] FROM dual;

숫자 관련 함수

# ceil, floor는 정수를 만들어 줌
- trunc([숫자], [버림 위치])
- ceil[숫자])
- floor([숫자])
- mod([숫자], [나눌 숫자])
select
round(3.141592, 2),
trunc(3.141592, 3),
mod(5, 2),
ceil(3.141592),
floor(3.141592)
from dual;

날짜 관련 함수
- SYSDATE : 오라클 서버의 현재 날짜와 시간을 보여줌 (날짜 데이터는 '+', '-' 가능)
- TO_DATE : 문자를 날짜 자료형으로 변환하는 함수이며, 함수 사용은 to_date([문자(날짜 형태)], [인식될 날짜 형태])
- TO_CHAR : 날짜나 숫자를 문자로 변환하는 함수이며, 함수 사용은 to_char([날짜 또는 숫자)]
select sysdate,
sysdate + 1 as tomorrow,
sysdate - 1 as yesterday,
to_date('2023-03-20', 'YYYY-MM-DD'),
to_char(sysdate)
from dual;

※ 오라클에서 시간 표시
select to_date('12-08-23', 'MM-DD-YY')from dual;

select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS ')from dual;

select to_char(sysdate, 'YY-mm-DD AM HH:MM:SS ')from dual;

※ 중복 제거 : DICTINCT
- 중복되는 값이 없으면 표현하지 않음
- 2개 이상의 컬럼을 선택하면 2개 컬럼이 and 조건으로 묶어서 하나의 값으로 비교하여 중복된 경우에만 제거됨
select distinct job from emp;
select distinct job, deptno from emp;
서브 쿼리(Sub Query)
서브 쿼리란, SQL 문장 내(메인 쿼리)에 있는 다른 SQL 문장(SELECT 문)을 의미하며,
이 SELECT 문장(서브 쿼리)에서 데이터를 추출하여 메인 쿼리의 SQL 문장(주로 SELECT, INSERT, UPDATE, DELETE 등)의 조건이나 결과로 사용됩니다.
서브쿼리를 사용하면 더 복잡한 데이터 추출이 가능하고, 결과를 조작하거나 데이터를 필터링하는데 아주 유용합니다.
select ename, sal
from emp
where sal > (select sal from emp where ename = 'JONES');
▶ 단일행 서브쿼리
- 실행 결과가 하나의 값으로 나오는 서브쿼리
- 단일행 연산자(>, <, = 등)을 사용함
select *
from emp
where hiredate < (select hiredate from emp where ename = 'JAMES');
▶ 다중행 서브쿼리
- 실행 결과가 하나 이상의 여러 값으로 나오는 서브쿼리
- 단일행 연산자는 사용이 불가하고, IN, EXISTS 같은 연산자를 사용함
select *
from emp
where sal in (select max(sal) from emp group by deptno);
select *
from emp
where deptno in (select deptno from dept where loc = 'CHICAGO');
※ exists는 뒤에 오는 서브쿼리에 값이 있으면 true, 없으면 false 의미
select *
from emp
where exists (select dname from dept where deptno = 10);
트랜잭션(Transaction)
트랜잭션이란?
데이터베이스에서 한 번에 하나 이상의 작업을 묶어서(쿼리를 묶어서 하나의 작업 단위로) 처리하는 개념으로 데이터베이스에서 수행되는 작업의 논리적 단위
# 트랜잭션의 ACID 원칙
- 원자성(Atomicity) : 모든 작업은 성공 또는 실패로 완전히 수행되어야 함
- 일관성(Consistency) : 실행 전과 후에 데이터베이스는 항상 일관된 상태 유지
- 고립성(Isolation) : 여러 트랜잭션이 동시에 실행 중일 때 각 트랜잭션은 다른 트랜잭션의 영향을 받지 않아야 함
- 지속성(Durability): 트랜잭션이 완료된 후에는 그 결과가 영구적으로 유지되어야 함
# 트랜잭션의 예시)
A가 B에게 C은행을 사용하여 100만원을 송금한다
1. A가 Kb은행의 100만원을 이체하기 위해 보내는 작업을 진행한다.
A의 잔고 : -100만원
B의 잔고 : +0원
Kb은행 : +100만원
2. Kb은행에서 B의 계좌로 100만원을 입금한다.
A의 잔고 : -100만원
B의 잔고 : +100만원
Kb 은행 : +0원
위 상황에서 1과 2를 실행하는 과정에서 전산 오류가 발생하였다면,
A는 100만원이 인출되어 있어 -100만원인 상태이고
B는 100만원이 입금이 되지 않아 +0원인 상태일 것이다.
1과 2의 행동을 나눠서 실행되면 안되고 한번에 처리가 되고 저장이 되어야한다.
이런 상황을 막기위해 트랜잭션을 사용하여 1과 2를 하나의 처리하는 방법을 사용하여 중간에 문제가 발생하지 않도록 하기 위함이다.
▶ 트랜잭션을 취소하고 싶을 때는 ROLLBACK
--첫번째 조회
select * from emp;
--테이블 모든 데이터 삭제
delete from emp;
--두번째 조회
(아무 값이 없음)
select * from emp;
--트랜잭션 취소
rollback;
--세번째 조회
(값이 다시 보임)
select * from emp;
▶ 트랜잭션을 적용하고 싶을 때는 COMMIT
--첫번째 조회
select * from emp;
--테이블 모든 데이터 삭제
delete from emp;
update emp set ename = 'SCOTT' where ename = 'SMITH';
--두번째 조회(SMITH가 SCOTT으로 바뀜)
select * from emp;
--트랜잭션 적용
commit;
--세번째 조회(여전히 값이 바껴있음)
select * from emp;
오라클 11g, SQL Developer 설치해보기
파이썬 데이터 분석 연습을 위해 실습용 데이터베이스로 오라클 11g 설치와 오라클 DBMS 툴인 SQL Developer를 설치하고 실행하는 절차를 정리함 오라클의 버전에서 g는 그리드, c는 클라우드를 나타
goodthings4me.tistory.com
DB, DBMS, 그리고 SQL 기본 문법 알아보기
데이터 분석을 위한 데이터 수집 시 파일이 아닌 DB에 수집 데이터를 저장하기 위해서는 Oracle이나 MySQL 등의 DB를 사용하는데, 이때 기본으로 알아야 하는 것이 SQL입니다. 이번 포스팅에서는 오라
goodthings4me.tistory.com
블로그 인기글
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
'코딩 연습' 카테고리의 다른 글
판다스 날짜 추출 - 연,월,일 분리 (0) | 2024.03.28 |
---|---|
썸네일 이미지 만들기 용량 줄이기(with python) (0) | 2023.12.10 |
DB, DBMS, 그리고 SQL 기본 문법 알아보기 (0) | 2023.12.08 |
ImportError: DLL load failed while importing win32clipboard (0) | 2023.11.13 |
화면 캡처 이미지 자동 저장 (1) | 2023.04.04 |
댓글