'분류 전체보기'에 해당되는 글 107건
- 2009.09.17 :: 2009년 9월 16일
- 2009.09.17 :: JOIN
- 2009.09.16 :: 공부하기 좋은 사이트
- 2009.09.14 :: [스크랩] 리눅스 시그널 정리
- 2009.09.14 :: It's just start!!
- 2009.09.14 :: [Mysql/Psql] 데이터 암호화
- 2009.09.14 :: snprintf() 문제점???
- 2009.06.17 :: [Mysql] 기초 키워드 및 함수
- 2009.06.17 :: [Mysql] 문자 함수
- 2009.06.16 :: [Mysql] Oracle에 MINUS를 Mysql에서 구현해보자
내가 틀린 발음
wage
pronounciation
'English' 카테고리의 다른 글
스터디룸 정보 (0) | 2009.09.28 |
---|---|
It's just start!! (0) | 2009.09.14 |
JOIN은 두개 이상의 테이블을 특정 column 의 관계를 이용해서 data를 추출하는 키워드이다.
"Persons" Table
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
"Orders" Table
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
"Persons" Table과 "Orders" Table은 P_Id라는 같은 column을 가지고 있다.
두 table을 연결해서 data를 추출하려면 JOIN 키워드를 이용하면 된다.
<JOIN의 타입>
JOIN(INNER JOIN): 양 table에서 매치되는 data가 적어도 1개 이상 있을때 data가 추출된다.
LEFT JOIN: 양 table에 매치되는 data가 없어라도 왼쪽 table로 모든 daa가 추출된다.
RIGTH JOIN: 양 table에 매치되는 data가 없어라도 오른쪽 table로 모든 daa가 추출된다.
FULL JOIN: table들 중 하나의 매치가 있다면 data가 추출된다.
'DataBase' 카테고리의 다른 글
OUTER JOIN (0) | 2009.09.18 |
---|---|
INNER JOIN (0) | 2009.09.17 |
[Mysql/Psql] 데이터 암호화 (0) | 2009.09.14 |
[Mysql] 기초 키워드 및 함수 (0) | 2009.06.17 |
[Mysql] 문자 함수 (0) | 2009.06.17 |
'ssuk's story' 카테고리의 다른 글
Why do I have a blackout? (0) | 2009.06.03 |
---|---|
I hate the people (1) (0) | 2009.06.03 |
ssuk's first story (1) | 2009.06.02 |
출처 : http://fromnil.egloos.com/
1 |
SIGHUP(HUP) |
연결 끊기. 프로세스의 설정파일을 다시 읽는데 사용된다. |
2 |
SIGINT(INT) |
인터럽트 |
3 |
SIGQUIT(QUIT) |
종료 |
4 |
SIGILL(ILL) |
잘못된 명령 |
5 |
SIGTRAP(TRAP) |
트렙 추적 |
6 |
SIGIOT(IOT) |
IOT 명령 |
7 |
SIGBUS(BUS) |
버스 에러 |
8 |
SIGFPE(FPE) |
고정소수점 예외 |
9 |
SIGKILL(KILL) |
죽이기. 이 시그널은 잡히지 않는다. |
10 |
SIGUSR1(USR1) |
사용자 정의 시그널1 |
11 |
SIGSEGV(SEGV) |
세그멘테이션 위반 |
12 |
SIGUSR2(USR2) |
사용자 정의 시그널2 |
13 |
SIGPIPE(PIPE) |
읽을 것이 없는 파이프에 대한 시그널 |
14 |
SIGALRM(ALRM) |
경고 클럭 |
15 |
SIGTERM(TERM) |
소프트웨어 종료 시그널, 일반적으로 kill 시그널이 전송되기 전에 전송된다. 잡히는 시그널이기 때문에 종료되는 것을 트랙할 수 있다. |
16 |
SIGTKFLT |
코프로세서 스택 실패 |
17 |
SIGCHLD(CHLD) |
자식 프로세스의 상태변화 |
18 |
SIGCONT(CONT) |
STOP 시그널 이후 계속 진행할 때 사용. |
19 |
SIGSTOP(STOP) |
정지. 이 시그널 역시 잡을 수 없다. |
20 |
SIGTSTP(TSTP) |
키보드에 의해 발생하는 시그널로 Ctrl+Z로 생성된다. |
21 |
SIGTTIN |
백그라운드에서의 제어터미널 읽기 |
22 |
SIGTTOU |
백그라운드에서의 제어터미널 쓰기 |
23 |
SIGURG |
소켓에서의 긴급한 상태 |
24 |
SIGXCPU |
CPU 시간 제한 초과 setrlimit(2) 메뉴얼 패이지 참조 |
25 |
SIGXFSZ |
파일 크기제한 초과 setrlimit(2) 메뉴얼 패이지 참조 |
26 |
SIGVTALRM |
가상 시간 경고 setitimer(2) 메뉴얼 패이지 참조 |
27 |
SIGPROF |
프로파일링 타이머 경고. setitimer(2) 메뉴얼 페이지 참조 |
28 |
SIGWINCH |
윈도우 사이즈 변경 |
29 |
SIGIO |
기술자에서 입출력이 가능함. fcntl(2) 메뉴얼 참조 |
30 |
SIGPWR |
전원 실패 |
31 |
UNUSED |
사용 안함 |
'Unix/Linux' 카테고리의 다른 글
Debug (0) | 2009.06.02 |
---|---|
vi 필수 명령어 (0) | 2009.06.02 |
When I went to Europe, I felt that my English is not enough and I need to study hard.
What is my weak point in English??
Confidence is one of my weakness points and also I don't have a lot of experience to talk with foreigners face to face.
I do talk with my phone English teacher everyday.
Even though phone English is more difficult than speak English in person,
It is very different.
Thus I decided to study English with a private teacher.
One of my coworker introduced me a pivate English teacher.
The fee is not much expensive than I expected. I love it!
The teacher is male, but that's ok.
I've just started study with him.
It was good and I could feel even my English has improved during the class!!
It's just start.
I will study hard util I satisfied with my English ability.
'English' 카테고리의 다른 글
스터디룸 정보 (0) | 2009.09.28 |
---|---|
2009년 9월 16일 (0) | 2009.09.17 |
License 정보를 Database에 넣어서 관리하고 싶을 때 사용했던 방식이다.
Mysql은 자체적으로 암호화 함수를 제공한다.
MAX_SUBS blob NOT NULL,
) TYPE=InnoDB;
format) AES_ENCRYPT(FIELD_VALUE, 'KEY'));
ex) insert into LICENSE_INFO values (AES_ENCRYPT(200, 'ssuk'_key));
'KEY' 값은 나중에 복호화 할때 이용되기 때문에 기억해야 한다.
AES_DECRYPT : 복호화
format) AES_DECRYPT(FILED_NAME, 'KEY')
ex) select AES_DECRYPT(MAX_SUBS, 'ssuk_key') from LICENSE_INFO;
결과에 암호화로 넣은 200이 나오는 것을 확인할 수 있음
이렇게 Msyql 간단히 사용할 수 있다.^^
그럼 Psql은??
사실 Psql도 암호화/복호화 함수가 있기 때문에 쉽게 사용할 수 있다.
모르는 사람이 많은 이유는 따로 contrib를 설치 해야하기 때문이다.
1. postgresql-contrib-xxx.rpm을 설치한다.
ex) postgresql-contrib-8.2.13-1PGDG.rhel4.i386.rpm (내가 사용한 rpm)
2. pgcrypto.sql 파일을 DB에 적용한다.
ex) psql DB_NAME < /usr/share/pgsql/contrib/pgcrypto.sql
3. 실제 사용
MAX_SUBS varchar(32)
);
format) (encode(encrypt('FIELD_VALUE', 'KEY', 'aes'), 'hex'),
ex) insert into LICENSE_INFO values (encode(encrypt('200', 'ssuk_key', 'aes'), 'hex'));
'KEY' 값은 나중에 복호화 할때 이용되기 때문에 기억해야 한다.
decrypt(decode()) : 복호화
format) decrypt(decode(FILED_NAME, 'hex'), 'KEY', 'aes')
ex) select decrypt(decode(MAX_SUBS, 'hex'), 'ssuk_key', 'aes') from LICENSE_INFO;
결과에 암호화로 넣은 200이 나오는 것을 확인할 수 있음
이로써 Psql도 간단히 암호화/복호화를 쓸 수 있다.
'DataBase' 카테고리의 다른 글
INNER JOIN (0) | 2009.09.17 |
---|---|
JOIN (0) | 2009.09.17 |
[Mysql] 기초 키워드 및 함수 (0) | 2009.06.17 |
[Mysql] 문자 함수 (0) | 2009.06.17 |
[Mysql] Oracle에 MINUS를 Mysql에서 구현해보자 (0) | 2009.06.16 |
회사 다니면서 사용하게 된 snprintf()는 사이즈를 체크할 수 있기 때문에
사이즈 커져 생길 수 있는 오류를 미리 예방할 수 있다.
(많은 core는 string을 copy하면서 발생)
그러다 어느날 sprintf()를 쓰면서 한가지 문제가 발생했다.
if( !(fp = fopen(cmd, "r")) )
{
uLogApp(LOG_MAJ, "getFtpSystemPatchFile() << FILE : %s isn't exist!!", cmd);
return uFalse;
}
if(fp) {
pclose(fp); fp = NULL;
}
snprintf(cmd, CMD_LEN-1, "%s %s %s %s %s %s %s", cmd, g_SmbInfo.patchIpAddr, g_SmbInfo.patchId,
g_SmbInfo.patchPassword, g_SmbInfo.patchBasePath,
g_SmbInfo.patchDownDir, fileName);
uLogApp(LOG_DEB0, "getFtpSystemPatchFile() << CMD : (%s) ", cmd);
소스가 조금 지저분하지만..
1. snprintf()를 이용해서 cmd에 특정 값을 저장한다.
2. 다시 snprintf()를 이용해서 cmd에 기존에 저장된 cmd값과 다른 값들을 함께 저장한다.
결과 : 기존 cmd에 있는 값들은 모두 삭제
기존 cmd값이 삭제되기 때문에 원하는 결과가 출력되지 않는다.
이렇게 사용한 것은 sprintf()를 사용하던 버릇때문에 발생한 문제인데
똑같은 사용이라도 sprintf()를 사용하면 발생하지 않는 문제이다.
<해결방법>
1. snprintf() -> sprintf()를 사용 ( 조금 무식한 방법으로, 사이즈 체크가 어렵기 때문에 패스)
2. offset을 이용한 방법 (권장)
다음은 offset을 이용해 해결한 방식이다.
xi32 offset=0;
offset = snprintf(cmd, CMD_LEN-1, "%s/INMSIFD/smb-inmsifd-1.0/get_patch_config.sh",
getenv("XN_HOME"));
if( !(fp = fopen(cmd, "r")) )
{
uLogApp(LOG_MAJ, "getFtpSystemPatchCfg() << FILE : %s isn't exist!!", cmd);
return uFalse;
}
if(fp) {
pclose(fp); fp = NULL;
}
uLogApp(LOG_MAJ, "CMD : (%s) ", cmd);
snprintf(cmd+offset, CMD_LEN-1, " %s %s %s %s %s", g_SmbInfo.patchIpAddr, g_SmbInfo.patchId,
g_SmbInfo.patchPassword, g_SmbInfo.patchBasePath, g_SmbInfo.patchDownDir);
uLogApp(LOG_MAJ, "CMD : (%s) ", cmd);
보다시피, offset을 사용하여 기존 cmd에서 남기고자 하는 만큼 off을 이용해서 포인터를 이동해서 복사한다. 문제 해결!!!
하지만 기존 값을 중간에 넣고 싶다면, 이 방법도 사용하지 못할 것....
그럴 때는 다른 변수를 사용해야 겠지???
왜 sprintf()는 가능한데 snprintf()는 안될까??
궁금하다~
ORDER BY COLUMN DESC (내림차순)
ORDER BY COLUMN ASC (오름차순)
2. SUM(COLUMN): 합
SELECT SUM(COLUMN) FROM Table_Name;
3. MAX(COLUMN): 최대 값
SELECT MAX(COLUMN) FROM Table_Name;
4. MIN(COLUMN): 최소 값
SELECT MIN(COLUMN) FROM Table_Name;
5. COUNT(COLUMN): 갯수
SELECT SUM(COLUMN) FROM Table_Name;
6. AVG(COLUMN): 평균
SELECT AVG(COLUMN) FROM Table_Name;
7. DISTINCT: 중복제거
SELECT DISTINCT COLUMN FROM Table_Name;
8. LIMIT(시작할 결과 번호, 반환할 결과 갯수): 결과 갯수 제한
SELECT * FROM Table_Name LIMIT 0, 2; -> 첫번째 결과부터 2개로 제한
SELECT * FROM Table_Name LIMIT 2; ->결과를 2개로 제한
'DataBase' 카테고리의 다른 글
JOIN (0) | 2009.09.17 |
---|---|
[Mysql/Psql] 데이터 암호화 (0) | 2009.09.14 |
[Mysql] 문자 함수 (0) | 2009.06.17 |
[Mysql] Oracle에 MINUS를 Mysql에서 구현해보자 (0) | 2009.06.16 |
[MySql] Alter Table 문법 (0) | 2009.06.15 |
1. RIGHT()
=> 열의 오른쪽부터 문자열을 추출
Ex) SELECT RIGHT(last_name, 2) FROM Person; => last_name필드에서 오른쪽에서 2글자를 반환
2. LEFT()
=> 열의 왼쪽부터 문자열을 추출
Ex) SELECT LFT(last_name, 2) FROM Person; => last_name필드에서 왼쪽에서 2글자를 반환
3. SUBSTRING_INDEX()
=> 특정 문자나 문자열 앞의 모든 문자열을 반환
Ex) SELECT SUBSTRING_INDEX(last_name, ',', 1) FROM Person; => 첫번째(1) 콤마(,)앞의 모든 문자열을 반환
4. SUBSTRING(your_string, start_position, length)
=> your_string 문자열에서 start_position부터 시작해서 length만큼 문자열을 반환
Ex) SELECT SUBSTRING('San Antonio, TX', 5, 3); => 결과 (Ant)
5. UPPER(your_string)
=> your_string 문자열을 대문자로 변환
Ex) SELECT UPPER('San Antonio, TX'); => 결과 (SAN ANTONIO, TX )
6. LOWER(your_string)
=> your_string 문자열을 소문자로 변환
Ex) SELECT LOWER('San Antonio, TX'); => 결과 (san antonio, tx)
7. REVERSE(your_string)
=> your_string 문자열을 역순으로 변환
Ex) SELECT REVERSE('San Antonio, TX'); => 결과 (XT ,oinotnA naS )
8. LTRIM(your_string)
=> your_string 문자열 앞의 공백 문자들을 제거한 문자열을 반환
Ex) SELECT LTRIM(' San Antonio, TX'); => 결과 (San Antonio, TX)
9. RTRIM(your_string)
=> your_string 문자열 뒤의 공백 문자들을 제거한 문자열을 반환
Ex) SELECT RTRIM('San Antonio, TX '); => 결과 (San Antonio, TX)
10. LENGTH(your_string)
=> your_string 문자열의 길이를 반환
Ex) SELECT LENGTH('San Antonio, TX'); => 결과 (15)
'DataBase' 카테고리의 다른 글
JOIN (0) | 2009.09.17 |
---|---|
[Mysql/Psql] 데이터 암호화 (0) | 2009.09.14 |
[Mysql] 기초 키워드 및 함수 (0) | 2009.06.17 |
[Mysql] Oracle에 MINUS를 Mysql에서 구현해보자 (0) | 2009.06.16 |
[MySql] Alter Table 문법 (0) | 2009.06.15 |
SELECT * FROM (
SELECT 'A' A, 'B' B FROM DUAL
UNION ALL
SELECT 'A1' A, 'B1' B FROM DUAL
UNION ALL
SELECT 'A3' A, 'B3' B FROM DUAL
) Z
LEFT OUTER JOIN (
SELECT 'A' A, 'B' B FROM DUAL
UNION ALL
SELECT 'A11' A, 'B11' B FROM DUAL
UNION ALL
SELECT 'A33' A, 'B33' B FROM DUAL
) ZZ
ON Z.A = ZZ.A
WHERE ZZ.A IS NULL
< Z - ZZ >
Table Z에서 Table Z와 ZZ가 동시에 가지고 있는 데이터 A열을 뺀 나머지를 구하는 Query
'DataBase' 카테고리의 다른 글
JOIN (0) | 2009.09.17 |
---|---|
[Mysql/Psql] 데이터 암호화 (0) | 2009.09.14 |
[Mysql] 기초 키워드 및 함수 (0) | 2009.06.17 |
[Mysql] 문자 함수 (0) | 2009.06.17 |
[MySql] Alter Table 문법 (0) | 2009.06.15 |