Govern/Sql developer -설치,함수,조인

06-24(목) | | , LIKE, IN

Mary's log 2021. 6. 28. 02:44

※ 개발 공부 정리글이며 해당 직군에서 종사하며 계속 공부하고 수시로 정리중입니다. 


■   NVL( 컬럼명, 대체값 )   NVL2( 컬럼명 , 대체값1 , 대체값2 )  함수

SELECT  NVL(컬럼명,  앞의 컬럼명의 값이 null이면 표시할 값) FROM TABLE;

SELECT NVL2(컬럼명, 앞의 컬럼명의 값이 null이 아니면 표시할 값1, null이면 표시할 값2) FROM TABLE;

 


■   컬럼명 || 컬럼명   : 해당 컬럼명의 데이터들을, 문자열로 합치기

- \키보드 시프트하고 입력하면 " | ", (원화 화폐 기호 맞음)

 

★컬럼명 별칭 alias에만 큰따옴표 붙이기                ex) SELECT ENAME "문자,숫자,날짜값" FROM EMP;

★별칭 이외 문자, 날짜 형태에는 작은따옴표 붙이기  ex) SELECT ' ' FROM EMP;

-만약 값과 값 사이에 띄어쓰기를 넣고 싶다면 컬럼명 컬럼명 사이에 [ || ' ' || ] 해서 넣어주기

ex) SELECT ENAME || ' ' || JOB "이름 직업" FROM EMP;

-문장으로 구성하고 싶다면 값 적으면 됨

ex) SELECT ENAME || '의 직업은 ' || JOB || '입니다.' AS "사원별 직급" FROM EMP;

 


■ SELECT DISTINCT  컬럼명 FROM TABLE ;   중복되는 값들을 한 번만 보여줌


■ WHERE :  현재 테이블에서 검색조건을 지정해서 검색. 해석하면  ' WHERE 이하가  ~ 인'  정도로

위치는 꼭 TABLE 뒤인

SELECT *

FROM TABLE

WHERE ~ 뒤!!

 

WHERE 비교연산자1

=, >, >=, <, <=, <>

자바에서 :  값과 값이 같은지 비교: a==b , 다른지 비교:  a!=b  /  a=b는 a값을 b값에 대입 

SQL에서 : 값과 값이 같은지 비교:   a=b,  다른지 비교:  a<>b, a!=b, a^=b 

 

-비교 대상이 숫자형식 값이라면,

ex) WHERE  [월급이 1000이상] 인 ;  월급 컬럼은 숫자 타입이고 1000은 숫자타입으로 비교되는거임

=> SELECT * FROM EMP WHERE SAL <= 1000 ;

 

-비교대상이 문자,날짜형식의 값이라면,  '   '

ex) ① WHERE [이름 KING] 인 ;    KING은 문자형식!!! ≠ KINg , king 이렇게 쓰면 절대 안됨!!!

=>  SELECT * FROM EMP WHERE ENAME='KING' ;

ex) ② WHERE [입사일이 07/12/31 이후] 인 ;    HIREDATE는 날짜 타입이고, 07/12/31은 날짜 타입으로 인식되는거임!

=>  SELECT * FROM EMP WHERE HIREDATE>'07/12/31' ;


WHERE 비교연산자2

SELECT *FROM TABLE
WHERE 컬럼명 BETWEEN 값1 and 값2 ;   !!!이상 이하, 안의 값이 포함돼서 나옴!!! 값1<값2여야함

 

 

질문: 그럼 숫자랑 문자랑 같이 쓰려면.....? =>정리하면서 생각했는데 애시당초 숫자랑 문자랑... between이.. 될수있나? 뭘 떠올렸길래 저렇게 쓴거지 까먹음 => 아 이거 나옴 근데 저거 BETWEEN AND가 아니고 그냥 AND임 오키?

ex) 숫자형식 값: WHERE     SAL      BETWEEN 7000 AND 8000 ;

     날짜형식 값: WHERE HIREDATE BETWEEN '07/01/01' AND '08/12/31' ;

꼭 문자, 날짜값엔  '   ' 쓰기!!!!! " " 는 별칭에만!!!!

 


■ 컬럼명 IN (값1, 값2, 값3....) ;   컬럼명 값에 (값1, 값2, 값3...)으로 들어있는...
=WHERE   컬럼명='값'   OR   컬럼명='값'   OR ......... ; 컬럼명 값이 값1이거나, 값2이거나, 값3인...

 

길게 or 연산자 쓸바엔 in 하나 쓰는게 나을 때도 있음

ex) ① 숫자값일때

SELECT * FROM EMP WHERE EMPNO=7369 OR EMPNO=7521 OR EMPNO=7900;
SELECT * FROM EMP WHERE EMPNO IN(7369,7521,7900);

② 문자날짜값이면

SELECT * FROM EMP WHERE ENAME='KING' OR ENAME='JONES' OR ENAME='SMITH';
SELECT * FROM EMP WHERE ENAME IN('KING','JONES','SMITH');

 

 


■ 컬럼명 LIKE  '문자1',  '문자2',  '문자3'..... ;   

LIKE 뒤에 숫자문자날짜 데이터 상관없이 ' ' 작땀표 꼮!!!!!!!
와일드카드 % : (앞뒤로) 글자수 상관없이 ~ 
와일드카드 _  : (앞뒤로) 글자수 몇개인 ~ 

 

 

ex)

SELECT * FROM EMP WHERE ENAME LIKE 'J%';

J로 시작하는 사원명인~

SELECT * FROM EMP WHERE EMPNO LIKE '___4';
SELECT * FROM EMP WHERE EMPNO LIKE '%4';

'_ _ _ 4' 앞에 3글자 있고 마지막이 4로 끝나는 사원번호인~

= '%4'와 같음

'_L%' : (_가 하나니까 앞에 어떤 한 글자 있고) 두번째 글자가 L로 시작하는, (뒷 글자 갯수는 상관없는) 단어

'%_%' : _가 문자 언더바로 인식이 안되고 와일드카드가 됨, 문자로 쓰고 싶으면

            _앞에 $ 적고 뒤에 escape

=> WHERE 컬럼명 LIKE  '%$_%'  ESCAPE '$'  ;   (얘는 별로 쓸일 없음 알고만 있기)

     WHERE 컬럼명 LIKE '%E_ _ _' ESCAPE 'E' : E 바로 뒤의 _는 와일드카드가 아닌 그냥 문자,

                         E 바로 뒤 _의 뒤 _ _ 2개는 글자_로 인식되어서,

                       뒤에서 3번째에 _가 들어가고 뒤 _ _는 뭔지 모르는 단어 검색 ex) ABCD_12

 

[ ] 대괄호는 써도 되고 안 써도 되는거

 

 

★WHERE에 사용가능한 논리연산자★

SELECT * FROM EMP WHERE EMPNO=<7500 OR JOB='MANAGER';
SELECT * FROM EMP WHERE EMPNO=7500 AND JOB='MANAGER';

WHERE의 AND 와  BETWEEN의 AND 헷갈리지 않기!!

 

WHERE NOT EMPNO=7500 ;   여긴 = 자리에  =<이건 안되고 < 이렇게만 됨

WHERE NOT EMPNO<7500   :사번이 7500보다 작지 않은~ =사번이 7500보다 큰~

WHERE NOT EMPNO BETWEEN 7500 AND 7800 :사번이 7500와 7800 사이에 있지 않은~ 

                                                                   =사번이 7500보다 적고, 7800보다 큰~

WHERE NOT ENAME IN ( 'KING', 'JONES' )  :이름이 KING, JONES가 아닌~ 

WHERE COMM IS NOT NULL     : 상여금이 NULL 이 아닌~

WHERE ENAME NOT LIKE 'J%'    : 사원명이 J로 시작하지 않는~

 

연산자 우선순위 때문에 나오는 결과가 달라질수 있음

SELECT ENAME, JOB, SAL, COMM FROM EMP

左) WHERE JOB = 'MANAGER' OR JOB='CLERK'
AND COMM IS NULL
AND SAL >= 800
AND SAL <= 2500 ; [직업 CLERK 이고 상여금 NULL이고 월급 800이상 2500이하인] 것과 + [직업이 매니저인] 것

 

右)  WHERE (JOB = 'MANAGER' OR JOB='CLERK')
AND COMM IS NULL
AND SAL >= 800
AND SAL <= 2500 ; [직업이 매니저이거나 CLERK 인] 것 중에서 [상여금 NULL, 월급 800이상 2500이하인] 것 

 

 


■ SELECT * FROM TABLE 정렬 함수

ORDER BY 컬럼명         ; 기본 ASCE 오름차순 (NULL은 가장 큰값)
ORDER BY 컬럼명 ASCE ;  오름차순 (NULL은 맨아래)
ORDER BY 컬럼명 DESC ;  내림차순 (NULL은 맨위)

 

-SELECT 뒤의  컬럼명에 별칭 써도 순서가 변하진 않음

ex)

SELECT EMPNO, ENAME, SAL        FROM EMP ORDER BY SAL DESC ; 
SELECT EMPNO, ENAME, SAL "월급" FROM EMP ORDER BY SAL DESC ;

 

-ORDER BY 숫자(인덱스라고함) ;     SELECT 뒤의 컬럼명이 여러개일 때 앞에서부터 몇번째 컬럼을 정렬해라

ex) SELECT EMPNO, ENAME, SAL  FROM EMP ORDER BY 2 DESC ;   ENAME을 내림차순하라 

 

-만약 보여줄 컬럼이 여러개고, 

첫번째 컬럼 정렬 후, 두번째 컬럼 정렬 하면 순서가 바뀜

=이거 역시 ORDER BY 3 DESC , 4 ; 이런식으로도 가능