7:50 경 학원 도착
8:15 오늘 계획 세우기, 수업 전 준비 세팅 해놓기
8:30 어제 내용 복습한 거 노트 정리 : 한손 노트에 CREATE USER 부터 DROP까지 정리함
9:20 명령 프롬프트 실행해보기
<9:30 1교시 시작>
윈도우 검색에서 > 서비스를 검색해서 들어가면 백그라운드에서 UI 없이 실행되는 앱들을 볼 수 있다.
OracleServiceXE가 우리가 사용하는 오라클 앱이고, OracleXETNSListener가 누군가의 요청에 접속을 하게 해주는 리스너이다.
이 둘의 시작 유형이 자동으로 되어 있어서 재부팅 시 자동으로 실행되는데, 서버 컴퓨터는 껐다 킬 일이 없어서 거의 문제 없지만, 우리는 껐다 켰다 할거라서 이게 자동으로 실행됐는지 여부를 [서비스]창에서 확인할 수 있다.
오라클 앱이 꽤 무겁게 돌아가기 때문에 집에서 사용한다면 시작 유형을 수동으로 해놓고 필요할 때만 켤 수 있다.
■ DUAL TABLE
임의로 입력한 데이터를 확인하고 싶을 때는 DUAL TABLE을 활용한다.
DUAL TABLE은 SQL이 갖고 있는 DUMMY TABLE로, 1X1짜리 임시 테이블이다.
여기서 칼럼명은 DUMMY이고 들어있는 임시 값은 X이다.
연산한 값을 dual로 조회할 때는 연산한 계산 식이나 계산식의 별칭이 DUMMY 자리에 들어가 칼럼 이름이 되고, X 자리에 연산된 값이 들어간다.
■ SEQUENCE 만들기
SEQUENCE는 특정 값이 일정하게 증가하는 수열을 만드는 명령어라고 생각하면 될 것 같다.
CREATE SEQUENCE (표이름)_seq;로 생성한다. (표 이름을 넣어주는 이유는 SEQUENCE 숫자가 한 두개가 아닐 때 서로를 식별하기 위함)
SEQUENCE를 만드는 이유는 내가 인위적으로 row의 고유 식별값을 넣어주는 번거로움을 없애고 자동화하기 위함이다.
글 번호가 항상 연속되는 숫자일 필요는 없다. 중간에 삭제된 데이터일 수도 있고 스킵될 수도 있는데 어쨌든 1개의 고유한 숫자가 부여되니까.
이번에는 값이 1만큼 증가하는게 아니라 특정 값만큼 증가하는 시퀀스를 만들어본다.
(그러니까 수열을 만들 껀데 등차수열을 만들겠다는 것이다)
예를 들어 10씩 증가하는 시퀀스를 만들기 위해 increment by 10;이란 조건을 추가하면 디폴트 값인 1부터 10씩 증가하는 시퀀스가 만들어진다. (다른 말로는 a1= 1이고 공차가 +10 인 수열이 만들어진다는거)
디폴트 값을 10으로 바꾸고 싶다면, start with 10이라는 조건을 추가하고 increment by 10;으로 완결하면 10부터 10씩 증가하는 시퀀스가 만들어진다.(다른 말로는 a1=10이라는 설정을 하고, 등차를 10인 등차수열을 만들겠다는 것)
SEQUENCE는 오라클에서 돌리기에 다소 무거운 명령어라고 한다.
그래서 우리가 보기에는 찰나에 시퀀스가 부여되며 값이 저장되거나 읽힘에도, 컴퓨터 입장에선 버거운 녀석이라 평소에 메모리에 여러 개의 시퀀스(이를테면 1부터 20까지)를 올려놓고 있다가 웹 브라우저에서 입력된 값이 웹 서버에 의해 추출되고 데이터베이스에 저장될 때 자동으로 부여할 수 있도록 준비하고 있다고 한다.
그런데 메모리란 녀석은 컴퓨터가 꺼지면 저장되어 있던 정보들이 증발되는 휘발성 저장공간이다.
보통 서버 컴퓨터는 따로 꺼지지 않고 켜져 있기 때문에 메모리에 로딩된 몇 개의 시퀀스 식별값이 없어질 일이 없지만,
우리가 연습하는 과정에서는 컴퓨터가 계속 꺼졌다 켜졌다 하기 때문에 나중에 서버를 만들어 시퀀스 값들을 부여할 일이 생기면 중간에 메모리에 로딩되어 있던 몇개의 시퀀스들이 통째로 사라져버리는 일들이 발생할 수 있다고 말씀해주셨다.
예를 들어, 전날 입력한 데이터 값이 5번까지 입력되어 있다가 작업을 끝내고 컴퓨터를 끄고 다음날 작업을 이어서 하려고 켰을 때 전날 메모리에 로딩되어 있던 애들이 1~20까지 였으면 6번부터 20번까지는 날라간 채로 그 다음 순서인 21번부터 40번까지 메모리에 로딩되어 올라간단 의미라 한다. (기능적인 문제는 될 게 없지만 왜 중간 숫자가 증발한거지? 라는 것에 대한 답을 미리 알려주신 거라고 한다)
이런 식으로 중간에 6번부터 20번까지 날리는 일을 겪고 싶지 않으면 create sequence 후 nocache라는 명령어를 추가해서 애초에 시퀀스로 계산한 값들 여러개가 메모리에 올라갈 일이 아예 없도록 하면 된다고 한다.
■ DML과 DQL
DML(data manipulation language) : INSERT, UPDATE, DELETE (커밋과 롤백이 가능)
DQL(data query language) : SELECT (커밋의 개념이 없음)
■ DQL의 구조
5 SELECT 필요한내용 : 필요한 내용을 선택하여 새로운 결과 테이블을 만들어 냄
1 FROM 표이름 : 대상 설정
2 WHERE 조건 : 필요없는 ROW를 배제
3 GROUP BY : 여러 개의 ROW를 하나의 그룹으로 묶인 ROW로 만들어 줌
4 HAVING : 필요 없는 GROUP을 배제한다
6 ORDER BY : 찾은 내용을 정렬하는 방식
<10:30 2교시 ~3교시> 예제 연습 + 기타 팁들
예시에서는 쓸모 없어보였지만, ANY 연산자를 쓰는 이유는 ()괄호 안에 SELECT 문이 들어갈 수 있기 때문에 배운다.
■ sql 파일을 이용해서 표를 간단한 방법으로 보기 좋게 만들기
select 로 선택한 값을 출력(조회)할 때 그 위에 출력시에만 형식을 변환시켜주는 방법은 다음과 같다.
근데 이것을 매번 타이핑 하자니 4줄이나 타이핑 해야하니까, 이걸 아예 sql문서로 바꾸고 @에 끌어다 적용시켜서 한줄 만으로도 반복적으로 형식 변형이 용이하게 바꾸는 방법이다.
그 시작은 host로 나가서 메모장에 sql 파일을 만드는 것이다. ( notepad ini.sql )
메모장에 제목.sql 파일이 뜨면 여기다가 항상 간편하게 적용하고 싶은 형식을 모두 긁어 복사 붙여넣기하고
SQL>
을 모두 지우거나
아예 메모장에 형식만을 작성한다.
이렇게 ini.sql로 만든 파일은 프롬프트 창을 아예 닫았다가 끄고 다시 적용해도 쉽게 적용할 수 있다는 장점이 있다.
<12:30 4교시>
1~3교시 때 배운 걸로 연습!
나는 챗 GPT에게 scott.sql 의 select 연습문제 좀 알려달라고 했다.
쉬운 문제 몇 개 해보고 시작!
조건 비교 연산자
EMP 테이블에서 SAL(급여)가 3000 이상인 직원들의 ENAME(이름), JOB(직무), SAL을 조회하세요.

AND, OR 연산자
EMP 테이블에서 DEPTNO(부서번호)가 10번이고 SAL(급여)가 2500 이상인 직원들의 ENAME, JOB, SAL을 조회하세요.

또는 DEPTNO가 20번인 직원들의 ENAME, JOB, SAL을 조회하세요.

BETWEEN 연산자
EMP 테이블에서 HIREDATE(입사일)가 '1981-01-01'과 '1985-12-31' 사이에 해당하는 직원들의 ENAME, HIREDATE를 조회하세요.

IN 연산자
EMP 테이블에서 DEPTNO(부서번호)가 10, 20, 30 중 하나인 직원들의 ENAME, DEPTNO를 조회하세요. -> 변형해서 만듦


수학 연산자
EMP 테이블에서 SAL(급여)과 COMM(수당)을 더한 값을 TOTAL_SALARY라는 이름으로 표시하며, ENAME, TOTAL_SALARY를 조회하세요.

null 관련 sql 연산자는 아직 안 배웠으니까... 어케 되려나... 음... 음... null을 전부 0으로 바꾸고 더해줘도 될 것 같긴한데. -> 이건 함수 배워야할 수 있다고 하심
'자바풀스택 과정 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 11/25 오후 기록 003-2 (0) | 2024.11.25 |
---|---|
자바 풀 스택 11/25 오전 기록 003-1 (0) | 2024.11.25 |
자바 풀 스택 11/22 오후 기록 002-2 (0) | 2024.11.22 |
자바 풀 스택 11/21 오후 기록 001-2 (0) | 2024.11.21 |
자바 풀 스택 11/21 오전 기록 001-1 (2) | 2024.11.21 |