2일차 내용 정리

채공부·2025년 5월 23일

CMD에서 "type 파일"을 작성하면 해당 파일의 내용을 볼 수 있음

컴퓨터를 부팅해도 전에 다운로드한 ORACLE이 자동적으로 재실행

계정 접속하고 바로 해당 파일을 실행 가능

sqlplus 계정/비밀번호 @파일

;의 필요 유무

  1. 필요 X 예시
    CLEAR SCREEN
    SHOW USER

  2. 필요 O 예시
    SELECT * FROM emp
    WHERE
    GROUP
    ORDER BY 처럼 뒤에 더 쓸 내용이 있는 절은 세미클론을 꼭 붙어야 한다

PRIMARY KEY

테이블에서 특정 아이디의 역할을 하는 컬럼에 primary key의 제약조건을 붙인다
장점 : 무결성 (NOT NULL, UNIQUE)

NULL

비어있는 상태 or 알 수 없는 상태

UNIQUE

중복이 아닌 유일한 값

DQL (데이터 조회어)

SELECT, INSERT, UPDATE, DELETE

SELECT문

select문의 결과는 하나의 일시적인 테이블 결과물

5 SELECT 칼럼명1, 칼럼명2,...
1 FROM 테이블명
2 WHERE 조건 (필요없는 row 배제)
3 GROUP BY 그룹화칼럼
4 HAVING 조건
6 ORDER BY 정렬(ASC, DESC)

조회문 컬럼의 별칭 지정

SELECT 컬럼명1 as 별칭1, 컬럼명2 as 별칭2, 컬럼명3 as 별칭3 FROM 테이블명;
or
SELECT 컬럼명1 별칭1, 컬럼명2 별칭2, 컬럼명3 별칭3 FROM 테이블명; (as 생략 가능)

AS 사용 문자열로 설정할 때 따로 ''를 붙이지 않는다.

WHERE절

SELECT 컬럼명1, 컬럼명2, 컬럼명3,... FROM 테이블명 WHERE 조건;

연산자

산술연산자 (*, /, +, -)

비교연산자 (= or !=)

  1. = : TRUE(참) = ~인
  2. != : FALSE (거짓) = ~가 아닌, 다른

여기서 잠깐!
오라클에서 '=' : 비교연산자와 대입연산자로 동시 사용 가능

논리연산자

조건이 두 개 이상
1. AND : 이고, 그리고 (둘 중 하나라도 FALSE라면 FALSE)
2. OR : 이거나, 또는 (둘 중 하나라도 TRUE라면 TRUE, 둘 다 FALSE라면 FALSE)

SQL연산자

DB에서만 사용하는 연산자

IN

OR연산자와 비슷한 역할
예시

SELECT name, money
FROM compnany
WHERE money IN(1000,2000);

ANY

조건 비교시 어느 하나라도 맞으면 TRUE

SELECT name, money
FROM compnany
WHERE money > ANY (1000, 2000, 3000);

ANY()에 지정된 숫자가 아닌 또 다른 SELECT문이 올 수 있다 = 서브쿼리 (SELECT문의 결과로 비교할 수 있다)
=>최솟값보다 큰 게 SELECT

ALL

조건 비교시 조건 모두 맞으면 TRUE

SELECT name, money
FROM compnany
WHERE money > ALL (1000, 2000, 3000);

ALL()에 지정된 숫자가 아닌 또 다른 SELECT문이 올 수 있다 = 서브쿼리 (SELECT문의 결과로 비교할 수 있다)
=>최댓값보다 큰 것만 SELECT

BETWEEN A AND B

A와 B 사이의 데이터를 가져온다

SELECT name, money
FROM compnany
WHERE money BETWEEN 1000 AND 2000;
=
SELECT name, money
FROM compnany
WHERE money >=1000 AND <=2000;

IS NULL, IS NOT NULL

SELECT name, money, email
FROM compnany
WHERE email IS NULL;

SELECT name, money, email
FROM compnany
WHERE email IS NOT NULL;

EXISTS

해당 데이터의 존재 유무

SELECT name, money, email
FROM company
WHERE EXISTS (SELECT name FROM company WHERE name = '홍길동');

LIKE연산자

문자열 비교

~로 시작 : 문자%
~를 포함한 : %문자%
~로 끝나는 : %문자
~번째 글자가 : '_'로 칸 수를 표시, 하나당 한칸씩

예시
A로 시작

SELECT name, money FROM company WHERE name LIKE 'A%';

A을 포함

SELECT name, money FROM company WHERE name LIKE '%A%';

A로 끝나는

SELECT name, money FROM company WHERE name LIKE '%A';

두번째 글자가 A로 시작하는

SELECT name, money FROM company WHERE name LIKE '_A%';

두번째 글자로 A로 끝나는

SELECT name, money FROM company WHERE name LIKE '%A_';

결합 연산자 (||)

문자열을 연결

SELECT name || '의 시급은' money || '입니다.' FROM company;

FUNCTION (함수)

입력에 대한 출력을 반환

단일행 함수
한 개의 row당 하나의 값을 반환

복수행 함수
여러 개의 row당 여러 개의 값을 반환

문자열 함수

LOWER() : 문자열을 소문자로 변환
UPPER() : 문자열을 대문자로 변환
INITCAP() : 첫 글자를 대문자로 변환

LENGTH()
문자열 길이를 반환

함수를 결과값으로 대체되어 출력

SELECT LENGTH('kim') FROM DUAL; -> result : 3
SELECT 3 FROM DUAL; -> result : 3

SUSBSTR(문자열, 시작 index, 가져올 갯수)

 SELECT SUBSTR('Oracle Database', 8 , 8) AS result FROM DUAL;
 -> result : Database

INSTR(문자열, 찾을 문자열)

LPAD(문자열, 전체 자릿수, 왼쪽에 채울 문자)
RPAD(문자열, 전체 자릿수, 오른쪽 채울 문자)

숫자 함수

CEIL() : 숫자를 올림
FLOOR() : 숫자를 내림
ROUND() : 숫자를 반올림

숫자의 소수점 자릿수도 입력 가능하다
ex) CEIL(123.456, 2)

MOD(나누어지는 수, 나누는 수) : 나머지를 반환

날짜 함수 (자주 사용된다)

오라클에서는 값을 전달할 때 입력을 줄 게 없는 함수는 () 없이 함수명만 작성하면 된다

SYSDATE() : 현재 날짜를 반환
ADD_MONTHS() : 날짜에 지정된 개월 수를 더함
MONTHS_BETWEEN() : 두 날짜 사이의 개월 수를 구함
NEXT_DAY() : 지정된 요일의 다음 날짜를 반환
LAST_DAY() : 지정된 날짜가 속한 달의 마지막 날을 반환

변환 함수 (엄청 자주 사용하니 열심히 외워야 한다)

oracle에서 문자는 char type이라고 한다
oracle에서 날짜는 date type이라고 한다

TO_CHAR() : date를 대입하면 char로 출력
TO_DATE() : char를 대입하면 date로 출력

기본 날짜 포맷 <YYYY-년, MM-월, DD-일>

YYYY-MM-DD
YYYY.MM.DD
YYYY:MM:DD
YY.MM.DD
DD.MM.YY

만일 한글같은 특수문자를 사용하고 싶은 경우 ""를 사용해 해당 문자를 감싸서 입력해야 한다

SELECT TO_CHAR(SYSDATE, 'YYYY"년 "MM"월 "DD"일"');
-> "년 " , "월 ", "일" 이렇게 한글인 특수문자를 " " 로 각각 묶어야 한다

SELECT TO_CHAR(SYSDATE, 'FM YY"년" MM"월" DD"일" HH24"시" MI"분" SS"초"') FROM DUAL;

더 많은 날짜와 시간 포맷 예시

SELECT TO_CHAR(SYSDATE, 'YY.MM.DD DAY') FROM DUAL;
-> result : XXXX년 XX월 XX일 X요일

SELECT TO_CHAR(SYSDATE, 'YY.MM.DD DY') FROM DUAL;
-> result : XXXX년 XX월 XX일 X(월,화,수,목,금)

SELECT TO_CHAR(SYSDATE, 'YY.MM.DD DY HH:MI:SS') FROM DUAL;
-> result : XXXX년 XX월 XX일 X XX:XX:XX

SELECT TO_CHAR(SYSDATE, 'YY.MM.DD DY HH24:MI:SS') FROM DUAL;
-> result : XXXX년 XX월 XX일 X XX:XX:XX
			24시간 형식으로 시간 표시

SELECT TO_CHAR(SYSDATE, 'YY.MM.DD DY AM HH:MI.SS') FROM DUAL;
-> result : XXXX년 XX월 XX일 X 오전 또는 오후 XX:XX:XX
			만일 PM을 사용한다면 오후를 표시함

FM(필 모드) : 날짜/숫자 포맷에서 불필요한 0 또는 공백을 제거

SELECT TO_CHAR(SYSDATE, 'FM YY.MM.DD DY AM HH:MI:SS') FROM DUAL;

중간 중간 원하는 곳에 또 FM을 작성해 필모드를 제거 가능

중간 집계
글 내용을 TABLE에 저장하고 싶다. 글 하나의 정보는 글번호, 제목, 내용, 작성일 로 이루어져 있다.
1. TABLE을 생성 TABLE명 지정(note), 칼럼은 4개 지정
2. 글번호 : num, 제목 : title, 내용 : word, 작성일 : created_at
3. 데이터 타입 지정 : num은 number, title은 varchar2, word varchar2, created_at varchar2
4. 기본키를 num으로 지정하고 글번호가 자동으로 1씩 증가시키기 위한 SEQUENCE명은 note_seq

TABLE 생성

CREATE TABLE NOTE(
	num NUMBER PRIMARY KEY,
    title VARCHAR2(20),
    word VARCHAR2(20),
	created_at DATE
    );

SEQUENCE 생성

CREATE SEQUENCE note_seq;

DATA 삽입

INSERT INTO NOTE VALUES(note_seq.NEXTVAL, '제목1', '내용1', SYSDATE);
INSERT INTO NOTE VALUES(note_seq.NEXTVAL, '제목2', '내용2', SYSDATE);

DATA 조회

SELECT num 글번호 , title 제목 , word 내용,
	TO_CHAR(created_at, 'FM YYYY.MM.DD DAY AM HH:MI') AS 등록일자
    FROM note;
profile
학원 공부 내용 정리

0개의 댓글