구분했습니다. 감사합니다 (__ )


리절트셋의 별칭을 줄수 있다는 게.. 참 행복합니다. 
읽어오려는 테이블의 칼럼 명이 아주 그지 같이 길고 복잡할때.. 리절트셋으로 받아와서
간단한 n, s 등으로 접근할 수 있겠네요 (^^ )// (아니면 말고..)

SELECT name n, salary s FROM employee e, department d 
WHERE e.salary > '30000' AND d.department_name = '법무부' AND e.name LIKE('_길_')
ORDER BY e.name ASC

결과의 값은 n , s 란 필드(컬럼명)로서 행,렬 데이터 입니다.

프롬절의 별칭의 경운.. 조건절(where)에서 편하게 쿼리문 만들라고 하는 것이겟죠.. 위에처럼..
+ 테이블 n개 이상 조인시 selete 하려는 칼럼명이 중복될 수 있다. 네임스페이스를 지정하는
느낌이랄까? 뭐 그런듯하다~~ 아 글고 아래 문서에서 보듯.. 디비가 넘겨준 ResultSet을 
row,colomn 별로 접근할땐.. 별칭보단, 인덱스(배열 연산자)로 접근하는게 성능이 더 빠르다는
말이 있다. 글고 일반적으로 컬럼은 내가 원하는 데이터를 지정했을테니.. 조회의 경우
로우(=클래스의 인스턴스를 표현하는 데이터 집합) 단위로 하게 될텐데.. 이경우엔 
컨테이너 인터페이스가 제공하는 .. 반복자~ 이터레이터를 쓰는게 코드가 더 이쁘다. ㅎㅎㅎ

***************************************
(etc)컨테이너 접근 방법에 따른 퍼포먼스
int k = arr.size for(int i=0; i<k, i++ ) 요런 접근과 향상된 포문 for(int i : arr)  접근과 while(it.hasNext)
it.next() 의 퍼포먼스의 경우.. 일반적으론 첫번째가 가장 빠르겠지만, 컴파일러의 최적화를 통해서
3번째 이터레이터 쓰는게 제일 좋다는 문서도 봣었음!


***************************************
리절트셋 명세:

java.sql 
인터페이스 ResultSet

모든 슈퍼 인터페이스:
Wrapper
기존의 서브 인터페이스의 일람:
CachedRowSet , FilteredRowSet , JdbcRowSet , JoinRowSet , RowSet , SyncResolver , WebRowSet

<ins style="font-family: Gulim; font-size:12pt; line-height: normal; display: inline-table; border: none; height: 90px; margin: 0px; padding: 0px; position: relative; visibility: visible; width: 728px;"><ins id="aswift_0_anchor" style="display: block; border: none; height: 90px; margin: 0px; padding: 0px; position: relative; visibility: visible; width: 728px;"></ins></ins>
<pre>public interface ResultSet
extends Wrapper
</pre>

데이타베이스의 결과 세트를 나타내는 데이터의 테이블로, 일반적으로, 데이타베이스에 조회하는 문장을 실행하는 것에 의해 생성됩니다.

ResultSet 객체는, 커서가 데이터의 현재의 행을 지시하도록(듯이) 유지합니다. 초기 상태에서는, 커서는 최초의 행의 선두에 배치됩니다. next 메소드에 의해, 커서는 다음의 행으로 이동합니다. next 는,ResultSet 객체에 그 이상행이 없는 경우에 false 를 돌려주므로,while 루프에 사용해 결과 세트를 반복 처리 할 수가 있습니다.  

디폴트의 ResultSet 객체는 갱신 불가로, 커서는 순서 방향에게만 나아갑니다. 따라서 이 객체는, 최초의 행으로부터 마지막 행으로 향해 1 회만 실행할 수 있습니다. 스크롤 또는 갱신, 혹은 그 양쪽 모두가 가능한 ResultSet 객체를 생성할 수 있습니다. con 가 유효한 Connection 객체인 다음의 코드 fragment는, 스크롤 가능해 외로 행해진 갱신을 반영하지 않는 결과 세트, 및 갱신 가능한 결과 세트의 작성 방법을 나타내고 있습니다. 다른 옵션에 대해서는,ResultSet 의 필드를 참조해 주세요.

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");// rs will be scrollable, will not show changes made by others,// and will be updatable 
아래 java 도큐의 resultset 명세중.. '렬명' 이 alias(별칭) 과 동일한 의미.
ResultSet 인터페이스는, 현재의 행으로부터 렬치를 취득하는 getter 메소드 (getBoolean,getLong 등)를 제공합니다. 값은, 열의 인덱스 번호나 렬명의 어느 쪽인지를 사용해 취득할 수 있습니다. 일반적으로은 열인덱스를 사용하는 (분)편이 효과적입니다. 열은 1 으로부터 순서에 번호 붙이고 됩니다. 이식성을 최대한으로 꺼내기 (위해)때문에, 각 행내의 결과 세트의 열은 왼쪽에서 오른쪽의 순서에 읽혀 각 행은 1 회만 읽히도록(듯이) 합니다.

getter 메소드에서는, JDBC 드라이버가 기본적인 데이터를 getter 메소드로 지정된 Java 형으로 변환해, 적절한 Java 의 값을 돌려줍니다. JDBC 스펙에는,ResultSet getter 메소드로 가능한 SQL 형으로부터 Java 형에의 매핑을 나타내는 테이블이 있습니다.  

getter 메소드에의 입력으로서 사용되는 렬명에서는, 대문자와 소문자는 구별되지 않습니다. 렬명으로 getter 메소드가 불려 가 복수의 열이 같은 이름을 가지는 경우는, 최초로 일치하는 열의 값이 돌려주어집니다. 렬명의 옵션은, 결과 세트로 생성되는 SQL 쿼리로 렬명이 사용되는 경우에 사용되도록(듯이) 설계되고 있습니다. 쿼리로 명시적으로 명명되지 않는 열의 경우에는, 열번호를 사용하는 것이 가장 좋은 방법입니다. 렬명을 사용하는 경우, 프로그래머는 목적의 열을 일의에 가리키는 것을 보증하도록 주의해 주세요. 이것은, SQL AS 절을 사용해 실현될 수 있습니다


by givingsheart 2014. 1. 2. 09:02
1)
select idx,level from char_info where idx in (select no from user where no='298110' or no='4187793')
 
=> 원하는 것은 유저테이블의 no(pk) 가 298110  또는 4187793 인 레코드를 찾아서.. 캐릭터정보 테이블의 index(pk)
와 일치하는 유저 테이블 no를 찾는것...? 맞나???

2)
select idx,level from char_info where idx in ('298110','4187793')

저런 쿼리경우 서브 쿼리 해서 tmp 사용하시는것보단.. 그냥 아래쪽으로 쓰는게 빠르죠.. =>아마 임시 테이블 복사가(메모리) 
이뤄지는듯 하다.  string 작업 할때 += 연산 해줄때 퍼포먼스 떨어지는 것과 유사

아니면.. 

3)select idx,level from char_info a, (select no from user where no='298110' or no='4187793') <-인라인
쿼리...=메모리에 올린 사본 데이터 = 물리x 논리적 테이블 = 리절트셋 b 

하여튼 1 vs 3의 차이점은 in() 이라는 키워드 이고..
아래 답글들을 보면.. in()의 경우 해당 조건을 확인위해 테이블 로우 풀스캔(전체 조회)이 일어나는듯하다.


지훈형님이 말씀하신 쿼리 튜닝의 개념인듯하다.. 중요하니까 신경써야함..!!


어렵고도 어려운~  (아래는 ms sql 포럼.. 오라클 개발자 포럼도 찾아봐야할듯.. 나~중~에)

http://www.mysqlkorea.co.kr/gnuboard4/bbs/board.php?bo_table=community_03&wr_id=2917



아래는 오라클 개발자 포럼




selete 사용시 주의할점


(추가)
DB 테이블 최적화(설계단 문제) , 쿼리 최적화 또한.. 쉬운 분야가 아니다. 맛만 보았다. 


by givingsheart 2014. 1. 2. 09:01





안드로이드는 가볍게 맛만 보기. (더이상 진행 불가).. jsp,db ->(xml,html5) -> spring  ..
(팀 프로젝트에 적응위해 maven, j2se or j2ee 프레임웍 적응이 필요)

하여튼 front 부분(xml,,css,html5등 jquery(ajax+html))  back 부분 jsp,servlet등 was 부분 
그리고 db와 교점인 하이버네이트, 기타등등..  이걸 포괄하는 j2ee.. 잘은 모르지만, 스프링의 경우는 
j2ee의 가벼운 버전이라 생각함.
 

스프링을 최종 목표로 잡을 것인가, 모바일, no-sql 클라우드 빅데이터 , 보안 쪽..
어떤 스킬을 집중 개발해야 할지.. 선택이 필요..

물론 고려사항은 내가 만들고 싶은 서비스 형태.. 소셜 개념(네트웍,커머스,셀링,큐레이팅,빅데이터 분석및 추출
알고리즘을 통한 비지니스 가치창출등..) 
즉 아직도 비지니스 가치가 있는 부분에.. 내가 구상한 아이디어를 구현하기 위해
어떤 기술들이 필요할지 정확히 파악해야함.


웨어러블 모바일(스마트)쪽의 비전


by givingsheart 2014. 1. 2. 09:00



추가로 찾아볼 내용

포지션 1: 서버 클라이언트 개발 팀원 및 팀장 

업무내용 

:클라이언트 어플리케이션 개발팀

- GEM(Globally Executable MHP)/BD-J 표준에 따른 Java 어플리케이션 개발 
Android 환경에서 동작하는 드리머 클라이언트 어플리케이션 개발  


 -  Understanding of Xlet based Java TV framework
 -  Understanding of GEM(Globally Executable MHP)/BD-J specification 
 -  Experience of JMF(Java media Framework) is a plus
 -  Experience of developing applications in android environment is a plus.


업무내용 

- 서버 서비스 어플리케이션 개발팀원

- server-side application developer
Cloud 기반 Server-side Java 어플리케이션 개발 
- 안정적이고 효율적으로 동작하는 서버 시스템 개발

 

주요 업무
1) Blu-ray, networked/IP-based media players등의 TV connected device에서 동작하는 드리머 서비스의 back-end system 개발. 
2) cloud 기반으로 전세계를 대상으로 서비스할 드리머 서버시스템의 지속적인 성능향상 작업

 

자격조건 Knowledge : .
 - Deep understanding of Java servlet/Jsp
 - Deep understanding of RDBMS.
 - Deep understanding of open standard based development

 

Skill : 
 -  Expert in OO design and implementation using Java
 -  Expert in java networking application development.
 -  Expert in enterprise application architecture.



포지션2: JSP, Servlet 개발자 팀원 및 팀장 

업무내용 

- 서버 서비스 어플리케이션 개발팀원

- server-side application developer
- Cloud 기반 Server-side Java 어플리케이션 개발 
- 안정적이고 효율적으로 동작하는 서버 시스템 개발

 

주요 업무
1) Blu-ray, networked/IP-based media players등의 TV connected device에서 동작하는 드리머 서비스의 back-end system 개발. 
2) cloud 기반으로 전세계를 대상으로 서비스할 드리머 서버시스템의 지속적인 성능향상 작업

 

자격조건 Knowledge : .
 - Deep understanding of Java servlet/Jsp
 - Deep understanding of RDBMS.
 - Deep understanding of open standard based development

 

Skill : 
 -  Expert in OO design and implementation using Java
 -  Expert in java networking application development.
 -  Expert in enterprise application architecture.


by givingsheart 2014. 1. 2. 08:59

아래에서 java api 항해 지도를 보던중,, java.media 란 패키지가 3d등을 지원하는 것에 호기심을 느껴서 



java media framwork 라는 것을 찾아보려고.. 아래 사이트에서 정보를 찾은후


바로 다운 받을까해서 오라클 사이트를 살펴보던중



adf mobile download 라는 것도 보고, 이클립스용 엔터프라이즈 팩이란 것도 보고(일단 다운받아둠)


아래는 adf 에 대한 현업 개발자들의 의견(결론:스프링 프레임워크!)


by givingsheart 2014. 1. 2. 08:59

http://blog.naver.com/PostView.nhn?blogId=tjdghkgkdl&logNo=10125259469


웹페이지에서 비지니스 도중 새로고침,뒤로가기.. 어떤 결과가 발생할까?
비지니스 요청이 중복해서 발생한다. 또한 트랜잭션처럼 하나의 비지니스가 
몇단계의 스텝으로 완료될때.. 그 정보들을 예외상황으로 부터 어떻게 지킬것
인가? 등에 대한 고민들..

예전에 서블릿 소스코드를 분석할때.. 살짝 본것 같기도하다. 현재의 요청이(new) 
이미 한번 접수된 요청(old)인가?...


'프로그래밍 > JSP' 카테고리의 다른 글

web-app.xml의 태그를 사용해 로그인및 권한 설정 방법  (0) 2014.01.02
jsp ~ jdbc  (0) 2014.01.01
jsp에서 빈의 사용3  (0) 2014.01.01
jsp에서 빈의 사용2  (0) 2014.01.01
빈을 이용한 컴포넌트 방식의 설계1  (0) 2014.01.01
by givingsheart 2014. 1. 2. 08:57

http://www.yunsobi.com/blog/582 




익셉션 처리에 대한 지침이랄까..멋짐! (api 개발자가 좀더 고민할 문제지만.. 워커 콜러측 책임 문제가 있으니)

발췌
Client's reaction when exception happensException type
Client code cannot do anythingMake it an unchecked exception
Client code will take some useful recovery action based on information in exceptionMake it a checked exception




Most of the time, client code cannot do anything about SQLExceptions. Do not hesitate to convert them into unchecked exceptions. Consider the following piece of code:

public void dataAccessCode()
{    
try{        ..some code that throws SQLException    }
catch(SQLException ex)
{        ex.printStacktrace();    }}

This catch block just suppresses the exception and does nothing. The justification is that there is nothing my client could do about an SQLException. How about dealing with it in the following manner?

public void dataAccessCode()
{    
try{        ..some code that throws SQLException    }
catch(SQLException ex){        
throw new RuntimeException(ex);    }}<--그젠가 상위클래스던,인터페이스던.. abstract으로 사용자가 재정의
해야할 Thread의 run() 같은 메서드에서 예외를 throw해야할 상황이 있을때 선생님께서 런타입으로 캐스팅
해서 넘기면 된다고 말씀하심.

This converts SQLException to RuntimeException. If SQLException occurs, the catch clause throws a newRuntimeException. The execution thread is suspended and the exception gets reported. However, I am not corrupting my business object layer with unnecessary exception handling, especially since it cannot do anything about an SQLException. If my catch needs the root exception cause, I can make use of thegetCause() method available in all exception classes as of JDK1.4.

If you are confident that the business layer can take some recovery action when SQLException occurs, you can convert it into a more meaningful checked exception. But I have found that just throwingRuntimeException suffices most of the time.



What is wrong with following code?

public class DuplicateUsernameException    extends Exception {}

It is not giving any useful information to the client code, other than an indicative exception name. Do not forget that Java Exception classes are like other classes, wherein you can add methods that you think the client code will invoke to get more information.

We could add useful methods to DuplicateUsernameException, such as:

public class DuplicateUsernameException    extends Exception  <-마찬가지로 배운것~(주문에 대한
재고수량 정보 리턴)
{    public DuplicateUsernameException         (String username){....} 
   public String requestedUsername(){...}    
public String[] availableNames(){...}}

The new version provides two useful methods: requestedUsername(), which returns the requested name, and availableNames(), which returns an array of available usernames similar to the one requested. The client could use these methods to inform that the requested username is not available and that other usernames are available. But if you are not going to add extra information, then just throw a standard exception:

throw new Exception("Username already taken");

사용자 정의 익셉션의 필요성, 런타입 계열로 throw등.. 선생님이 가르쳐주신것도 많네..

아래는 결론 

Best Practices for Using Exceptions

The next set of best practices show how the client code should deal with an API that throws checked exceptions.

1. Always clean up after yourself <- 내가예전에 고민했던 결론 (자기의 업무 영역에 따른 책임분할)

If you are using resources like database connections or network connections, make sure you clean them up. If the API you are invoking uses only unchecked exceptions, you should still clean up resources after use, with try - finally blocks.

public void dataAccessCode(){
    Connection conn = null; 
   try{        conn = getConnection();    
    ..some code that throws SQLException    
}catch(SQLException ex)
{        ex.printStacktrace();    }
 finally{        DBUtil.closeConnection(conn);    }}

class DBUtil{    public static void closeConnection        
(Connection conn){        try{            conn.close();        } 
catch(SQLException ex){            
logger.error("Cannot close connection");          
  throw new RuntimeException(ex);        }   
 }}

DBUtil is a utility class that closes the Connection. The important point is the use of finally block, which executes whether or not an exception is caught. In this example, the finally closes the connection and throws a RuntimeException if there is problem with closing the connection.

2. Never use exceptions for flow control <- 내가 요 유혹에 빠지기도 했었음..

Generating stack traces is expensive and the value of a stack trace is in debugging. In a flow-control situation, the stack trace would be ignored, since the client just wants to know how to proceed.

In the code below, a custom exception, MaximumCountReachedException, is used to control the flow.

public void useExceptionsForFlowControl() 
{    
try {        while (true) 
{            increaseCount();        }   
 } catch (MaximumCountReachedException ex) 
{    }    //Continue execution
}
public void increaseCount()    throws MaximumCountReachedException 
{    if (count >= 5000)        throw new MaximumCountReachedException();
}

The useExceptionsForFlowControl() uses an infinite loop to increase the count until the exception is thrown. This not only makes the code difficult to read, but also makes it slower. Use exception handling only in exceptional situations.

3. Do not suppress or ignore exceptions <-몇일 전 까지 core api익셉션을 무조건 누르려고 했었음(현재는 발생

시키는 예외에 대해 조금 더 신경을 쓰고 한번 더 확인하게 되었달까?)

When a method from an API throws a checked exception, it is trying to tell you that you should take some counter action. If the checked exception does not make sense to you, do not hesitate to convert it into an unchecked exception and throw it again, but do not ignore it by catching it with {} and then continue as if nothing had happened.

4. Do not catch top-level exceptions <-- 노력해볼꼐요 -_-;  구현 과정중에 이것저것 신경쓸께 너무 많아져서

작업 속도가 더딤..

Unchecked exceptions inherit from the RuntimeException class, which in turn inherits from Exception. By catching the Exception class, you are also catching RuntimeException as in the following code:

try{..}catch(Exception ex){}

The code above ignores unchecked exceptions, as well.

5. Log exceptions just once

Logging the same exception stack trace more than once can confuse the programmer examining the stack trace about the original source of exception. So just log it once.



(추가)

예외 처리.. RNR(역할과 권한과 책임의 문제..) 괜히 복잡하게 하지 말고, 회복할 수 있는 것만, 그것을 통제(매니지먼트)

하는 객체에게 수신 시키자. 

조직의 부서 구성 또한 .. 매니저가 알아야 하고, 처리할 사항 -> 개별 개발자가 위임받아 처리할 사항이란 RNR이 존재한다.

by givingsheart 2014. 1. 2. 08:56

http://cafe.naver.com/jjdev/1364



내 경우에.. 파일 관리 시스템을 만들면서 팩토리 패턴을 사용할때 해당 파일작업(copy,delete,rename,move)을 수행할
워커(copyWorker,deleteWorker)를 이름과 실제 클래스 명(패키지네임 포함)을 xml파일을 통해 저장하고 로드해서 사용
했었다.

스프링 프로젝트에서도 요런식으로 쓰나보나.. 내가 모르는건 root의 개념.. 및 패키지간 관계의 표현인듯..?


+ jsp 책을 보다가.. was (web app service)를 배포할때 파일들,리소스들의 접근 경로에 대한 문제도 생각해야한다.


by givingsheart 2014. 1. 2. 08:53
********************************************************
내가 약 20분 삽질한 constraint 두개 이상쓰기..

create table employee(
employee_no number(3),
salary varchar2(50),
...
department_no number(3),

constraint employee_pk primary key (employee_no),  //칼럼은 괄호()로 .. 추가로 제약조건 주고 싶으면.. 콤마 ,로  []아님
constraint department_fk foreign key (department_no) references department (department_no) <-- 여기에 delete cascade
)


create table employee(
employee_no number(3),
name varchar2(50) not null,
position varchar2(50) not null,
salary number not null,
department_no number(3) null,  <-- 신입사원이라면 소속부서가 아직 결정 안되었을수 있음으로!
constraint employee_pk primary key (employee_no),
constraint department_fk foreign key (department_no)
references department (department_no) on delete cascade  <--요 정의는 자식 테이블이 참조하고 있기 때문에 부모테이
블을 삭제(drop)할수 없다는 정의! data define language  + 구분할 개념.. 부모테이블 전체가 아닌, 테이블의 행(레코드)를
삭제할 경우 자식테이블의 참조 값도 없어짐.

내 예측엔 on delete cascade로 ddl 했을때 참조되는 부모 테이블을 변경시 , 자식테이블의 컬럼(fk)만 비워질 것이라 
생각했는데.. 결과는 삭제한 fk를 갖고 있던 자식 테이블의 모든 레코드가 삭제 되었다!  아래는 테스트 코드

CREATE TABLE DEPARTMENT(
DEPARTMENT_NO NUMBER(3,0),
DEPARTMENT_NAME VARCHAR2(50) NOT NULL,
LOCATION VARCHAR2(50),
CONSTRAINT DEPARTMENT_PK PRIMARY KEY (DEPARTMENT_NO)
);

INSERT INTO department VALUES(1,'영업부','강남구 논현동')
INSERT INTO department VALUES(2,'인사부','강남구 역삼동')
INSERT INTO department VALUES(3,'법무부','강남구 삼성동')
INSERT INTO department VALUES(4,'전략기획및 개발','강남구 삼성동')



create table employee(
employee_no number(3),
name varchar2(50) not null,
position varchar2(50) not null,
salary number not null,
department_no number(3) null,
constraint employee_pk primary key (employee_no),
constraint department_fk foreign key (department_no)
references department (department_no) on delete cascade
)

INSERT INTO employee 
VALUES(1,'장호','부장','5000000000',4)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(2,'홍길동','사원','500',4)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(3,'강길동','사원','500',4)

DELETE FROM department WHERE department_no = 4

SELECT * FROM employee


아래의 경우 drop table department; 했을 경우 실패했으나 ,, drop table department cascade constraint; 로 지워줄수있음.
물론 테이블의 삭제가 일반적인 일은 아님.(데이터가 다 날아감으로)


흠.. 직원 a씨는 인사부서 였는데.. 인사부(human resource)가 사라졌다면.. 직원 a씨의 전체 정보를 삭제할까? 
아니면 컬럼만 삭제할까?


구분할 개념
테이블 생성시.. 제한 조건(constraint)로 foregn key references 부모 테이블 (칼럼이름) on delete cascade 의 경우
참조 무결성을 위해 부모 테이블의 드랍에 제한을 거는 것이고..

drop table 부모테이블 cascade constraint 의 경우는.. 자식 객체의 fk 칼럼의 레퍼런스(참조)속성을 날려버린다는
의미 같음. (해당 칼럼을 삭제하진 않을듯함?)

)

*************************************************************




http://blog.naver.com/kookh1?Redirect=Log&logNo=120192625407



ALTER TABLE MEMBERINFO MODIFY(ID NUMBER(6,0) NOT NULL);  <-- 요놈도 괄호 삽질 ㅠㅠ

alter table에 대해서..


key의 타입(super,candiate,primaty,alter...) 과 무결성에 대해

****************************************************
 pk는 not null 과 unique 를 포함하는 개념!

흑.. 완전 짜증..

create table memberinfo(
id number(6,0), //pk 인덱스니까 검색빠르게 문자열보단.. 숫자로 줬는데 흑;;
pw varchar2(10) not null,
name varchar2(20),
constraint memberinfo_pk primary key (id)   <--- id를 ()로 안감싸서 한참 삽질 ㅠㅠ  <--요이유가. 한번에 여러 필드에
                                                                    제약조건(constraint primary key 를 적용할수 있기에.. ()로 식별이 
                                                                    필요한듯.. constraint memberinfo_pk primary key(id, pw, name) 요렇게..
                                                                    물론 실전이라면.. id = pk , nickName = pk, 주민번호 = pk 요런식 이겟지만..
) ;  <-- ;는 해도 되고 안해도 되고..



er 모델링, 클래스 모델링, 또.. 모델 드라이븐 디자인...









//2013-12-19  쿼리 가지고 놀기


SELECT * FROM MEMBERINFO;

SELECT NAME PW FROM MEMBERINFO;
SELECT NAME FROM MEMBERINFO WHERE ID = 'id3';
UPDATE MEMBERINFO SET NAME ='나길동' WHERE ID = 'id2';

UPDATE MEMBERINFO SET ID =5 WHERE NAME = '마길동';

INSERT INTO memberinfo VALUES(4,'하길동','비번66')

INSERT INTO MEMBERINFO(ID,NAME) VALUES('id5','5');
INSERT INTO MEMBERINFO values('id4','라길동','4');
DELETE FROM MEMBERINFO WHERE ID = 'id4';

ALTER TABLE MEMBERINFO DROP COLUMN ID;
ALTER TABLE MEMBERINFO DROP CONSTRAINT ID_PK;

ALTER TABLE MEMBERINFO ADD(ADDRESS VARCHAR2(50));
ALTER TABLE MEMBERINFO MODIFY (ADDRESS VARCHAR2(100));
ALTER TABLE MEMBERINFO ADD CONSTRAINT ID NUMBER PRIMARYKEY;

ALTER TABLE MEMBERINFO ADD PRIMARY KEY(ID NUMBER(6,2));

ALTER TABLE MEMBERINFO MODIFY (ID NUMBER(6,0)[PRIMARY KEY]);

ALTER TABLE MEMBERINFO ADD(ID2 NUMBER CONSTRAINT PRIMARY KEY);

ALTER TABLE MEMBERINFO MODIFY (ID NUMBER);

DROP TABLE MEMBERINFO2;
CREATE TABLE MEMBERINFO2(ID NUMBER(6,0) PRIMARY KEY, PW VARCHAR2(20), NAME VARCHAR2(20));

ALTER TABLE MEMBERINFO2 MODIFY(ID NUMBER(6,0) NOT NULL);

DROP TABLE DEPARTMENT;

CREATE TABLE DEPARTMENT(DEPARTMENT_NO NUMBER(3,0) PRIMARY KEY, DEPERTMENT_NAME VARCHAR2(50) NOT NULL,
LOCATION VARCHAR2(50));


DELETE FROM department WHERE department_no = 4  



drop table employee

CREATE TABLE DEPARTMENT(
DEPARTMENT_NO NUMBER(3,0),
DEPARTMENT_NAME VARCHAR2(50) NOT NULL,
LOCATION VARCHAR2(50),
CONSTRAINT DEPARTMENT_PK PRIMARY KEY (DEPARTMENT_NO)
);

INSERT INTO department VALUES(1,'영업부','강남구 논현동')
INSERT INTO department VALUES(2,'인사부','강남구 역삼동')
INSERT INTO department VALUES(3,'법무부','강남구 삼성동')
INSERT INTO department VALUES(4,'전략기획및 개발','강남구 삼성동')

UPDATE department SET location = '제주도 성남시'
UPDATE department SET department_name = '전략기획' WHERE department_no = 4
UPDATE department SET location = '논현동' WHERE department_no = 1;
UPDATE department SET location = '역삼동' WHERE department_no = 2;
UPDATE department SET location = '삼성동' WHERE department_no = 3;
UPDATE department SET location = '동동' WHERE department_no = 4;

INSERT INTO department(department_no,department_name,location) VALUES(5,'')

SELECT * FROM department
SELECT * FROM department ORDER BY department_no ASC

create table employee(
employee_no number(3),
name varchar2(50) not null,
position varchar2(50) not null,
salary number not null,
department_no number(3) null,
constraint employee_pk primary key (employee_no),
constraint department_fk foreign key (department_no)
references department (department_no) on delete cascade
)

INSERT INTO employee 
VALUES(1,'장호','부장','5000000000',4)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(2,'홍길동','사원','500',4)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(3,'강길동','사원','30000',4)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(4,'나길동','ㄹㅇㄹㅇ','3004400',3)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(5,'다길동','ㄷㄷ','3003300',2)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(6,'라길동','ㅂㅂ','6630000',1)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(7,'길동','ㅂㅂ','66320000',3)

INSERT INTO employee(employee_no,name,position,salary,department_no)
VALUES(8,'길동이','ㅂㅂ','66000',3)


DELETE FROM department WHERE department_no = 4

SELECT * FROM employee WHERE department_no IN(1,3) ORDER BY name ASC
SELECT * FROM employee WHERE department_no NOT IN(1,3) ORDER BY name ASC

SELECT * FROM employee WHERE department_no IN(1,3) ORDER BY department_no ASC

SELECT * FROM employee WHERE name LIKE('%동')
SELECT * FROM employee WHERE name LIKE('%동%')
SELECT * FROM employee WHERE name LIKE('길%')
SELECT * FROM employee WHERE name LIKE('__동')
SELECT * FROM employee WHERE name LIKE('__') ORDER BY salary DESC
SELECT * FROM employee WHERE name LIKE('%') ORDER BY salary DESC
SELECT * FROM employee WHERE name LIKE('_동') 

SELECT * FROM employee WHERE name NOT LIKE('_동')


글고 조인 연산시.. 테이블의 별칭을 줄수 있다. 왜냐면 네임스페이스 처럼
이름 식별을 위해서~ 글고 뒤에 오더정렬을 안해주면 입력 순서가 유지가 안된다.
그럼으로 이를 통해 dbms가 데이터를 저장하는 방식이 map<pk,Object data~~> 임을 
유추할수 있다. 검색 속도 증가를 위한 인덱싱이란 무얼까? 
SELECT * FROM employee e, department d <--불필요한 정보까지 싸그리 가져온 경우
WHERE e.salary > '300600' AND d.department_name = '법무부' AND e.name LIKE('_길_')
ORDER BY e.name ASC
아참.. where 조건절을 ()로 묶어줄 수 있다.
SELECT e.name FROM employee e, department d 
WHERE e.salary > '30000' AND d.department_name = '법무부' AND e.name LIKE('_길_')
ORDER BY e.name ASC


SELECT * FROM employee

alter table employee modify(department_no number(3) foreign key);


(추가)난 여전히 학원 과정(아주 얕게 RDB 수업 & JDBC를 활용한 CRUD 테스트 실습)과는 별개로
공부및 추가 학습을 하고 있다. (오라클 DBMS 아키텍처및 각종 쿼리와 최적화, 테이블 설계, 정규화
비정규화등..) RDB도 제대로 이해를 못하고.. 빅데이터를 알게 되었다.(대용량 DB 아니다)


by givingsheart 2014. 1. 1. 16:45
nio 추가 이해


nio 솔루션 netty



네이버 개발자 센터에 만들어뒀으나.. svn 연결 실패한
웹 code repository 체크..



이클립스 디비 플러그인 관련

http://okjsp.net/bbs?seq=175273 (이클립스내장,오렌지,토드 기타 등등)



ps. 선생님, 아영님? 감사합니다. best regards!


by givingsheart 2014. 1. 1. 16:43