--  1,2 컬럼값이 서로 같고 3컬럼값만 다른경우
SELECT * FROM A, B
WHERE (A.1 = B.1 AND A.2 = B.2)
AND A.3 <> B.3;

--  1,3컬럼값은 같고  2컬럼값만 다른 경우
SELECT * FROM A, B
WHERE (A.1 = B.1 AND A.3 = B.3)
AND A.2 <> B.2;

--  2,3컬럼값은 같고  1컬럼값만 다른 경우
SELECT * FROM A, B
WHERE (A.2 = B.2 AND A.3 = B.3)
AND A.1 <> B.1;


--  1,2,3 컬럼이 전부 다른 경우
SELECT * FROM A, B
WHERE A.1 <> B.1 AND A.2 <> B.2
AND A.3 <> B.3;

 

출처 - http://www.gurubee.net/article/59245

 

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

 

SELECT A.TIMS_DATE,
       A.FUND_CODE,
       A.FUND_NAME,
       A.BM_INDEX,
       B.BM_INDEX,
       A.BM_RATE,
       B.BM_RATE
  FROM IFT_FUND_STANDARD_PRICE_RESULT A, IFT_FUND_STANDARD_MODIFY B
 WHERE     (A.BM_INDEX <> B.BM_INDEX OR A.BM_RATE <> B.BM_RATE)
       --AND A.TIMS_DATE = '20171104'
       AND A.TIMS_DATE = TO_CHAR(SYSDATE-3, 'YYYYMMDD')
       AND A.TIMS_DATE = B.TIMS_DATE
       AND A.FUND_CODE = B.FUND_CODE

SELECT
 운용사펀드코드,
 (SELECT 설정일 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=D:\20170703\설정일생성.xlsx;','SELECT * FROM [Sheet1$]') WHERE 펀드코드 = A.운용사펀드코드) AS 설정일
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=D:\20170703\펀드설정전체.xlsx;','SELECT * FROM [Sheet1$]') A

----------------------------------------------- 기본셋팅

1. Ad Hoc Distributed Queries 옵션 활성화

EXEC sp_configure 'show advanced options', 1

GO

 

RECONFIGURE

GO

 

EXEC sp_configure 'Ad Hoc Distributed Queries', 1

GO

 

RECONFIGURE

GO

2. Mirosoft Access Database Engine 2010 Redistributable  설치

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13255

자 이제 준비는 다 되었다. 이제 쿼리로 엑셀을 테이블처럼 사용하면 된다.


출처 - http://yoonsy.tistory.com/12

[MYSQL]mysqldump 백업

Database 2016.09.29 20:02 Posted by 애플자라

■ mysqldump 사용하는 방법

 

전체 데이터베이스 또는 특정 데이터베이스를 백업하거나 특정테이블만 백업 할 수 있다.

 

▷ 전체 데이터베이스 백업

 

- 서버의 전체 데이터베이스를 alldatabase.sql로 백업한다.

 

mysqldump -uroot -p -A > alldatabase.sql

 

▷ 특정 데이터베이스 백업

 

- test 데이터베이스만 백업한다.

 

mysqldump -uroot -p test > testdb.sql

 

▷ 특정 테이블만 백업

 

- test 데이터베이스의 board 테이블만 백업 한다.

 

mysqldump -uroot -p test board > testdbboard.sql

 

 

※ 특정 데이타베이스의 테이블생성(schema) 정보만 백업하는 방법

 

mysqldump -uroot -p --no-data test > testdbschema.sql

 

- mysqldump-? 명령어로 여러 옵션을 확인 할 수 있다.

 


▷ InnoDB에서 트리거 , 프로시져, 함수 포함하여 백업하기


  - 트리거는 default값으로 백업이 실행되나 저장 프로시져는 백업되지 않는다. 


  - 저장 프로시져가 백업되게 하기 위해서는 옵션에  --routines 을 넣어줘야 한다.  


mysqldump -u계정 -p비밀번호 --routines 특정DB명 > 함수프로시져트리거.sql


(예) mysqldump -uroot -ppassword --routines  northwind > northwind.sql

 

 

   ※ 트리거 , 프로시져, 함수 만 백업하기 - 쿼리문만  


 mysqldump -u계정 -p비밀번호 --routines  --no-create-info --no-data --no-create-db --skip-opt 특정DB명 > 함수프로시져트리거.sql 

(예) mysqldump -uroot -ppassword --routines --no-create-info --no-data --no-create-db --skip-opt northwind > northwind_only_sp_trigger_function.sql

이렇게 트리커 프로시져 함수만 백업한 경우는 반드시 Data와 테이블 스키마를 별도로 백업 받아 줘야 합니다




출처 - http://bizadmin.tistory.com/entry/MySQL-%EB%B0%B1%EC%97%85-%EB%B0%8F-%EB%B3%B5%EA%B5%AC%ED%95%98%EA%B8%B0

[MYSQL]테이블 카운트, rows

Database 2016.09.20 09:35 Posted by 애플자라

-- 테이블 카운트

select count(*) from information_schema.tables


-- 테이블 row수 카운트

select TABLE_SCHEMA,TABLE_NAME,TABLE_ROWS,TABLE_TYPE from information_schema.tables

Linux 서버가 갑자기 죽으면서 아래와 같이 Mysql 구동시

MySQL manager or server PID file could not be found 발생

 

 

 

Case1)

사용중 디스크 장애로 테이블이 오픈된 상태에서 종료가 된게 원인인걸로 확인

 

Case2)

cnf 파일이 문제가 있거나 혹은 권한 문제로 인해 pid가 없는 경우에 발생하는 에러인듯 하다

(해당 경로에 프로세스 id 관련 파일이 없음)

 

해결방법)

현재 포털에는 많은 것들이 있으나, 운영DB라서 섣불리 건들기 힘듦;

 

[ORACLE]조인 결과로 테이블 UPDATE하기

Database 2014.10.29 16:54 Posted by 애플자라

UPDATE TB_MARKETING AA

SET (AGENCY_ID) = (SELECT AGENCY_ID FROM TEMP_GROUP B WHERE B.GROUP_NAME =AA.GROUP_NAME)

 

 

SELECT E.ID, E.SUBID, T.SUBID

UPDATE TB_MARKETING SET SUBID = T.SUBID

FROM TB_MARKETING E

INNER JOIN #TEMP_GROUP T ON ( E.SEQ = T.SEQ )

* 한 컬럼 중복제거 후 이어 붙이기

 

SELECT LAW_ID,

       SUBSTR(XMLAGG(SYS.XMLTYPE.CREATEXML('<'||FLAG||'>,' || CONTRACT_GESTALT||'</'||FLAG||'>') ORDER BY CONTRACT_GESTALT).EXTRACT('/a1/text()'), 2) CONTRACT_GESTALT,

       SUBSTR(XMLAGG(SYS.XMLTYPE.CREATEXML('<'||FLAG||'>,' || MEMO1||'</'||FLAG||'>') ORDER BY MEMO1).EXTRACT('/a1/text()'), 2) MEMO1

 FROM (

       SELECT

           LAW_ID,

           CONTRACT_GESTALT,NVL2(CONTRACT_GESTALT, 'a' || ROW_NUMBER() OVER (PARTITION BY LAW_ID, CONTRACT_GESTALT ORDER BY CONTRACT_GESTALT),

           'a2')  AS FLAG,

           MEMO1,NVL2(MEMO1, 'a' || ROW_NUMBER() OVER (PARTITION BY LAW_ID, MEMO1 ORDER BY MEMO1),

           'a3')  AS FLAG1

       FROM LAW_OP_FUND)      

GROUP BY LAW_ID

 

* 중복제거 없이 이어 붙이기

 

SELECT 

    LAW_ID,

    SUBSTR (MAX (SYS_CONNECT_BY_PATH (CONTRACT_GESTALT, ',')), 2) CONTRACT_GESTALT

FROM (SELECT LAW_ID, CONTRACT_GESTALT,

       ROW_NUMBER () OVER (PARTITION BY LAW_ID ORDER BY CONTRACT_GESTALT) rnum

       FROM LAW_OP_FUND)

START WITH rnum = 1

CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR LAW_ID = LAW_ID

GROUP BY LAW_ID

 

또는

 

SELECT

    LAW_ID,

    MAX(LTRIM(SYS_CONNECT_BY_PATH(CONTRACT_GESTALT,','),',')) AS CONTRACT_GESTALT

FROM

    (

    SELECT LAW_ID,CONTRACT_GESTALT,ROW_NUMBER() OVER(PARTITION BY LAW_ID ORDER BY ROWNUM) AS RN

    FROM LAW_OP_FUND T1

    --where LAW_ID ='2014091700002'

    )

START WITH RN = 1

CONNECT BY PRIOR LAW_ID = LAW_ID AND PRIOR RN = RN - 1

GROUP BY LAW_ID

ORDER BY LAW_ID ASC

 

출처 - http://amnesis.tistory.com/13

[ORACLE]Tablespace별로 용량 체크하기

Database 2012.12.05 14:40 Posted by 애플자라

SELECT 
    SUBSTR(MAX(A.TABLESPACE_NAME),1,16) "Tablespace",
    --TO_CHAR(A.FILE_ID, '9999') "File ID",
    SUBSTR(MAX(A.FILE_NAME),1,43) "Data file",
    SUBSTR(MAX(A.STATUS),1,10) "Status",
    MAX(A.BYTES)/1024/1024 "TOTAL SIZE(Mb)" ,
    (MAX(A.BYTES)-NVL(SUM(B.BYTES),0))/1024/1024 "USED SIZE(Mb)",
    NVL(SUM(B.BYTES),0)/1024/1024 "FREE SIZE(Mb)",    
    --MAX(A.BLOCKS)-NVL(SUM(B.BLOCKS),0) "USED BLOCKS",
    TO_CHAR((MAX(A.BYTES)-NVL(SUM(B.BYTES),0))*100/MAX(A.BYTES),'990.99')||'%' "USED USAGE",
    --NVL(SUM(B.BLOCKS),0) "FREE BLOCKS",
    TO_CHAR(NVL(SUM(B.BYTES),0)*100/MAX(A.BYTES),'990.99')||'%' "FREE USAGE"
    --MAX(A.BLOCKS) "TOTAL BLOCKS"
FROM DBA_DATA_FILES A, DBA_FREE_SPACE B
WHERE A.FILE_ID=B.FILE_ID(+)
--AND   A.FILE_ID IN ('6','7','8')
GROUP BY A.FILE_ID
ORDER BY 1,2;

 

 

SELECT U.TABLESPACE_NAME "테이블 스페이스"
, U.BYTES / 1048576 "크기(mb)"
, (U.BYTES - SUM(NVL(F.BYTES,0))) / 1048576 "사용됨(mb)"
, (SUM(NVL(F.BYTES,0))) / 1048576 "남음(mb)"
, TRUNC((SUM(NVL(F.BYTES,0)) / U.BYTES) * 100,2) "남은 %"
, U.FILE_NAME "저장위치"
FROM DBA_FREE_SPACE F
, DBA_DATA_FILES U
WHERE F.FILE_ID(+) = U.FILE_ID
GROUP BY U.TABLESPACE_NAME
, U.FILE_NAME
, U.BYTES
ORDER BY U.TABLESPACE_NAME;

 

 

select file_name, tablespace_name, bytes, autoextensible
  from dba_data_files
  where tablespace_name='AMAIL_DATA_TS';

 테이블 복사하기 스키마 데이터

CREATE TABLE 새로만들테이블명 AS

SELECT * FROM 복사할테이블명 [WHERE 절]

 

 테이블 구조만 복사하기

CREATE TABLE 새로만들테이블명 AS

SELECT * FROM 복사할테이블명 WHERE 1=2 [where에다가 참이 아닌 조건을 넣어줌]

 

 테이블은 이미 생성되어 있고 데이터만 복사

INSERT INTO 복사할테이블명 SELECT * FROM 복사할테이블명 [WHERE 절]

 

테이블 이름 변경

ALTER TABLE 구테이블명 RENAME TO 신테이블명

주의할 점은, Primary Key 나 Index 등 Constraint 는 복제되지 않습니다. 당연한 것이, 복제된다면 동일한 이름의 Object 가 이미 존재한다는 에러를 만나게 되겠죠. 데이터를 잠시 옮겨놓기 위한 용도의 테이블 복제에선 불필요하다고 봅니다.

[ORACLE]테이블명,인덱스명 변경

Database 2012.03.30 14:08 Posted by 애플자라

테이블명 변경: RENAME {변경전이름} TO {변경후이름};
인덱스명 변경: ALTER INDEX {변경전이름} RENAME TO {변경후이름};

1.변경하고자 하는 COLUMN으로 Unique Index를 생성한다.

쿼리 -
CREATE UNIQUE INDEX PK명 ON TABLE명(COLUMN명) TABLESPACE TABLESPACE명;
예제(테이블스페이스는 사용 안함) -
CREATE UNIQUE INDEX PK_FTA_PO_LEDGER ON FTA_PO_LEDGER(COMPANY_CODE, PROJECT_CODE, FTA_CODE, ITEM_CODE);


2.해당하는 PK를 삭제한다

ALTER TABLE RECRUIT_APP DROP PRIMARY KEY


쿼리 -
ALTER TABLE TABLE명 DROP CONSTRAINT PK명;
예제(테이블스페이스는 사용 안함) -
ALTER TABLE FTA_PO_LEDGER DROP CONSTRAINT FTA_PO_LEDGER_PK;


3.PK에 속성을 추가한다.
쿼리 -
ALTER TABLE TABLE명 ADD CONSTRAINT PK명 PRIMARY KEY(COLUMN명);
예제 -
ALTER TABLE FTA_PO_LEDGER ADD CONSTRAINT PK_FTA_PO_LEDGER PRIMARY KEY(COMPANY_CODE, PROJECT_CODE, FTA_CODE, ITEM_CODE);

select * from USER_IND_EXPRESSIONS where table_name = 'COUNSELLING'; -- 인덱스검색

[출처] 테이블의 PK 변경하기 (개발자로 살아남기) |작성자 정우아빠