#include "stdafx.h"

#include <typeinfo>

#include <iostream>

using namespace std;


template < typename T > 

void asdf( T arg1) {

   cout << typeid( T ).name() << endl;

}


int _tmain(int argc, _TCHAR* argv[])

{

int aaa= 1000;

asdf(aaa);

return 0;

}


#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;


#define GET_NAME(n) #n


int _tmain(int argc, _TCHAR* argv[])

{

int asdf = 1000;

string str = GET_NAME(asdf);

  cout << str << endl;

return 0;

}


아래와 같이 테이블 tbl이 있다고 가정하면


col

-----

a

ab

b

ba


select * from tbl where col between 'a' and 'b';


사전순으로 a 부터 b까지의 모든 문자열 포함하는 레코드를 찾는다(a와 b 포함).


결과는 아래와 같다.


col

----

a

ab

b

http://yjacket.tistory.com/60


결론은 빈 문자열은 NULL과 같다는 것이다.

다만 주의할 것은

NULL은 비교 대상으로 삼을 수 없는 것과 같이

any expression = '', any expression <> '' 등의 비교는 FALSE 이다


단, '' IS NULL은 TRUE 이다.

패턴 검색을 할 경우, 오라클에서는 LIKE '_' 또는 '%'를 사용하게 되는데

("_"는 한 문자, "%"는 0개 이상의 문자)

한 가지 문제가 있다.

위의 문자를 포함한 데이터를 검색하고 싶을 땐 어떻게 할까?

 

가령 "M_" 로 시작되는 모든 데이터를 검색하고 있다면 말이다.

해답은, 아래의 참고를 보길 바란다.


▶ SQL문

SELECT ename 
FROM emp 
WHERE ename LIKE 'M\_%' ESCAPE '\'
;


ESCAPE 옵션을 사용하면 된다.

ESCAPE로 정한 문자 바로 뒤의 문자는 일반문자로 인식한다.

http://micropilot.tistory.com/1608


아래 사이트가 원본 같음

http://oradim.blogspot.kr/2009/05/oracle-proc-on-windows-with-express.html

정의

데이터베이스 객체로, 시퀀스가 생성할 때 설정된 규칙에 따라 정수를 생성한다. 시퀀스는 행을 식별하는 기본 키 값을 자동적으로 생성하거나, 난수 생성에 사용한다. 기본 값은 1부터 시작하여 1씩 증가하고, 최대 15개까지 만들 수 있다.


시퀀스 생성

CREATE SEQUENCE 시퀀스명

[INCREMENT BY  증가값]

[START WITH       시작값]

[MAXVALUE        최대값]

[CYCLE              반복횟수]


시퀀스의 참조변수

시퀀스의 값을 반환하는 참조변수로 NEXTVAL과 CURRVAL이 있다.

시퀀스명.NEXTVAL : 시퀀스의 현재 값에 '증가값'을 더한 값을 정수로 반환

시퀀스명.CURRVAL : 시퀀스의 현재 값을 정수로 반환



시퀀스의 데이터를 다루는 참조변수 용도

INSERT문에서 VALUES절, SELECT문에서 선택 목록, UPDATE문의 SET절에 사용할 수 있다.

DISTINCT절이 있는 SELECT문, ORDER BY절, GROUP BY절이 있는 SELECT문, 서브 쿼리, 뷰 쿼리에서는 사용할 수 없다.


SQL> SELECT Dept_Seq.NEXTVAL, Dept_ID, Dept_name

    2    FROM Department;


NEXTVAL    DEPT_ID    DEPT_NAME

---------- ---------- -------------

1    컴공        컴퓨터공학과

2    정통        정보통신공학과


SQL>


시퀀스 삭제

DROP SEQUENCE 시퀀스명;


연습문제

다음과 같이 시퀀스를 생성했다.


create sequence seq1

start with 100

increment by 10

maxvalue 200

cycle

nocache;


seq1 시퀀스는 최대값인 200까지 숫자를 생성한 상태이다. 다음 SQL문을 실행하면 어떤 결과가 나올까?


SELECT seq1.nextval FROM dual;


답> 1

 -> start with 가 100이지만 최대값을 찍고나면 다시 1부터 시작.

  • 뷰의 용도
    • 테이블의 접근에 관한 권한 제한하고
    • 개발자나 사용자에게 복잡성을 감추고
    • 칼럼명을 변경하여 단순화할 때 사용


뷰 생성 구문

CREATE VIEW 뷰이름

[(칼럼명1, 칼렴명2, ...)]

AS

SELECT문;


  • 뷰 생성시 고려사항
    • 칼럼명 생략하면, SELECT문에 기술한 칼럼명으로 대체됨
    • 함수나, 수식, 리터럴 등이 사용되면 별명을 사용하거나, 칼럼명을 기술해야 됨
    • SELECT문에 사용하는 테이블의 기본 키, NOT NULL 칼럼을 포함시켜야 데이터의 추가나, 수정이 가능
    • 뷰 생성시 SELECT문에 GROUP BY절, HAVING절, ORDER BY절과 그룹함수, 수식 등을 사용할 수 있음

  • 뷰를 통한 데이터의 트랜잭션이 가능하게 하려면
    • GROUP BY절, DISTINCT, 그룹함수 등을 사용한 뷰가 아니어야 한다.
    • 하나의 테이블에서 생성된 뷰이어야 한다.
    • 수식이 사용된 필드는 수정, 삭제 할 수 없다.
    • 기본 키, NOT NULL로 설정된 칼럼이 모두 포함되어야 한다.


CREATE TABLE문 일반 형식

CREATE TABLE 테이블명 (

칼럼명1    데이터타입    [NULL | NOT NULL],

...

칼럼명N    데이터타입    [NULL | NOT NULL],

[CONSTRAINT    제약조건명1    PRIMARY KEY (칼럼명1, 칼럼명2, ...)],

[CONSTRAINT    제약조건명2    FOREIGN KEY (칼럼명1, 칼럼명2, ...) REFERENCES 참조테이블명 (칼럼명1, 칼럼명2, ...)]);


  • 테이블명 정의
    • 사용자 이름(U)에 속한 각 테이블명은 유일해야 한다.
    • 30자 초과 불가
    • 문자로 시작
    • 문자, 1~9까지의 숫자, _$# 3개 가능
    • SQL 예약어 사용 불가

  • 칼럼명 정의
    • 하나의 테이블에서 칼럼명 유일해야 한다.
    • 30자 초과 불가
    • 문자로 시작
    • 문자, 1~9까지의 숫자, _$# 3개 가능
    • SQL 예약어 사용 불가

  • 체크 제약조건으로 테이블의 칼럼에 값을 제한
  • 칼럼명 데이터타입 [NULL | NOT NULL] [CONSTRAINT 제약조건명] [CHECK (조건)]


  • 테이블에 기본 키 제약조건 지정
    • 기본 키 칼럼에 중복된 데이터 허용 불가
    • 기본 키 칼럼에 NULL값 허용 불가
    • 기본 키 칼럼은 자동으로 NOT NULL이 됨
    • 기본 키를 구성하는 칼럼의 최대 수는 16개
    • 기본 키가 단일 칼럼일 때, 기본 키 칼럼에 'PRIMARY KEY' 혹은 'CONSTRAINT 제약조건명 PRIMARY KEY'를 명시적으로 선언 가능

  • 테이블에 외부 키 제약조건 지정
    • 외부 키 칼럼의 수와 참조하는 테이블의 기본 키 칼럼의 수가 동일해야 함
    • 외부 키 칼럼의 데이터타입과 참조하는 테이블의 기본 키 칼럼의 데이터 타입이 동일해야 함
    • 외부 키 칼럼의 데이터타입을 생략하면, 참조하는 테이블의 기본 키 칼럼의 데이터타입을 참조 함
    • 테이블 생성시 참조할 테이블의 기본 키 칼럼은 생략할 수 있음
    • 단일 칼럼의 외부 키 제약조건은, 외부 키 칼럼에 'CONSTRAINT 제약조건명 FOREIGN KEY REFERENCES 참조할테이블명'을 명시적으로 선언 가능

  • 테이블 칼럼에 고유 키 제약조건 지정
  • 칼럼명 데이터타입 [NULL | NOT NULL] UNIQUE


  • 칼럼에 기본 값 지정
    • 기본 값을 지정하는 칼럼은 NOT NULL 제약조건을 지정하지 않음

    칼럼명 데이터타입 [DEFAULT 값]

  • WHERE절의 IN, EXISTS, BETWEEN 사용 시에...
    • 내부에 LIKE, TO_DATE 와 같은 함수를 사용하지 못 하는 듯...
  • 집합연산 사용 시에...
  • select id, name "Last Name"

    from a

    where cid =10

    union

    select id CUST_NO, name

    from a

    where cid=30;

    위와 같은 SQL문이 있다고 가정했을 때


    아래 세 개의 ORDER BY절은 에러 없이 정상 동작하지만

    ORDER BY 2, id

    ORDER BY 2, 1

    ORDER BY "Last Name"


    다음 ORDER BY절은 에러가 발생한다.

    ORDER BY CUST_NO


    확실하진 않지만 첫 번째 select 문의 alias만 쓸 수 있는 것 같다

+ Recent posts