티스토리 뷰

MODEL/ORACLE

[ORACLE] DQL : 질의어(SELECT)

찰떡쿠키부스트 2017. 11. 15. 17:36

 

 

DQL : 질의어

 

select [distinct] {*, column [alias],...} from (테이블명) ;


[]-생략가능한것들 

※ 산술표현 --> +, - , * , /   from 절을 제외하고 다 가능

//산술 여러개있을땐 괄호 쓰는게 가시성이 좋아 쓰는게좋음


1) select = 데이터 조회할때 (sql 명령어)

                                 // select * from tab; ---> table 목록을 볼 수 있음

2) distinct = 중복값제거


3) * = 모든칼럼            


4) [alias] = as = 칼럼별칭변경

          // as []라서 생략가능하나 칼럼많으면 헷갈리니까 as쓰는게 좋음 

// 기본적으로 대문자고  ""안에넣으면 소문자      

​ 

5) 그외 = 리터럴문자--> 레코드 수정,합성 ex) '날짜,문자값',  ||(합성)


select [sysdate, user] from dual; -----> dual=더미테이블 1개쓰거나 시간 볼때 정보볼때

 

 

NULL

-값이 정해지지 않은,알려져 있지 않은,이용 할 수 없는,적용 불가능한 값

---> (null) 걍 안정해진 값 0이나 공백은 아님

NVL함수
 -NULL을 대치할때 사용
    -NVL(expr1, expr2)
        expr1 --> null을 대신할 값이나 표현식 (칼럼,레코드 등등)
        expr2 --> null을 대신 사용할 값
            * expr1 과 expr2의 데이터 타입은 같아야 함.

 

WHERE 절       

select 선택목록 from 테이블명 [where 조건식];

 

 

-테이블 내의 특정 행만 선택하고 싶을 때

where 칼럼  = 레코드 ;   ---> 레코드 하나 선택
                        범위 sal >= 1000 and sal <=2000    (운영체제 연산자)
                     between (not) 1000 and 2000 (데이터베이스 연산자)
            문자열 ---> '레코드' (대소문자 구분 smith SMITH)



ORDER by 절

- 정렬할때 사용

order by sal asc -올림차순(디폴트.기본값)
                desc - 내림차순
     ※null의 위치- 올림차순 마지막, 내림차순 처음

 

 

 

그룹함수(GROUP BY 절)

 

-전체 데이터를 그룹별로 구분하여 통계적인 결과를 구하기 위해 자주 사용되는 함수


SUM - 해당 컬럼의 행들의 합계를 구한다.
      ex) select SUM(sal) from emp; -> emp테이블에서 월급(sal)컬럼의 합계를 구하라.


AVG - 해당 컬럼의 행들의 평균을 구한다.
      ex) select AVG(sal) from emp; -> emp테이블에서 월급(sal)컬럼의 평균을 구하라.

 

         ※ 전체 평균을 구할 때 NULL 값이 있을 수도 있기에 NVL함수를 응용해서 구해줌

 

MIN - 해당 컬럼의 행중에 최소값을 구한다.
MAX - 해당 컬럼의 행중에 최대값을 구한다.
      ex) select MAX(sal), MIN(sal) from emp;  

         --> emp테이블에서 월급(sal)컬럼의 최대값과 최소값을 구하라.

       

# Max와 Min은 숫자뿐만 아니라 문자타입, 날짜타입에도 사용이 가능하다.
            ex) MAX(hiredate)  --> 최근입사날짜 , 

                 MIN(ename)  --> 알파벳역순으로 제일 빠른이름


COUNT - 조건을 만족시키는 행의 개수를 구한다.
            ex) select COUNT(sal) from emp;  

              -->  emp테이블에서 월급(sal)컬럼의 행의 개수를 구하라.
            ex) select COUNT(sal) from emp where sal>=2000 

            --> emp테이블에서 월급이 2000이상인 행의 개수를 구하라.


  COUNT(*) --> group by 로 그룹핑 된 행 각자들 다 합친다.

count(*) --> null 값까지 다 포함

count(column) --> null값 제외

HAVING 절

- 그룹을 제한하기 위해서 사용

ex)


논리구조를 잘알아야됨!!!!!!!!!!!!!!!!!!!!!!!!

1) from절의 s_emp 테이블에서 where 조건 만족하는 놈들 다찾음

2) 찾은놈들을 group by title 칼럼값에 따라 그룹핑을함(order는 자동으로됨)

3) 그룹핑되있는애들에 대해 having절 만족하는 '그룹'을 찾음

4) 최종적으로 찾은 '그룹'에 대해 select 리스트 값을 계산

5) order by 로 정렬.

ex)

81년도에 입사한 직원들의 부서별 총 급여를 출력하시오.
이때 부서별 총사원수가 3명이상인 부서만 출력하시오.

 

SELECT e.deptno, d.dname, SUM(e.sal)
FROM EMP e, DEPT d
WHERE e.DEPTNO = d.DEPTNO(+)
 AND e.HIREDATE LIKE '81%'
GROUP BY e.deptno, d.DNAME
HAVING COUNT(*) >=3;

 

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


alter session set nls_date_format = 'rr/mm/dd';
날짜 타입 바꾸기 

 

 

댓글