쿼리안에 쿼리가 서브쿼리

 

SELECT Orders.OrderID
FROM Orders where orderid in(select orderid from orderdetails where orderid >10248);

 

orders와 orderdetails 두테이블이 있다

 

둘다orderid라는 컬럼을 가지고있다

 

orders테이블에 orderid와

 

orderdetails 테이블에 orderid를 비교해서 참인것을 출력하고

 

orderdetails테이블에 orderid가 10248보다 큰 id값만을 비교한다.

'데이터베이스 > Oracle' 카테고리의 다른 글

Oracle select top & percent  (0) 2015.11.07
Oracle In 과 Not In  (0) 2015.11.06
Oracle Inner Join  (0) 2015.11.06
Oracle Left Join  (0) 2015.11.06
Oracle group by  (0) 2015.11.06
블로그 이미지

왕왕왕왕

,
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

 

 

inner Joiin은 table1과 table2의 중복된 값만 가져온다

 

밑에 쿼리는 Customers 테이블과 Orders테이블에 CustomerID값이 중복되는 Customers테이블에 CustomerName을 출력한다.

그리고 Orders테이블에 OrderID를같이 출력

 

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

 

 

       

'데이터베이스 > Oracle' 카테고리의 다른 글

Oracle In 과 Not In  (0) 2015.11.06
Oracle 서브쿼리  (0) 2015.11.06
Oracle Left Join  (0) 2015.11.06
Oracle group by  (0) 2015.11.06
Oracle Access와 Oracle 데이터타입 매핑  (0) 2015.11.06
블로그 이미지

왕왕왕왕

,

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

 

레프트 조인은 두 테이블간에 겹치는 부분을 가져옴

 

select Orders.ShipperID  ,Shippers.ShipperIDfrom Orders LEFT JOIN Shippers on Orders.ShipperID =  Shippers.ShipperID;

 

 

Orders라는 테이블과  Shippers라는 테이블이 있을때,

 

ShipperID가 두 테일블에 똑같이 존재하고있다고 치자

 

ShipperID필드에 값이 같은 데이터만 출력해준다.

 

 

Table1과 Table2가 있는데

 

Table1에 1,2,3

Tabel2에  2,3

 

Left Join하게되면 1,2,3이 나온다.

 

Table1 에 1과  중복된 2,3이 포함된 값

'데이터베이스 > Oracle' 카테고리의 다른 글

Oracle 서브쿼리  (0) 2015.11.06
Oracle Inner Join  (0) 2015.11.06
Oracle group by  (0) 2015.11.06
Oracle Access와 Oracle 데이터타입 매핑  (0) 2015.11.06
Oracle 현재날짜 기준 (한달전,어제,1년전 등등 쿼리)  (0) 2015.10.13
블로그 이미지

왕왕왕왕

,

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

블로그 이미지

왕왕왕왕

,

 ORACLE data type      Maps to Microsoft Access data type
--------------------------------------------------------
Char(n)                                     Text(n)
VarChar(n)                                Text(n)
Long                                          Memo
Date                                          Date/Time
Long Raw                                  Ole Object
Float                                           Double
RowID                                         Text(18)
Smallint                                      Text(255)

 

블로그 이미지

왕왕왕왕

,

select to_char(add_months(sysdate,-1),'yyyy-mm-dd'),-- 한달전 오늘
to_char(add_months(sysdate,-12),'yyyy-mm'),
to_char(add_months(sysdate,-12),'yyyy-mm-dd'), -- 1년전 오늘
to_char(add_months(sysdate,-12),'yyyy'),
to_char(sysdate-1,'yyyy-mm-dd') -- 어제
from dual

'데이터베이스 > Oracle' 카테고리의 다른 글

Oracle group by  (0) 2015.11.06
Oracle Access와 Oracle 데이터타입 매핑  (0) 2015.11.06
Oracle 오라클10g 암호화방법  (0) 2015.10.06
Oracle sys 계정로그인 & 비밀번호 변경  (0) 2015.10.06
Oracle 한글깨짐  (0) 2015.10.05
블로그 이미지

왕왕왕왕

,

간단한 암호화


사용방법

select rawtohex(DBMS_CRYPTO.Hash(to_clob(passwd),2)) from dual;

두번째 파라미터 
1 : md4, 2 : md5, 3 : sh1 암호화 방식을 의미

넣을때 암호화하여 넣고, 비교할 때 문자열을 암호화 하여 비교 한다.
문자열 암호화 : rawtohex(DBMS_CRYPTO.Hash(to_clob(to_char('inputpw')),2)) 



여기서부터는 sqlplus를 이용해 작성한다.


-- dbms_crypto 에 대한 실행 권한만 부여하면 권한은 끝!

grant execute on DBMS_CRYPTO to sinu;

-- package 껍데기
CREATE OR REPLACE PACKAGE king_crypto
IS
    FUNCTION encrypt (
        input_string        IN  VARCHAR2 ,
        key_data IN VARCHAR2 := '12345678'
    ) RETURN RAW;
    
    FUNCTION decrypt (
        input_string        IN  VARCHAR2 ,
        key_data IN VARCHAR2 := '12345678'
    ) RETURN VARCHAR2;

END king_crypto;
/

-- package body 를 살펴보자
CREATE OR REPLACE PACKAGE BODY king_crypto
IS
-- 에러 발생시에 error code 와 message 를 받기 위한 변수 지정.
    SQLERRMSG   VARCHAR2(255);
    SQLERRCDE   NUMBER;

-- 암호화 함수 선언 key_data 는 입력하지 않을 시에 default 로 12345678 로 지정됨.
    FUNCTION encrypt (input_string IN VARCHAR2 , key_data IN VARCHAR2 := '12345678') 
     RETURN RAW
    IS
    
        key_data_raw        RAW(64);
        converted_raw       RAW(64);
        encrypted_raw       RAW(64);

    BEGIN

-- 들어온 data 와 암호키를 각각 RAW 로 변환한다.
        converted_raw := UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8');
        key_data_raw     := UTL_I18N.STRING_TO_RAW(key_data, 'AL32UTF8');

-- DBMS_CRYPTO.ENCRYPT 로 암호화 하여 encrypted_raw 에 저장.
        encrypted_raw := 
             DBMS_CRYPTO.ENCRYPT(
                 src => converted_raw ,
-- typ 부분만 변경하면 원하는 알고리즘을 사용할 수 있다. 
--단, key value bype 가 다 다르니 확인해야 한다.
                 typ => DBMS_CRYPTO.DES_CBC_PKCS5 ,
                 key => key_data_raw ,
                 iv =>  NULL);
        
        RETURN encrypted_raw;
    END encrypt;

    FUNCTION decrypt (input_string IN VARCHAR2 , key_data IN VARCHAR2 := '12345678') 
     RETURN VARCHAR2
    IS
        converted_string    VARCHAR2(64);
        key_data_raw        RAW(64);
        decrypted_raw    VARCHAR2(64);

    BEGIN

        key_data_raw     := UTL_I18N.STRING_TO_RAW(key_data, 'AL32UTF8');
        
        decrypted_raw := 
            DBMS_CRYPTO.DECRYPT(
                 src => input_string ,
                 typ => DBMS_CRYPTO.DES_CBC_PKCS5 ,
                 key => key_data_raw ,
                 iv =>  NULL);

-- DBMS_CRYPTO.DECRYPT 수행 결과 나온 복호화된 raw data 를 varchar2 로 변환하면 끝!
        converted_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');

        RETURN converted_string;
    END decrypt ;
END king_crypto;
/


create table card_info ( id number, card_number varchar2(64) ) ;

-- 8자리 16자리 data 를 넣어보자.
insert into card_info values ( 1 , pkg_crypto.encrypt('1234567812345678')) ;
insert into card_info values ( 2 , pkg_crypto.encrypt('12345678')) ;
commit;

-- 암호화 되어 return 되는 bytes 가 다르다!
select * from card_info ;
        ID CARD_NUMBER                                     
---------- ----------------------------------------------------------------
         1 96D0028878D58C89D73FBE0238428B0A3D440C49910337FB
         2 96D0028878D58C898E250D5F4C76644B                

-- 복호화 해보니 정상적으로 잘 보인다.
select id , pkg_crypto.decrypt(card_number) card_number
from card_info;

        ID CARD_NUMBER                                     
---------- ----------------------------------------------------------------
         1 1234567812345678                                
         2 12345678                                        

-- key value 를 00000000 으로 바꾸어 보자
insert into card_info values ( 3 , pkg_crypto.encrypt('1234567812345678','00000000')) ;

-- 데이터는 id=1 과 같은데 key 가 다르므로 암호화된 값이 다름을 알 수 있다.
select * from card_info where id = 3;
        ID CARD_NUMBER                                     
---------- ----------------------------------------------------------------
         3 858B176DA8B125034356364E8179CD61040EE2CAC3041331

-- 복호화 할 때는 반드시 암호화 시 사용했던 key value 가 필요하다.
select id , pkg_crypto.decrypt(card_number,'00000000') card_number from card_info where id = 3  ;

        ID CARD_NUMBER                                     
---------- ----------------------------------------------------------------
         3 1234567812345678                                

출처 http://www.rudaks.co.kr/post/1316


블로그 이미지

왕왕왕왕

,


## SYS or SYSTEM 계정으로 login ##

1. C:\>sqlplus

2. 사용자명 입력 : sys as sysdba

3. 암호 입력 :  ( 아무것도 넣지 않고, 그냥 Enter )

4. 현재 나의 계정이 어떤 계정인지를 알기위해 

    SQL> show user 

    로 확인해보면,

    결과 화면 :  USER은 ~SYS~입니다.



## SYS or SYSTEM 계정 비밀번호 변경 ##

// 계정(sys)의 바꿀 비밀번호를 지정해준다(hankyung)

5. SQL> alter user sys identified by hankyung;        


// 변경한 후에 해당 계정으로 접속하기    

6. SQL> conn sys/hankyung as sysdba;


// 현재 자신이 들어온 계정이 어떤 것인지 확인한다.

7. SQL> show user

블로그 이미지

왕왕왕왕

,