■ 연산자의 종류

- 산술을 제외하고, 관계/논리/기타 모두 문자열에 사용 가능하다. 
**산술은 문자열에 사용 불가하다.

연산자 코드
산술 연산자 +  -  *  /  mod(피젯수, 젯수)
관계 연산자 >   >=  <   <=  =(동일한가)  !=(동일하지 않음)  <> (동일하지 않음)
**null을 체크할 때는, 필드 is null   필드  is not null 을 사용한다.
논리 연산자 and or not 
필드 between A and B   (A이상 B이하) 
필드 in (A, B, C)            필드=A or 필드=B or 필드=C
패턴 비교 연산자 LIKE, %, _    

 

* 오라클은 정수, 실수 개념이 없어서, 10/3은 실수로 나온다.

* mod(x,y) --> 나머지 구하는 

* dual은 오라클에서 기본적으로 제공하는 테이블이다.

* XML에서 < > 태그 사용하므로 >= ~ <= 보다, between을 쓰는게 좋다.

* 가급적 not(  ) 역조건은 사용하지 않는 것이 좋다.
-- why? SELECT를 두 번 하기 때문에 속도 저하 

 

기본 필드와 연산 필드

--heading : select의 결과로 추출된 임시 컬럼명
--연산 필드 : 기본 필드의 연산에 의해서 형성된 필드

select
   sabun as 사번,       -- 기본 필드
   saname 사원명,       -- as 생략가능 
   --sajob as 직 급,    -- 에러! 공백을 띄어서 표준명명법에 어긋남  
   sajob as "직 급",    -- OK 
   sapay,
   sapay * 0.1 as bonus  -- 연산 필드
from sawon

 

■ 문자의 결합 ||

select (문자데이터)칼럼명 || '추가하고자 하는 문자열' from 테이블명

 

■ 패턴 비교 연산자 : LIKE, %, _

[1] % (나 다음 모든문자)

select * from 테이블
  where (문자데이터)칼럼명 like '김%'   -- 맨앞글자가 김인 데이터(그 뒤는 길이도 상관없음)

 

[2] _  (모든 문자에서 1개)

select * from 테이블
  where (문자데이터)칼럼명 like '____-1%' 
  
  -- 앞에 6글자는 아무것이나 와도 되나, 그 뒤는 '-1'이 오는 데이터만 추출

 

■ 정규식을 이용한 패턴 비교(REGEX_LIKE)

정규식은 차후에 업로드 예정

 

▼  연산자 예시 *출처 : 뉴렉처  

 

[1] 산술 연산 / 문자열 결합 예시

--덧셈은 숫자만 더하기 때문에 숫자 + 문자면 숫자로 더해진다 
SELECT 1+'3' FROM DUAL;
--문자와 문자를 더하기
SELECT 1 || '3' FROM DUAL;

--Q. 모든 회원의 이름을 조회하시오. 단 이름은 ID를 붙여서
SELECT NAME || '(' || ID || ')' "이름(ID)" FROM MEMBER;

>> 마지막 Q결과

 

[2] 비교연산자 예시

-- 게시글 중에서 작성자가 '홍길동'인 게시글만 조회
SELECT * FROM NOTICE WHERE WRITER_ID = '홍길동';

-- 게시글 중에서 조회수가 100이 넘는 글만 조회
SELECT * FROM NOTICE WHERE HIT > 100;

-- 게시글 중에서 내용을 입력하지 않은 게시글을 조회
-- ★ NULL의 경우 = 연산자 사용 불가. 반드시 IS를 써야한다.
SELECT * FROM NOTICE WHERE CONTENT IS NULL;

 

[3] 논리연산자 예시

-- 조회수가 0, 1, 2인 게시글을 조회하시오.
SELECT * FROM NOTICE WHERE HIT IN (0, 1, 2);
SELECT * FROM NOTICE WHERE HIT = 0 OR HIT = 1 OR HIT = 2;
SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 2;
SELECT * FROM NOTICE WHERE 0 <= HIT AND HIT <= 2;

--조회수가 0, 2, 7인 게시글을 조회하시오.
SELECT * FROM NORICE WHERE HIT IN (0, 2, 7);
SELECT * FROM NOTICE WHERE HIT = 0 OR HIT = 2 OR HIT = 7; -- 비효율적

--조회수가 0, 2, 7이 아닌 게시글을 조회하시오.
SELECT * FROM NOTICE WHERE HIT NOT IN(0, 2, 7);

 

[4] 패턴 비교 연산자 예시

-- 회원 중에서 '박'씨 성을 조회하시오
SELECT * FROM MEMBER WHERE NAME = '박%'; -- 박% 이라는 문자를 찾는다
SELECT * FROM MEMBER WHERE NAME LIKE '박%';

-- 회원 중에서 '박'씨이고 이름이 외자인 회원을 조회하시오.
SELECT * FROM MEMBER WHERE NAME LIKE '박_';

-- 회원 중에서 '박'씨 성을 제외한 회원을 조회하시오.
SELECT * FROM MEMBER WHERE NAME NOT LIKE '박%';

-- 회원 중에서 이름에 '도'자가 들어간 회원을 조회하시오.
SELECT * FROM MEMBER WHERE NAME LIKE '%도%';

 

 

[예시 코드 출처]

- 뉴렉쳐 강의

http://gostop.hangame.com/gameGuide/gssudda/guide_gssudda01_03.html

package _07_객체지향프로그래밍2;

class SutdaDeck{
	final int CARD_NUM = 20;
	SutdaCard[] cards = new SutdaCard[CARD_NUM];
	
	SutdaDeck() {
		/*
		 * 배열 SutdaCard초기화
		 * 
		 */
	}
} 

class SutdaCard{
	int num;
	boolean isKwang;
	
	SutdaCard(){
		this(1,true);
	}
	
	SutdaCard(int num, boolean isKwang){
		this.num = num;
		this.isKwang = isKwang;
	}
	
	@Override
	public String toString() {
		return num + (isKwang? "K":"");
	}
	
}

public class EX7_1 {
	public static void main(String[] args) {
		SutdaDeck deck = new SutdaDeck();
		for(int i=0; i < deck.cards.length;i++)
			System.out.print(deck.cards[i]+",");
	}

}

>> 결과

1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10,
더보기

[나의 풀이]

SutdaDeck() {
    //1~20까지 1-10순으로 숫자 초기화 **숫자가 1,3,8의 경우 둘 중 하나는 광
    int num = 1;
    for (int i = 0; i < CARD_NUM; i++) {
        if (i == 10) num = 1; 
        if (i+1 == 1 || i+1 == 3 || i+1 == 8) {
            cards[i] = new SutdaCard(num++,true);
        }else {
            cards[i] = new SutdaCard(num++,false);
        }
    }//end for
}//SutdaDeck()

[남궁성님 풀이]

for (int i = 0; i < cards.length; i++){
    //숫자를 넣어줄 변수
    int num = i % 10 + 1;  //i가 0일때 > 1, i가 1일때 >2...i가 10일때 > 1
    boolean isKwang = (i < 10) && (num == 1 || num == 3 || num == 8);
    
    cards[i] = new SutdaCard(num, isKwang);
}

엄청나게 간결해진 코드. 객체 생성자의 매개변수에 연산식을 줌으로써 코드를 확 줄였다.

▶ 내가 잡고 가야할 점 : 복잡한 조건문을 쓰기 보다, 변수 자체에 연산식을 사용하는 법을 먼저 고려해보자.

 

package _07_객체지향프로그래밍2;

class SutdaDeck2{
	final int CARD_NUM = 20;
	SutdaCard2[] cards = new SutdaCard2[CARD_NUM];
	
	SutdaDeck2() {
		
		//문제 7_1 정답

	}//SutdaDeck()
    
    //(1) 정의된 세개의 메서드 작성
} 

class SutdaCard2{
	int num;
	boolean isKwang;
	
	SutdaCard2(){
		this(1,true);
	}
	
	SutdaCard2(int num, boolean isKwang){
		this.num = num;
		this.isKwang = isKwang;
	}
	
	@Override
	public String toString() {
		return num + (isKwang? "K":"");
	}
	
}

public class EX7_2 {
	public static void main(String[] args) {
		SutdaDeck deck = new SutdaDeck();
		
		System.out.println(deck.pick(0));
		System.out.println(deck.pick());
		deck.shuffle();
		
		for(int i=0; i < deck.cards.length;i++)
			
		System.out.print(deck.cards[i]+",");
		System.out.println();
		System.out.println(deck.pick(0));
	}

}

>> 결과

1K
7
2,6,10,1K,7,3,10,5,7,8,5,1,2,9,6,9,4,8K,4,3K,
2
더보기

[나의 풀이]

void shuffle() {
    SutdaCard2 tmp;
    int ran = 0;
    for (int i = 0; i < cards.length; i++) {
        ran = (int)(Math.random()*cards.length)+1;
        tmp = cards[i];
        cards[i] = cards[ran];
        cards[ran] = tmp;
    }
}

SutdaCard2 pick(int index) {
    //배열 cards에서 지정된 위치의 SutdaCard를 반환한다
    return cards[index];
}

SutdaCard2 pick() {
    //배열 cards에서 임의의 위치의 SutdaCard를 반환 
    int ran = (int)(Math.random()*cards.length)+1;
    return cards[ran];
}

[남궁성님 풀이]

void shuffle() {
    for(int i=0; i<cards.length;i++) {
        int j = (int)(Math.random()*cards.length);
        // cards[i] cards[j] . 와 의 값을 서로 바꾼다
        SutdaCard tmp = cards[i];
        cards[i] = cards[j];
        cards[j] = tmp;
    }
}

SutdaCard pick(int index) {
    if(index < 0 || index >= CARD_NUM) // index의 유효성을 검사한다
        return null;
        return cards[index];
}

SutdaCard pick() {
    int index = (int)(Math.random()*cards.length);
    return pick(index); // pick(int index)를 호출한다
}

매개변수의 유효성을 고려하지 않았다! 오마이갓 (잊어버림)

▶ index가 0보다 작거나 또는 배열의 범위를 넣어가버린다면 예외(ArrayIndexOutOfBounds)가 발생할 거다.

▶ 항상 메소드를 작성할 때는 수식을 쓰기 전에 매개변수의 유효성을 고려하자! (<<제발 ㅠ)

더보기

[나의 답변]

오버라이딩은 부모로부터 상속받은 메소드를 자식이 새롭게 재정의 하는 것을 말한다.

오버라이딩은 다형성과도 연관이 있는데,

일반 클래스, 추상 클래스, 인터페이스로부터 상속받은 메소드를 자식이 오버라이딩할 수 있으면,

(1) 불필요한 코드의 중복을 줄일 수 있고

(2) 개발자가 다수의 메소드를 생성하고 익히지 않고도 단순히 기존 메소드를 재정의함으로 원하는 기능을 다향하게 구현할 수 있다.

 

[남궁성님 답변]

오버라이딩이란, 조상클래스로부터 상속받은 메서드를 자손 클래스에 맞게 재정의 하는 것을 말한다.

조상 클래스로부터 상속받은 메서드를 자손 클래스에서 그대로 사용할 수 없는 경우가 많기 때문에 오버라이딩이 필요하다.

더보기

[나의 답변]

c. 더 넓은 범위여야 한다.

d. 

 

[남궁성님 답변]

c. 접근 제어자는 조상의 메서드 보다 더 넓은 범위여야 한다.

d. 조상의 메서드 보다 더 많은 수의 예외를 선언할 수 있다. -- 긴가민가 했던 부분

더보기

[나의 답변]

Tv의 부모인 Product클래스에서 (매개변수가 없는) 디폴트 생성자가 적혀있지 않다.

매개변수를 가진 생성자를 형성하면, 디폴트 생성자는 컴파일러가 자동 생성해주지 않기 때문에

Product(){ }  를 개발자가 입력해주어야 한다.

더보기

[나의 답변]

자손 클래스 생성자에서 super() 를 통해 자손 클래스의 변수와 메서드를 상속받기 때문이다.

[남궁성님 답변]

▶ 다시 생각해볼 부분 : 

- 초기화는 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자 순으로 간다. 

- 만약 상속을 했다면, 여기에서 플러스로

  내 생성자 -> 부모 생성자 : 부모의 변수를 초기화 -> 부모 변수 값 물려받음

- 만약 내 생성자에서 변수값을 고치지 않는다면 부모 변수 값이 유지될 것이다.  

더보기

[나의 답변]

*호출 순서는 들어온 순서란 건가..? 스택에 쌓이는 순서는 child부터일텐데..

호출 순서 : Child(){} -> Parent(){} -> Parent(int x)  -> Child(int x)  

실행 결과 : 1000

 

[남궁성님 답변]

Child() -> Child(int x) -> Parent() -> Parent(int x)

실행 결과는 x = 200

 

- 해설 :

 

▶ 다시 생각할 부분 : this()로 나 자신의 다른 생성자를 호출하면 컴파일러는 super()를 자동 생성하지 않는다. 

 

더보기

[나의 답변] b  --- 틀렸다! 패키지 밖에서 상속을 받으면 접근범위가 당연히 디폴트보다 넓을 텐데 왜 생각을 못했지ㅋㅋ 기왕 틀린 김에 한 번 더 숙지하고 가야겠다

[남궁성님 해설] 답은 a다. 

더보기

[나의 답변]

(궁금증.. a 보니까 든 생각. 상수는 전역(맴버필드)에 붙이는게 낫지 않을까. 지역변수에 쓰는 경우도 있을까?)

c. 오버로딩은 되는데, 오버라이딩 불가

[남궁성님의 해설]

더보기

[나의 답변]

class MyTv2 {
	private boolean isPowerOn;
	private int channel;
	private int volume;
	final int MAX_VOLUME = 100;
	final int MIN_VOLUME = 0;
	final int MAX_CHANNEL = 100;
	final int MIN_CHANNEL = 1;
	
	public void setIsPowerOn(boolean isPowerOn){
		this.isPowerOn = isPowerOn;
	}
	
	public boolean getIsPowerOn() {
		return this.isPowerOn;
	}
	
	public void setChannel(int channel) {
		this.channel = channel;
	}
	
	public int getChannel() {
		return this.channel;
	}
	
	public void setVolume(int volume) {
		this.volume = volume;
	}
	
	public int getVolume() {
		return this.volume;
	}
	
}//end class

[남궁성님 풀이]

-- 정말 private과 getter setter만 만드는데 치중하느라 MIN과 MAX를 설정할 생각을 안했다. 함정이네 함정이야.ㅠ 그런데 현장에서도 늘 이렇게 범위를 고려해야하는 건 맞기에.. 앞으로 생각의 생각을 더 해야겠다.

 

■ 제약조건(Constraint)이란?

- 데이터베이스에 들어있는 데이터의 무결성(정확성/일관성)을 보장하기 위해

  부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하는 차원에서 걸은 제약 조건

- 모든 제약조건은 데이터사전(Dictionary)에 저장된다.

- 제약조건에 사용자 지정 이름을 달면 Constraint를 쉽게 참조할 수 있다.

  *사용자 지정 이름 생성시, 표준 객체 명명법을 따르는 것이 좋다. 

 

■ 제약조건의 종류

종류 내용 관련 무결성
not null 데이터가 없을 때(null 상태) 삽입을 허용 안 함 널 무결성
unique 도메인 내 중복값 허용 안 함 고유 무결성
check 조건에 맞는 값만 허용 도메인 무결성
default 기본값 -
primary key 기본키  *기본키로 설정된 도메인에 not null + unique + index 제약이 자동 설정 키 무결성
foreign key 외래키 *현재 입력(수정) 값의 유효성을 외부 데이블 부모키(컬럼)을 참조해서 체크 참조 무결성

★ 무결성의 종류

  1. 널 무결성 : 릴레이션의 특정속성 값이 Null이 될 수 없도록 하는 규정  *릴레이션 = 테이블
  2. 고유 무결성 : 릴레이션의 특정 속성에 대해서 각 튜플이 갖는 값들이 서로 달라야 한다는 규정
  3. 참조 무결성 : 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다는 규정 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정
  4. 도메인 무결성 : 특정 속성의 값이, 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정
  5. 키 무결성 : 하나의 테이블에는 적어도 하나의 키가 존재해야 한다는 규정

 

■ 제약조건 조회 - 딕셔너리에서 조회 

※ 유의할 점! 딕셔너리 내의 모든 정보는 대문자로 저장된다.

   따라서, where문을 통해 특정 테이블을 지정할 때는 꼭 upper('   ')를 쓰도록 하자.

 

[1] CMD에서 아래와 같이 제약조건에 관한 데이터들 확인

desc user_constraints

>> 결과

[2] 찾고자 하는 정보에 대한 명령어 입력

select owner, constraint_name, constraint_type, table_name from user_constraints

>> 결과

[3] 특정 테이블에 대한 정보만 뽑아서 보기

select owner, constraint_name, constraint_type, table_name from user_constraints
  where table_name = upper('userInfo3')

>> 결과

 

제약조건 생성

[방법1] 테이블 생성 시 제약에 대한 명칭 없이 조건만 다는 방법

create table userInfo
(
    name      varchar2(100) not null,
    nickname  varchar2(100) null       
)
/

 

[방법2] 테이블 생성 시 제약에 대한 명칭과 함께 조건을 다는 방법

create table userInfo2
(
    name      varchar2(100) not null,
    id        varchar2(100) not null unique,
    password  varchar2(100) not null,
    
    constraint unique_userInfo2_password unique(id)
)
/

 

[방법3] 테이블 생성 후 제약에 대한 명칭과 함께 조건을 다는 방법  ** 가장 많이 사용되는 코드이다.

create table userInfo3
(
    name      varchar2(100) not null,
    id        varchar2(100) not null unique,
    password  varchar2(100) not null
)
/

alter table userInfo3 
  add constraint unique_userInfo3_password unique(password);
더보기

방법2,3과 같이 제약조건에 사용자지정 명칭을 다는 경우

이클립스 안에서 에러 메세가 나타날 때,사용자 지정 명칭을 확인할 수 있다.

 

[예시] 괄호 안에,   계정.사용자지정명칭   양식으로 나타난다.

※ 제약 조건의 명칭은 모두 대문자로 저장된다.

 

■ 제약조건 삭제

alter table 테이블명 drop constraint 제약조건명

 

  NOT NULL & UNIQUE  

create table userInfo3
(
    name      varchar2(100) not null,
    id        varchar2(100) not null unique,
    password  varchar2(100) not null
)

alter table userInfo3
  add constraint unique_userInfo3_password unique(password);
  
insert into userInfo3 values('홍길동','hong123','1234'); -- OK
insert into userInfo3(name) values('나길동'); -- 에러! 데이터 미삽입 : 널 무결성 위배 
                                            --ORA-01400: NULL을 ("TEST1"."USERINFO3"."ID") 안에 삽입할 수 없습니다
insert into userInfo3 values('다길동','hong123','2345'); -- 에러! 중복값 추가 : 고유 무결성 위배
                                                       -- ORA-00001: 무결성 제약 조건(TEST1.SYS_C004094)에 위배됩니다

위 코드를 이클립스에서 하나씩 [ALT]+[X]해서 실행해보면 먼저, 아래와 같이 에러 메세지가 나타난다. 

ORA-01400: NULL을 ("TEST1"."USERINFO3"."ID") 안에 삽입할 수 없습니다

그 다음으로 나타나는 에러 메세지는 아래와 같은데, unique로 id에 중복을 불허했는데 중복된 id를 넣어버렸다는 의미

 

  CHECK  

- 문법

alter table 테이블명
  add constraint 제약조건명 check(조건절)

- 실제 코드

alter table userInfo3
  add constraint check_userInfo3_mat check(mat between 0 and 100)

 

  DEFAULT  

- 문법

alter table 테이블명 
  modify 칼럼헤딩 타입 default 'UNKNOWN'

- 실제코드

alter table userInfo3 
  modify name varchar2(100) default 'UNKNOWN'

 

  Primary Key  

※ 기본키를 지정해주면 해당키 칼럼에 not null과 unique제약이 걸리며, 해당키 칼럼은 테이블의 index가 된다. 

※ 모든 테이블은 키 무결성 원칙을 지키기 위해 최소 1개의 primary key를 가지고 있다.

 

[1] 하나의 키를 지정하는 방법

- 문법

alter table 테이블명
  add constraint 제약조건명 primary key(칼럼명);

- 실제코드

alter table tb5
  add constraint pk_tb5_idx primary key(idx);
더보기

[2] 두개의 키를 함께 지정하는 방법

- 문법

alter table 테이블명
  add constraint 제약조건명 primary key(칼럼명,칼럼명)

- 실제코드

alter table tb5
  add constraint pk_tb55_idx_regdate primary key(idx,regdate)
  두 개를 한 번에 키로 묶은 경우에 : 
  둘 중 하나의 키가 다를 경우에 기본키값이 매칭되지 않은 걸로 인식 
  두 가지 모두가 일치해야 기본키값이 동일한 것으로 인식하여 에러가 발생한다.

 

  Foreign Key  

※ 테이블을 정규화하여 두 개의 테이블(A테이블, B테이블)로 나누었다고 가정

   -  A테이블의 XXX칼럼이 A테이블의 index(primary key)이며, B테이블에도 XXX칼럼이 있다고 할 때,

   -  B테이블의 XXX칼럼을 foreign key로 주고 A테이블의 primary key를 참조하게 한다.

- 문법

-- A테이블의 기본키
alter table A테이블
  add constraint 제약명칭 primary key(XXX칼럼명)

-- B테이블의 외래키
alter table B테이블
  add constraint 제약명칭 foreign key(XXX칼럼명) references A테이블명(XXX칼럼명);

- 실제 코드

더보기

[원본 테이블 : userInfo3]

-- 원본 테이블 ) userInfo3
create table userInfo3
(
    SID       int,           
    name      varchar2(100) not null,
    id        varchar2(100) not null unique,
    password  varchar2(100) not null,
    eng       int           check(eng between 0 and 100),
    mat       int           check(mat between 0 and 100)
)

alter table userInfo3 
  add constraint pk_userInfo3_SID primary key(SID)

insert into userInfo3 values(1001, '김길동', 'kim1234', '1234', 88, 100);
insert into userInfo3 values(1002, '나길동', 'nah1234', '2345', 78, 90);
insert into userInfo3 values(1003, '다길동', 'dah1234', '2345', 98, 50);

select * from userInfo3

>> 결과

[A테이블 : userInfoRevised1]

-- A테이블 ) userInfoRevised1
create table userInfoRevised1
(
    SID       int,           
    name      varchar2(100) not null,
    id        varchar2(100) not null unique,
    password  varchar2(100) not null
)

alter table userInfoRevised1
  add constraint pk_userInfoRevised1_SID primary key(SID)

insert into userInfoRevised1 values(1001, '김길동', 'kim1234', '1234');
insert into userInfoRevised1 values(1002, '나길동', 'nah1234', '2345');
insert into userInfoRevised1 values(1003, '다길동', 'dah1234', '2345');

select * from userInfoRevised1

>> 결과

[B테이블 : userInfoRevised2]

-- B테이블 : userInfoRevised2
create table userInfoRevised2
(
    idx       int,
    SID       int,           
    name      varchar2(100) not null,
    eng       int           check(eng between 0 and 100),
    mat       int           check(mat between 0 and 100)
)

alter table userInfoRevised2 
  add constraint pk_userInfoRevised2_idx primary key(idx)
  
alter table userInfoRevised2
  add constraint fk_userInfoRevised2_SID foreign key(SID) references userInfoRevised1(SID)

insert into userInfoRevised2 values(1, 1001, '김길동', 88, 100); -- OK
insert into userInfoRevised2 values(2, 1002, '나길동', 78, 90);  -- OK
insert into userInfoRevised2 values(3, 1005, '다길동', 98, 50);  -- 에러! 없는 SID 코드

>> 결과

 

 

[출처]

http://www.gurubee.net/lecture/1013

https://programming119.tistory.com/225

https://coding-factory.tistory.com/221

 

[참조]

https://ltk3934.tistory.com/67

https://all-record.tistory.com/151

국비지원 수업 내용 참조

■ 선형검색 : 정렬되지 않은 데이터를 0부터 끝까지 확인할 때 유리

- 의사코드

for i from 0 to n-1
  if i'th element is the target value
     return true
  return false

- 자바코드

package linearSearch;

import java.util.Arrays;

public class LinearSearch1 {

	public static void main(String[] args) {
		int[] arr = new int[10];
		init(arr);
		System.out.println(Arrays.toString(arr));
		
		//linear search
		//전제 : 정렬되지 않은 데이터
		//찾으려는 수 : 5
		for (int i = 0; i < arr.length; i++) {
			if (arr[i]==5) {
				System.out.println("index : "+i);
				break;
			}
		}
	}
	
	public static void init(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random()*arr.length)+1;
			for (int j = 0; j < i; j++) {
				if (arr[i]==arr[j]) {
					i--;
					break;
				}
			}
		}
	}
}

>> 결과

[9, 3, 6, 8, 1, 5, 7, 4, 2, 10]
index : 5

 

■ 이진검색 : 정렬된 데이터들 안에서 특정 데이터를 찾을 때 유리

- 의사코드

*찾고자 하는 값이 50일 때,

if middle item is 50
	return true
else if 50 < middle item
	search left half
else if 50 > middle item 
	search right half

- 수학적 논리 : 중앙값을 지정한 후, left~right의 범위를 줄여가면서 logN의 속도로 탐색을 하는 방법

- 자바 코드

package BasicSearch;

public class _01_BinarySearch {

	public static void main(String[] args) {
		int[] arr = new int[] {1,2,3,4,5,6,7,8,9,10};
		int key = 3;
		
		int mid;
		int left = 0;
		int right = arr.length-1;
		while(left<=right) {
			mid = (left+right)/2;
			
			if(key==arr[mid]) {
				System.out.println("index : "+mid);
				break;
			}
			
			if(key < arr[mid]) {
				right = mid-1;
			}else if(key > arr[mid]) {
				left = mid+1;
			}
		}//end while
	}//end main

}

>> 결과

index : 2

 

 

※ 참조 : 자료구조에 대한 정리

https://why-dev.tistory.com/6?category=917883 

 

[컴퓨터 공학_복습] 알고리즘 정의, 검색과 정렬 알고리즘

심플한 개발 [컴퓨터 공학_복습] 알고리즘 정의, 검색과 정렬 알고리즘 본문 컴퓨터공학 [컴퓨터 공학_복습] 알고리즘 정의, 검색과 정렬 알고리즘 심플한 개발 2022. 1. 26. 17:27 Prev 1 ··· 3 4 5 6 7 Ne

why-dev.tistory.com

 

■ DDL(Data Definition Language) : DB의 객체를 생성/삭제/수정하는 언어

CREATE 객체 생성
DROP 객체 삭제
ALTER 객체 수정
CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      VARCHAR2(50),
    NAME     VARCHAR2(50),
    GENDER   CHAR(50),
    AGE      NUMBER,
    BIRTHDAY CHAR(50),
    PHONE    CHAR(50),
    REGDATE  DATE
)

DROP TABLE MEMBER;

-- 1. 자료 타입 변경
-- 기존 데이터가 10보다 넘어가는 게 있으면 크기 수정이 안된다.
ALTER TABLE MEMBER MODIFY ID VARCHAR2(10); 

-- 2. 칼럼 삭제
ALTER TABLE MEMBER DROP COLUMN AGE;

-- 3. 행 추가
ALTER TABLE MEMBER ADD EMAIL VARCHAR2(200);

 

■ DML(Data Manipulation Language) : DB의 데이터를 생성/조회/갱신/삭제하는 언어

- CRUD의 개념 : Create(생성), Read(=RETRIEVE읽기/조회), Update(갱신), Delete(삭제)

  - 데이터는 일반적으로 CRUD방식을 통해 관리된다.

INSERT 삽입 *테이블에 삽입한다는 개념으로 INSERT 사용
SELECT 조회 *테이블에서 특정 데이터를 뽑아서 본다는 개념으로 SELECT 사용
UPDATE 갱신
DELETE 삭제

 

[1] INSERT  __ * 코드 원본 출처 : 뉴렉쳐 강의

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      VARCHAR2(50),
    NAME     VARCHAR2(50),
    GENDER   CHAR(50),
    AGE      NUMBER,
    BIRTHDAY CHAR(50),
    PHONE    CHAR(50),
    REGDATE  DATE
);

-- 대문자를 주로 사용. (대소문자 구분x) / 다만 비교를 할 때는 소문자 사용
INSERT INTO MEMBER(ID, PWD) VALUES('NEW LEC','111');
INSERT INTO MEMBER(ID, PWD) VALUES('DRAGON','111');
SELECT id, name, pwd FROM MEMBER;
-- "  " 안에 임시 헤딩을 사용하면 대문자로 변환되지 않고 소문자를 그대로 출력한다.
SELECT id "user_ID", NAME, PWD FROM MEMBER;

 

[2] UPDATE  __ * 코드 원본 출처 : 뉴렉쳐 강의

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      VARCHAR2(50),
    NAME     VARCHAR2(50),
    GENDER   CHAR(50),
    AGE      NUMBER,
    BIRTHDAY CHAR(50),
    PHONE    CHAR(50),
    REGDATE  DATE
);

INSERT INTO MEMBER(ID, PWD) VALUES('NEW LEC','111');
INSERT INTO MEMBER(ID, PWD) VALUES('DRAGON','111');

-- 모든 PWD 데이터가 '222'로 바뀐다.
UPDATE MEMBER SET PWD = '222';

UPDATE MEMBER SET PWD = '222' WHERE ID = 'newlec';

-- 문자 데이터의 경우 대소문자를 구분하기 때문에 대소문자까지 일치해야한다.
UPDATE MEMBER SET PWD = '333', name = '손오공' WHERE ID = 'DRAGON';

 

[긴 코드 예시_테이블 생성/수정/삭제 & 데이터 CRUD]

create table scores
(
--변수명 자료형
--//크기는 넉넉하게 준다.
  name  varchar2(100), --byte단위 가변길이
  kor   number(5),     --숫자의 길이 단위
  eng   int, 
  mat   number(5,1),
  prev  char(4)         --byte단위 고정길이
)
/

--////////////////////////////////////////////////////////////////////--
-- DML(Data Manipulation Language) : insert update delete select(CRUD)

--데이터 삽입 - insert into ~~ values ();
insert into scores values('김길동',80,80.5,80.5,'A');
insert into scores values('나길동',90,95,100,'B');
insert into scores values('다길동',75,23,55,'C');
insert into scores values('라길동',88,55.5,60,'A'); --int형에 55.5를 넣으면 반올림이됨
insert into scores(name,kor,eng) values('바길동',99,100);

--데이터 조회 - select ~~ from ~~~ 
select * from scores
select 
   name, kor, eng, mat, prev
from scores
select
   name, kor
from scores
select
   name, kor, eng, mat, prev,
   (kor+eng+mat)/3 as avg
from scores
select
   name, kor, eng, mat, prev,
   rank() over(order by (kor+eng+mat) desc) as rank
from scores

-- 데이터 갱신 - update ~~ set ~~~ where ~~~
update scores set kor = 10;   -- <<모두 갱신
update scores set kor = 85 where name = '나길동'
update scores set eng = 90 where name = '라길동'
update scores set name = '마길동' where name = '다길동';
update scores set name = '다길동' where name = '라길동';  

-- 데이터 삭제 - delete ~~ from ~~~ where ~~~
delete from scores --전체 데이터 삭제
delete from scores where name = '바길동'
delete from scores where 1 = 1; -- 전체 데이터 삭제

--///////////////////////////////////////////////////////////////////--
-- DDL(Data Definition Language) : create(생성), drop(삭제), alter(수정)

-- 테이블 수정
-- 1. 칼럼 추가
-------------칼럼 추가시 이슈사항 : 칼럼을 추가하면 이전의 연산식을 수정해야한다.(사전 데이터 설계의 중요성)
alter table scores add sci int;
alter table scores add commt varchar2(600); --최대 200글자
update scores set sci = 100, commt = '잘했어요.';
select * from scores
-- 2. 칼럼 삭제
alter table scores drop column prev;

-- 테이블 삭제
drop table scores;

>> 결과 (테이블 삭제 전)

 

 

[참조 출처] 뉴렉쳐 강의

1. 테이블 용어

행의 집합을 instance라고도 한다.

 

2. 데이터 타입

- 데이터 타입에는 아래와 같이 여러가지가 있다. 현재 단계에서는 기본 빌트인 데이터 타입만 확인.

원본: 유투브 뉴렉처

[ Oracle Built-in Data Types ]

자료형 예시   종류 최대 길이
Character 'A'
'123'
고정 길이 CHAR(size [BYTE | CHAR]) 4000BYTE
가변 길이* VARCHAR2(SIZE [BYTE | CHAR])
고정 길이 NCHAR(SIZE)
가변 길이* NVARCHAR2(SIZE)
CLOB   대용량 문자   4GB
Numeric 25
3.55
3.55F
  NUMBER(P , S)
* P : 전체 자릿수, S : 소수점 자릿수
38
DATE '2013-11-25' 날짜    
TIMESTAMP   날짜 + 시분초    

 

▶ CHARACTER

 

- CHAR(SIZE [BYTE | CHAR]) 는 고정 길이이다.

  > 고정 길이는 가변 길이 보다 검색 속도가 더 빠르다. (왜냐면, CHARACTER는 구분자를 통해 구분되기 때문)

  > 가급적 고정적인 데이터는 VARCHAR2( ) 보다 CHAR을 사용하는 것이 좋다. 

  > 오라클에서 기본적으로 AL32UTF8 인코딩 방식 사용 [한 글자에 3BYTE]

- VARCHAR2(SIZE [BYTE | CHAR]) 는 가변 길이이다.

  > 지정해둔 사이즈만큼 메모리 공간을 쓰는 것이 아니며, 실제 저장한 문자 크기 만큼만 메모리 공간을 사용한다.

- NCHAR(SIZE)

  > 세계 각국의 문자를 사용할 수 있는 데이터 형태.

  > 오라클에서 기본적으로 AL16UTF16 인코딩 방식 사용 [한 글자에 2BYTE]

  > 고정 길이 문자이면서, 세계 각국 언어(그 중에 한글도 포함)을 쓸 경우엔 NCHAR을 쓰는게 효율적이다.

- NVARCHAR2(SIZE)

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      NVARCHAR2(50),
    NAME     NVARCHAR2(50),
----GENDER   CHAR(6),       --- 남성, 여성, 기타 // 6 BYTE로 지정
----GENDER   CHAR(2 CHAR),  --- 2 뒤에 CHAR 선택
    GENDER   NCHAR(2),      --- 2 뒤에 CHAR 지정x >> 2 글자라는 의미 
    AGE      NUMBER,
    BIRTHDAY CHAR(50),  --- 2000-03-05   고정길이
    PHONE    CHAR(13),  --- 010-123-2345 고정길이
    REGDATE  DATE
)

SELECT LENGTH('한글') FROM DUAL;    --- 결과 : 2
SELECT LENGTHB('AB') FROM DUAL;     --- 결과 : 2  << 2바이트
SELECT LENGTHB('한글') FROM DUAL;   --- 결과 : 6

--문자 환경설정 확인
SELECT * FROM NLS_DATABASE_PARAMETERS; -- NCHAR은 한글 한글자에 2BYTE사용
[문자도 정렬이 될까?]

※ 문자도 SORTING이 된다 (A,B,C,D,.... 숫자면 1, 2, 3, 4....)
- 아래와 같이 날짜 타입의 데이터를 문자로 변환 후 그 문자의 최소값을 구하는 게 가능하다.

   SELECT * FROM sawon
     WHERE TO_CHAR(sahire,'YYYY-MM-DD') = (SELECT MIN(TO_CHAR(sahire,'YYYY-MM-DD')) FROM sawon) 

 

3. 간단 sql 명령어

간단 sql 명령어 정리

■ 로그인
sqlplus host/password

■ 연결
connect scott/tiger

■ 현재 사용자 출력
show user

■ 테이블 구조 설명 출력
describe tab 
또는
desc tab

■ 잠깐 cmd으로 넘어가기
host >> 잠시 cmd로 이동
exit >> 다시 sql로 넘어감

■ SQL 나가기
exit

 

4. 메모장으로 sql파일 저장 후, CMD에서 실행하기

[1] SQL파일 저장

※ 유의사항 : 사전에 sql파일을 저장할때 인코딩 charset을 ANSI로 설정
why? OS운영체제에 따라 사용하는 인코딩이 다르기 때문(ex. window - MS949)

 

[2] SQL파일 실행하기
1. cmd에서 sql파일 위치로 cd 경로 이동 
2. sqlplust host/password 접속

3. @a로 파일 실행
※ 에러 : 단일 인용부를 지정해 주십시오 << 인코딩이 맞지 않아서다.(파일을 재저장하면 된다)

 

[3] sql파일 수정

edit (파일명) 또는 ed (파일명)
--확장자 제외 파일명 입력

 

 

[참조]

http://www.gurubee.net/lecture/1380

1. 유저 생성 - create user (대상) identified by (비밀번호)

https://ajdahrdl.tistory.com/2

 

[Oracle] 계정 생성 및 권한 부여 방법

Oracle 11g 기준으로 작성된 글입니다. oracle 11g 설치를 다 하신 후에 cmd와 sql developer에서 oracle에 접근해 계정 설정이 가능합니다. 1. cmd에서 계정 설정하기 1) cmd에서 접속하기 sqlplus 로 접속하시면..

ajdahrdl.tistory.com

> 관리자 아이디로 접속 후
create user 계정 identified by 비밀번호

 

2. 권한 부여 - grant connect/ grant resource/grant select ....

[1] 연결 권한 - grant connect to (대상)

grant connect to 계정       --- 연결 권한

 

 

[2] 테이블 권한 부여 - grant resource to (대상)

grant resource to 계정      --- 자원(Table) 생성 관리할 수 있는 권한
-- 위의 2개 명령을 한 번에 처리
grant connect,resource to 계정

▶ 자원 권한 부여

 

[3] 뷰 권한 부여 - grant create view to (대상)

GRANT CREATE VIEW TO 계정

 

[4] 객체 조회 권한 부여 

grant all   -- 모든 권한 부여(위험)
grant select on 테이블 또는 뷰명 to 계정   -- 조회(SELECT) 권한 부여

 

3. 권한 회수(취소) - revoke connect/ revoke resource / grant select...

 

[1] 연결 및 자원 권한 회수

revoke connect,resource from 계정

[2] 객체 조회 권한 회수 - revoke select on (객체) from (대상)

revoke select on 테이블 또는 뷰명 from 계정  -- 권한 회수

scott안에 dept은 있지만 조회가 되지 않음에 대해 이렇게 에러 메세지 노출된다

 

 

 

※ 더 많은 사용자 관련 명령어

https://aileen93.tistory.com/17

 

[Oracle] 오라클 DB 계정 생성 및 사용자 확인

오라클 DB 계정 생성 및 사용자 확인하는 방법 오라클의 관리자 계정은 DBA 권한을 가지고 있어야 하며, 오라클 설치 시 기본적으로 Scott(사용자)가 자동 생성됨 서버에서 ORACLE 접속시   su - oracle

aileen93.tistory.com

 

 

[참조]

- 국비지원수업과정

- 꿈꾸는 개발자 http://www.gurubee.net/lecture/1009

 

■ Git이란?

- 버전관리시스템 (VCS-Version Control System)의 한 종류

 

설치하기

Git에서 프로그램 설치 후, 순수명령어를 Terminal를 통해 사용할 수 있다.

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

 

 설치확인

git --version

 

■ 환경설정

//git의 모든 환경설정은 git config 안에 저장된다.

//이름/이메일 설정
git config --global user.name "simple"
git config --global user.email "goeun930705@gmail.com"

//모든 환경설정 확인
git config --list

//줄바꿈 관련 설정
//OS에 따라 줄바꿈 명령이 다르다. -- window : \r\n, 맥 : \n
//window
git config --global core.autocrlf true
//mac
git config --global core.autocrlf input

 

■ 저장소 만들기

[방법1] 기존 프로젝트나 디렉토리를 git 저장소로 만들기

//경로 변경
cd C:\Work\Git

//새로운 경로 형성
mkdir JavaStudy

//깃 경로 현재 경로로 초기화
git init

/////////아래는 참조///////
//깃 삭제
rm -rf .git

//깃 상태 확인
git status

[방법2] 다른 서버에 있는 저장소를 복제하기

git clone <remote-url>

 

■ 원격 저장소 추가

//로컬 저장소를 원격 저장소와 연결하는 방법
git remote add origin<remote-url>

//원격 저장소 url 변경시
git remote set-url origin<remote-url>

 

 공간

원본 : 부스트코스 웹UI개발

▶ Working Directory : 파일을 추가/수정/삭제하는 공간 (.git 디렉토리를 제외한 플젝 dir 내의 모든 공간)

▶ Staging Area : index라고 하며, 저장소와 작업 디렉토리 중간에 있는 공간. 커밋 전 준비 역할(Stage=스냅샷 형성). 커밋하면 repository로 이동. *커밋한다 = git 디렉토리에 영구적인 스냅샷으로 저장한다.

▶ .git directory(Repository) : = 저장소. git이 프로젝트의 메타데이터와 객체 DB를 저장하는 곳

 

■ 상태

▶ untracked(추적되지 않음) : 작업 디렉토리에 있는 상태. 인덱스나 저장소에 한 번도 들어간 적이 없거나 무시된 상태

▶ unmodified(수정되지 않음) : 저장소에 커밋된 파일이 수정되지 않은 상태

▶ modified(수정됨) : 이미 커밋된 파일이 수정되었음

▶ staged/indexed(인덱스됨) 

*저장소를 clone하면 어떤 상태일까? tracked/unmodifed <<- 마지막 커밋 이후 아무것도 수정되지 않은 상태

원본 : 부스트캠프 웹 UI개발

▶ ignored(무시됨) : 변경사항을 추적할 필요 없는 것을 ignore처리

 

명령어 옵션 

//add 뒤에 붙은 -xxx는 옵션이다.
git add -A
git add -all

 

[참고 : Git과 Github의 차이]

- Git을 통해 코드를 호율적으로 관리할 수 있다.

- Github는 클라우드를 통해 Git을 이용할 수 있는 것으로, Github외에도 Git를 외부 개발자와 공유할 수 있는 프로그램들이 있다.

https://www.youtube.com/watch?v=YFNQwo7iTNc 

 

[본문 원본]

https://www.boostcourse.org/web344/lecture/35139/?isDesc=false 

 

[참조]

https://www.youtube.com/watch?v=Z9dvM7qgN9s 

■ 오라클 설치하기
https://misrover.tistory.com/114

 

[오라클 설치] 오라클 XE 설치 및 다운로드

오라클 11g XE 11.2 다운로드 오라클 XE는 오라클 데이터베이스 학습할 때 사용합니다. 인터페이스가 편하고, 무료라서 학습용으로 적합합니다. 오라클 XE는 오라클 홈페이지에서 다운로드 가능합

misrover.tistory.com

 

■ 사용자 생성하기

https://why-dev.tistory.com/71

 

[DATABASE] DDL, DCL_ 객체 생성 및 사용자 조회 권한 부여

■ DDL (Data Definition Language) : 데이터베이스 객체(테이블,뷰,인덱스...)의 구조를 정의 CREATE 객체 생성  *객체 : 사용자, 테이블, 뷰 .... DROP 객체 삭제 ALTER 객체 재정의 ■ DCL(Data Control Langu..

why-dev.tistory.com

 

■ 사용자 로그인하기

[방법1] 웹 브라우저(HTTP SERVICE)에서 Oracle 접속하기

※ 이건 10g 버전의 경우에만 가능하며, 아래와 같은 방식은 DBO관리자가 주로 사용하기 용이

http://127.0.0.1:8080/apex

 

[방법2] CMD창에서 클라이언트 도구 sqlplus.exe 통해 접속하기

sqlplus.exe 계정/암호

 

[방법3] 이클립스에서 접속하기

※ 사용자는 이미 생성된 상태

새로운 Database connection를 만들거다
내가 등록했던 정보 작성후 [Test Connection] 하기 *xe는 오라클 버전이다.
사용자 선택 후 오른쪽 마우스하여 Connect를 누른다.
이클립스 상단에서 [1] 내 오라클 버전 [2] 사용자명 [3] Databse를 선택한다.

 

[방법4] 외부 클라이언트 도구 - ex. SQL developer

 

■ 전체 사용자 조회하기

//모든 사용자 관련 정보를 설명하라
desc all_users

//모든 사용자들 데이터들을 출력하라
select * from all_users;

 

이클립스와 오라클 DBMS를 연결하기

[상황1] 서버가 내 컴퓨터(로컬)에 있을 때 == localhost 사용할 때

 

- 작업 1. (선택사항) 계정 하나 만들기 *이미 계정이 있다면 연결만 하기

※ 여기서는 기존에 있는 hr 계정 활성화하는 것으로 대체

[1] 데이터베이스 로그인 후 HR(임시계정) 잠금 풀기
localhost:8080/apex > 관리 > 데이터베이스 사용자 > 비밀번호(1234등 아무거나) > HR잠금 풀기 설정 후 확인

[2] 로그아웃 후 HR로 로그인하여 객체 브라우저로 이동

 

 

- 작업 2. 오라클 driver파일을 작업 프로젝트로 이동시키기

[1] 오라클's이클립스 연결 파일(driver) 경로로 이동
C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib

[2] driver파일을 프로젝트 취상위 경로에 복사하여 이동
ex. OracleStudy폴더에 이동


- 작업 3. 이클립스에서 경로 설정

[1] perpective를 JavaEE로 설정
*JDK 다운시, java SE로 다운받으면 이 설정X


[2] 하단의 [Data Source Explorer] 탭 > [Database Connection] 폴더 선택 후 마우스 오른쪽 > new

 

[3] [New Connection Profile] 윈도우창 설정 후 [NEXT]
    - Connection Profile Types : Oracle 선택
    - Name : Oracle_DBO이름 설정 *아무 이름이나 괜찮음. 한글도 상관 없음. ex) Oracle_hr

 

[4] [New Connection Profile] 윈도우창에 테이블 나타남
    - Drivers 셀렉박스 바로 옆 아이콘 선택, [New Driver Definition] 윈도우창으로 이동 

 


[5] [New Driver Definition] 윈도우창에서 아래와 같이 설정 후 [OK]
    - [Name/Type] Oracle Thin Driver의 나의 오라클 버전(10) 선택
    - [JAR List] 작업2의 [2]에서 옮긴 파일 경로로 경로 변경

 


[6] [New Connection Profile]으로 재이동 후 Properties 작성 후 [Test Connection] 선택  
                                                                                  --> Ping succeeded! 하면 정상연결된 것
    - Service Name : xe ***사용하는 오라클 버전 (Express Edition -- 교육용)
    - Host : localhost
    - User name : hr
    - Password : 1234 *save password 체크

 



[상황2] 서버가 외부에 있을 때 - AWS클라우스 사용 가정


- 작업 1. (선택사항) 아마존에서 계정 생성 후 계정 정보를 획득한다.  *이미 있다면 그것을 사용
* 보안 그룹 > 인바운드 규칙 편집 : 새 규칙 생성 
  rf. 예시) 유형(Oracle-RDS), 프로토콜(TCP), 포트 지정, 사용자는 Anywhere
                                                                                    ---> 외부에서 접속 가능

- 작업 2. 오라클 드라이버 파일을 작업 프로젝트 폴더로 이동시킨다. 

[참조 : 만약 드라이버 파일이 내 폴더 내에 없다면]

[1] mvnrepository.com로 이동

[2] 검색창에 ojdbc6 입력

[3] Files안의 jar파일을 다운

[1] 오라클's이클립스 연결 파일(driver) 경로로 이동
C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib

[2] driver파일을 프로젝트 취상위 경로에 복사하여 이동
ex. OracleStudy폴더에 이동

 

- 작업 3. 이클립스에서 경로 설정


[1] [Data Source Explorer] 탭 > [Database Connection] > new 
    - Name : Oracle_AWS_닉네임

 

[2] [New Connection Profile] 
    - [Name/Type] Oracle Thin Driver의 나의 오라클 버전(10) 선택
    - [JAR List] 작업2의 [2]에서 옮긴 파일 경로로 경로 변경
    * 이미 등록된 드라이버라 할 경우, [Database Connection] 삼각형 아이콘 터치 > Driver수정 (다운받은 버전으로)

 


[3] [Database Connection] 
    - Serivce Name : DATABASE
    - Host : 아마존에 등록한 RDS 엔드포인트
    - 포트 : 아마존에 등록한 RDS 포트
    - Username : 등록한 username
    - Password : 등록한 비번 

/////////////////////////////////////////////////////////////////////////////////

>>> 이클립스와의 연결이 모두 완료되면 Create Dynamic Web Project 선택해서 프로젝트 작업을 시작

/////////////////////////////////////////////////////////////////////////////////

 

 

참조할만한 사이트
gurubee.net

 

 

 

 

 

■ SQL : DBMS에게 질의하는 명령어

    *DBMS : Database + Managment System 

    *무엇을 질의하는가? 구조화된 데이터를 질의한다. 

  [사전적 의미]
  SQL
(/ˈɛs kjuː ˈɛl/, 또는 /ˈsiːkwəl/, Structured Query Language, 구조화 질의어, S-Q-L)는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.

 

■ 구조화된(=정형화된) 데이터란?

https://kingofbackend.tistory.com/11

 

[DB] 정형, 반정형, 비정형 데이터

데이터베이스의 가장 원초적인 목적은 데이터를 수집하는 것입니다. 내가 필요한 데이터를 수집하기 위해선 먼저 수집 대상이 되는 데이터의 유형을 파악하고 있어야 합니다. 일반적으로 데이

kingofbackend.tistory.com

 

■ 데이터 베이스  : 데이터의 집합

rf. 데이터베이스 관리 시스템을 통해 중복을 없애는 방식으로 결함을 줄일 수 있다.

 

■ 데이터 베이스 계정

- DBO : DATABASE OWNER, DBA(=user(사용자)) 데이터 소유주

- DBA : DATABASE ADMINISTRATOR, 데이터 소유주에게 권한을 받은 사용자 계정

 

데이터 무결성 : 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다.

https://coding-factory.tistory.com/221

 

[DB기초] 무결성이란 무엇인가(무결성 제약조건)

 무결성이란? 무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다 무결성을 유지하는 방법 대표적으로 사용되는 방법은 중앙

coding-factory.tistory.com

 

■ 데이터베이스의 특징 

1. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대해 실시간 처리에 의한 응답이 가능

2. 지속적인 변화(Continous Evolution) : 데이터베이스의 상태는 동적이다. 즉 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)로 항상 최신의 데이터를 유지해야한다.

3. 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로, 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.

4. 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때, 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾는다.

 

데이터베이스의 언어 

 

  • DDL (정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어 ( alter, create, drop )
  • DML (조작어 : Data Manipulation Language) : 데이터베이스내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어 ( select, insert, update, delete )
  • DCL (제어어 : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어 ( commit, rollback, grant, revoke )

 

 

 

 


[출처] 

https://dev-coco.tistory.com/158 [슬기로운 개발생활😃]

 

신입 개발자 기술면접 질문 정리 - 데이터베이스

💡 데이터베이스의 특징에 대해 설명해주세요. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 하며, 지속적인 변화(Continuous Evloution)

dev-coco.tistory.com

https://www.youtube.com/watch?v=pGlkIFrY9QY&list=PLq8wAnVUcTFVq7RD1kuUwkdWabxvDGzfu&index=1 뉴렉처 강의

위키백과

국비지원수업 과정 참고

 

 

+ Recent posts