고객등록 입력 화면에서 고객정보저장을 위한 SQL문

INSERT INTO BOOKINFO_TBL VLAUES(?,?,?,?,?,?)

지역별 DM 발송 건수 통계를 구하는 SQL문

- groupby 활용

SELECT t2.area, COUNT(*)
FROM DM_TBL t1 JOIN BOOKINFO_TBL t2
ON t1.custid = t2.custid
GROUP BY t2.area;

1. 고객발송내역 조회 SQL

SELECT t1.dmno, t1.custid, t2.author, TO_CHAR(t1.maildate,'YYYY-MM-DD'),t1.contents,t1.campain
FROM DM_TBL t1 JOIN BOOKINFO_TBL t2
ON t1.custid = t1.custid;

...

 

2. 체크 포인트

- JOIN 구문

tale1 t1 JOIN  table2 t2 ON t1.id=t2.id;

- 별칭(Alias)

위의 JOIN 구문에서 테이블명에 별칭을 주어 칼럼에 접근할 수 있다.

- TO_CHAR()

오라클 기본함수인 to_char()을 활용하여 포멧을 지정해줄 수 있다.

1. 샘플 데이터

- [DM발송내역 샘플 데이터]

DM발송번호 고객ID 발송일자 DM 내용 발송부서 고객등급 캠페인구분
1 aaa 20171201 안녕하세요? 10 1 C1
2 bbb 20171201 안녕하세요? 10 2 C1
3 ccc 20171201 안녕하세요? 10 3 C1
4 ddd 20171224 안녕하세요? 20 V C2
5 eee 20171224 안녕하세요? 20 VV C2
6 fff 20171224 안녕하세요? 30 1 C3

- [도서정보 샘플 데이터]

고객ID 성명 관심상품 전화번호 이메일 거주지역
aaa 김고객 의류 010-1111-1111 aaa@korea.com 서울
bbb 이고객 의류 010-1111-1112 bbb@korea.com 서울
ccc 박고객 식료품 010-1111-1113 ccc@korea.com 경기
ddd 홍고객 공산품 010-1111-1114 ddd@korea.com 대전
eee 조고객 컴퓨터 010-1111-1115 eee@korea.com 대전
fff 백고객 관광 010-1111-1116 fff@korea.com 울산
 

2. DM발송내역정보와 고객정보테이블에 데이터 생성

 
INSERT INTO DM_TBL VALUES (1,'aaa',TO_DATE('20171201','YYYYMMDD'),'안녕하세요?','10','1','C1');
INSERT INTO DM_TBL VALUES (2,'bbb',TO_DATE('20171201','YYYYMMDD'),'안녕하세요?','10','2','C1');
INSERT INTO DM_TBL VALUES (3,'ccc',TO_DATE('20171201','YYYYMMDD'),'안녕하세요?','10','3','C1');
INSERT INTO DM_TBL VALUES (4,'ddd',TO_DATE('20171224','YYYYMMDD'),'안녕하세요?','20','V','C2');
INSERT INTO DM_TBL VALUES (5,'eee',TO_DATE('20171224','YYYYMMDD'),'안녕하세요?','20','VV','C2');
INSERT INTO DM_TBL VALUES (6,'fff',TO_DATE('20171224','YYYYMMDD'),'안녕하세요?','30','1','C3');



INSERT INTO BOOKINFO_TBL VALUES ('aaa','김고객','의류','010-1111-1111','aaa@korea.com','서울');
INSERT INTO BOOKINFO_TBL VALUES ('bbb','이고객','의류','010-1111-1112','bbb@korea.com','서울');
INSERT INTO BOOKINFO_TBL VALUES ('ccc','박고객','식료품','010-1111-1113','ccc@korea.com','경기');
INSERT INTO BOOKINFO_TBL VALUES ('ddd','홍고객','공산품','010-1111-1114','ddd@korea.com','대전');
INSERT INTO BOOKINFO_TBL VALUES ('eee','조고객','컴퓨터','010-1111-1115','eee@korea.com','대전');
INSERT INTO BOOKINFO_TBL VALUES ('fff','백고객','관광','010-1111-1116','fff@korea.com','울산');

 

3. 데이터 확인

SELCT * FROM 테이블명;

1. 요구사항

가. 본 과제에서는 한국백화점 DM발송시스템을 구축을 위한 프로그램이다. DM 발송 대상자 조회, 캠페인 DM 발송 업무로 이루어져 있다. 일자별 DM 발송 대상자 조회 및 ,일자별 DM발송 예약리스트를 조회 할 수 있다.
나. 프로그램 개발을 위해 데이터베이스 설계를 위해 업무요건을 확인하고, 필요한 작업을 수행하시오.

2. 테이블 명세서

- [DM발송내역 테이블 명세서 (테이블 명 : DM_TBL)]

순서 컬럼ID 컬럼명 형태 길이 NULL 비고
1 dmno DM발송번호 number 8 NOT NULL Primary Key
2 custid 고객ID varchar2 10    
3 maildate 발송일자 date      
4 contents DM내용 varchar2 13    
5 dept 발송부서 char 2    
6 grade 고객등급 char 2    
7 campain 캠페인구분 char 2    

- [고객정보 테이블 명세서 (테이블 명 : bookinfo_tbl)]

순서 컬럼ID 컬럼명 형태 길이 NULL 비고
1 custid 고객아이디 varchar2 10 NOT NULL Primary Key
2 author 성명 varchar2 20    
3 goods 관심상품 char 20    
4 phone 전화번호 varchar2 13    
5 email 이메일 varchar2 20    
6 area 거주지역 varchar2 20    

 
 

3. 테이블 생성

- DM발송목록 테이블 생성

CREATE TABLE DM_TBL(
dmno NUMBER(8) NOT NULL PRIMARY KEY,
custid VARCHAR2(10),
maildate DATE,
contents VARCHAR2(13 char),
dept CHAR(2),
grade CHAR(2),
campain CHAR(2)
);

* contents char을 기술해주면 글자수로 13자리가 된다. 그냥 13으로 할 경우 byte 단위 13자리

dmno명을 잘못 입력하여 칼럼명 수정

- 고객정보 테이블 생성

CREATE TABLE BOOKINFO_TBL(
custid VARCHAR2(10) NOT NULL PRIMARY KEY,
author VARCHAR2(20),
goods CHAR(20),
phone VARCHAR2(13),
email VARCHAR2(20),
area VARCHAR2(20)
);

goods 칼럼 자료형을 char(20)으로 변경

4. 테이블 확인

- DESC 테이블명;

1. 다운로드 및 환경 셋팅

1.1 다운로드 및 설치

- [다운로드](https://www.oracle.com/database/technologies/xe-prior-release-downloads.html)

- setup파일 실행하여 System 계정에 쓰일 패스워드 생성하고 설치 완료

- CMD(명령프롬프트)에서 sqlplus 명령어로 설치 확인

1.2 SCOTT 계정 활성화

- 오라클에서 기본적으로 제공하는 계정으로 연습하기에 좋은 샘플 데이터가 들어있다. 

- 오라클 처음 시작 시 SCOTT 계정이 잠겨있는 경우가 많아 명령어로 풀어준다.

- 명령어: ALTER USER SCOTT IDENTIFIED BY TIGER ACCOUNT UNLOCK;

- 만약, SCOTT 계정이 존재하지 않는다고 출력되면 오라클 설치경로에서 scott.sql 파일을 찾아 경로를 입력해 직접 실행한다.

scott 계정이 없는 경우

- 경로: C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql 

- 경로 맨앞에 @를 붙여 sqlplus를 실행중인 CMD창에 입력해준다. 

scott.sql 실행

참조

- https://cceeun.tistory.com/198

 

[Oracle] 오라클 11g Express Edition 설치하기 | 오라클 DB 설치 | Database | 로컬 서버 세팅 | Oracle 11g 다운

PC가 포맷되면서 기존에 깔려있던 자료가 다 날아갔다. 그래서 오라클도 다시 깔아야하는데, oracle 공식 홈페이지에서는 11g, 12c에 대한 Express Edition(무료버전) 배포를 중단하였다. 18c와 21c밖에 존

cceeun.tistory.com

- https://velog.io/@fluffycow/%EC%98%A4%EB%9D%BC%ED%81%B4-SCOTT-%EA%B3%84%EC%A0%95-%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

오라클 SCOTT 계정 활성화하는 방법

SCOTT은 오라클에서 기본으로 제공하는 계정입니다. 연습하기에 좋은 샘플 데이터가 들어있어 오라클을 처음 시작하는 학생들이 많이 사용합니다.오라클을 처음으로 시작하면 SCOTT 계정이 잠겨

velog.io

 

Array (배열)

정적배열 (Static Array)

  • 메모리상에서 연속적이다.
  • 메모리에 선언하는 시점에 각각의 인덱스가 어느 메모리에 할당되는지 정해진다.

동적배열 (Dynamic Array)

  • 원소가 추가, 삭제 됨에 따라 메모리가 늘어났다가 줄어들어야함으로 연속한 메모리에 들어있지 않다.
  • 다만, 내부적으로 O(1)의 시간 복잡도로 원소를 조회할 수 있다.

 

배열의 시간복잡도

삽입

  • [최악의 경우] 맨 앞에 새로운 값을 삽입하는 경우, 다른 값들을 모두 한칸씩 이동해야 하므로 -> O(N)
  • 맨 뒤에 새로운 값을 삽입하는 경우, 다른 값들의 이동이 존재하지 않으므로 -> O(1)

삭제

  • [최악의 경우] 맨 앞의 값을 삭제하는 경우, 다른 값들을 모두 한칸씩 이동해야 하므로. -> O(N)
  • 맨 뒤의 값을 삭제하는 경우, 다른 값들의 이동이 존재하지 않으므로 -> O(1)

탐색

  • 배열은 index 기반으로 이루어져 있기 때문에 다른 위치를 참조하여 바로 원하는 index의 원소를 구할 수 있다. -> O(1)

LinkedList (연결리스트)

  • 랜덤 접근이 가능한 배열과는 다른 순차적인(sequential) 자료구조
  • 노드들로 구성되어 있다.
  • 노드는 저장할 값과 다음 노드를 가리키는 포인터로 이루어져 있다.
  • 첫 노드인 헤드(Head)로 부터 시작해, 포인터를 사용해 리스트를 순회할 수 있다.

Single Linked List (단일 연결리스트)

  • 포인터가 한 방향(다음 노드)을 가리키면 Single Linked List

Doubly Linked List

  • Single Linked List에 이전 노드를 가리키는 포인터를 추가하게 되면 양방향으로 순회가 가능한 Doubly Linked List가 된다.

Circular Linked List

  • Linked List의 마지막 노드인 테일(Tail)과 헤드(Head)를 이으면 Circular Linked List이다.

 

연결리스트의 시간복잡도

삽입

  • 새로운 노드를 만들어 포인터로 연결 하면 되므로 -> O(1)

삭제

  • 노드를 삭제하고 이전 이후 노드를 포인터로 연결 하면 되므로 -> O(1)

탐색

  • [최악의 경우] 맨 뒤의 원소를 조회하는 경우, 헤드에서부터 순차적으로 탐색을 하므로 -> O(N)
  • 맨 앞의 원소를 조회하는 경우, 바로 탐색가능 하므로 -> O(1)

장단점 비교 및 정리

배열은 인덱스로 O(1)로 조회에 효율적이지만, 연결리스트에 비해 삽입/삭제가 비효율 적인 부분이 있다.

연결리스트는 순차적으로 탐색해야 함으로 배열에 비해 조회에 비효율적이며, 노드를 통해 삽입/삭제 효율성이 좋다.

  배열 연결리스트
조회 O(1) O(N)
맨 앞에서 삽입/삭제 O(N) O(1)
맨 뒤에서 삽입/삭제 O(1) O(1) : 마지막 원소를 아는 경우
O(N) : 마지막 원소를 모르는 경우
중간에서 삽입/삭제 O(N) 탐색시간 + O(1)

 

'CS > DSA' 카테고리의 다른 글

[알고리즘]그래프 탐색 알고리즘 BFS/DFS  (0) 2022.07.04

+ Recent posts