※ 개발 공부 정리글이며 해당 직군에서 종사하며 계속 공부하고 수시로 정리중입니다.
■ 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 ; 이런식으로도 가능
'Govern > Sql developer -설치,함수,조인' 카테고리의 다른 글
06-30 (수) ANSI조인_LEFT OUTER JOIN... (0) | 2021.06.30 |
---|---|
06-29(화) 오라클조인 (0) | 2021.06.29 |
06-28(월) 변환조건그룹 함수, CASE, COALESCE (0) | 2021.06.29 |
06-25(금) 문자숫자날짜 함수 (0) | 2021.06.28 |
06-23(수) Oracle, SQL Developer (0) | 2021.06.26 |