#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 <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';
결과는 아래와 같다.
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로 정한 문자 바로 뒤의 문자는 일반문자로 인식한다.
[출처] oracle sql - escape 지정|작성자 제이슨
[출처] oracle sql - escape 지정|작성자 제이슨
정의
데이터베이스 객체로, 시퀀스가 생성할 때 설정된 규칙에 따라 정수를 생성한다. 시퀀스는 행을 식별하는 기본 키 값을 자동적으로 생성하거나, 난수 생성에 사용한다. 기본 값은 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문;
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, ...)]);
칼럼명 데이터타입 [NULL | NOT NULL] [CONSTRAINT 제약조건명] [CHECK (조건)]
칼럼명 데이터타입 [NULL | NOT NULL] UNIQUE
칼럼명 데이터타입 [DEFAULT 값]
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