• SELECT sum(sal) FROM emp; (데이터의 합계를 구하는 sum)
  • SELECT sum(DISTINCT sal), sum(ALL sal), sum(sal) FROM emp; (중복을 제외한 값의 합계,모든 데이터의 합계, 모든 든 데이터의 합계)
  • SELECT count(*) FROM emp; (emp테이블의 데이터의 갯수)
  • SELECT count(*) FROM emp WHERE deptno = 30; (부서번호가 30번인 직원 수)
  • SELECT count(DISTINCT sal), count(ALL sal),count(sal) FROM emp; (중복제거한 데이터의 수, 모든 데이터의 수, 모든데이터의 수)
  • SELECT count(comm) FROM emp; (NULL은 count에 포함되지 않는다)
  • SELECT count(comm) FROM emp WHERE comm IS NOT NULL;  (결과는 위와 동일)
  • SELECT max(sal) FROM emp WHERE deptno = 10; (sal이 가장 높은값)
  • SELECT min(sal) FROM emp WHERE deptno = 10; (sal이 가장 낮은 값)
  • SELECT min(hiredate) FROM emp WHERE deptno = 20; (부서가 20인 사원중에 가장 장기근무자를 출력)
  • SELECT avg(sal) FROM emp; (sal의 평균 출력)
  • SELECT round(avg(sal),2) FROM emp; ( 평균을 소수점 3째 자리에서 반올림)
  • SELECT avg(sal), deptno FROM emp GROUP BY deptno; (부서별로 평균을 구하는 group by)
  • SELECT deptno, job, avg(sal) FROM emp 
    GROUP BY deptno, job 
    ORDER BY deptno, job;  (부서번호와 직책별 평균 급여를  부서번호와 직책별로 정렬)
  • SELECT ename, deptno, avg(sal) FROM emp
    GROUP BY deptno; (그룹화된 열 외에 일반 열을 select절에 명시할 수 없다.)
  • SELECT deptno, job, avg(sal) FROM emp
    GROUP BY deptno, job
    HAVING avg(sal)>=2000
    ORDER BY deptno, avg(sal); (각 부서의 직책별 평균 급여를 구하되, 평균 급여가 2000 이상인 그룹만 출력(having절을 사용할 때 where절로 인해 데이터가 잘못 누락되는 일이 없게 해야함, 애초에 그룹 대상에서 제외할 대상 데이터가 있을 때 사용))
  • SELECT deptno, job, count(*), max(sal), sum(sal),min(sal), round(avg(sal),2) FROM emp
    GROUP BY ROLLUP (deptno, job); (1차 기준 분류에 대한 합계를 구할 수 있다.)
  • SELECT deptno, job, count(*), max(sal), sum(sal),min(sal), round(avg(sal),2) FROM emp
    GROUP BY deptno,ROLLUP(job); (그룹화 데이터의 일부만 ROLLUP 또는 CUBE를 할 수 있다.)
  • SELECT deptno, job, count(*), max(sal), sum(sal),min(sal), round(avg(sal),2) FROM emp
    GROUP BY CUBE(deptno, job)
    ORDER BY deptno, job; (1,2 차 기준 분류에 대한 합계를 구할 수 있다.)
  • SELECT deptno, job, count(*), max(sal), sum(sal),min(sal), round(avg(sal),2) FROM emp
    GROUP BY GROUPING SETS(deptno, job)
    ORDER BY deptno, job; (같은 수준의 그룹화 열이 여러개일 때 각각 열별 그룹화를 통해 결과 출력)
  • SELECT deptno, job, count(*), max(sal), sum(sal), min(sal),round(avg(sal),2),
    GROUPING(deptno), GROUPING(job)
    FROM emp
    GROUP BY CUBE(deptno,job)
    ORDER BY deptno, job; (grouping 여부 --> 0: grouping, 1:grouping x)
  • SELECT deptno, job, count(*), max(sal), sum(sal), min(sal),round(avg(sal),2),
    GROUPING(deptno), GROUPING(job),
    GROUPING_ID(deptno,job)
    FROM emp
    GROUP BY CUBE(deptno,job)
    ORDER BY deptno, job;

grouping ID의경우 그룹화 결과가 0,0 이면 0

0,1 이면 1

1,0이면 2

1,1이면 3으로 표현된다 (2진수를 10진수 형태로 표현))

  • SELECT * FROM emp,dept; -- 두 테이블이 합쳐져서 출력(필요없는 정보까지 조합해서 가져옴)
  • SELECT * FROM emp,dept
    WHERE emp.deptno = dept.deptno
    ORDER BY empno; (컬럼명을 비교하는 조건식으로 조인 -> 테이블명.컬럼명,  emp테이블과 dept테이블의 겹치는 컬럼이 deptno이므로 두개가 같을때만 출력한다)
  • SELECT * FROM emp E,dept D ( 테이블의 별칭을 지정할 때는 주로 한칸 띄우고 별칭을 지정(emp는 E로 dept는 D로)
    WHERE E.deptno = D.deptno
    ORDER BY empno; (emp테이블과 dept테이블의 겹치는 컬럼이 deptno이므로 두개가 같을 때만 출력한다)
  • SELECT E.empno,E.ename,E.deptno,D.dname,D.loc FROM emp E,dept D
    WHERE E.deptno = D.deptno
    ORDER BY D.deptno, E.empno; (컬럼이 양쪽에 들어있을경우 어느 테이블에서 컬럼을 가져올지 헷갈릴 수 있기 때문에 E.deptno 같이 컬럼의 테이블을 지정해주면 된다)
  • SELECT E.empno, E.ename, E.sal, D.deptno, D.dname, D.loc FROM emp E, dept D
    WHERE E.deptno = D.deptno AND sal >= 3000
    ORDER BY D.deptno, E.empno; (where절에 추가 조건 주기)
  • SELECT * FROM emp E, salgrade S
    WHERE E.sal BETWEEN S.losal AND S.hisal; (emp테이블에 있는 사원의 급여를 salgrade테이블에 있는 급여범위 에 따라 등급 부여)
  • SELECT E1.empno, E1.ename, E1.mgr, E2.empno as mgr_empno, E2.ename as mgr_ename from emp E1, emp E2
    WHERE E1.mgr = E2.empno; (직장상사의 이름을 연결짓기 위해 같은 테이블 끼리 조인 하는 셀프조인)
  • SELECT E1.empno, E1.ename, E1.mgr,
    E2.empno as mgr_empno, E2.ename as mgr_ename
    FROM emp E1, emp E2
    WHERE E1.mgr(+) = E2.empno
    ORDER BY E1.empno; (left join은 (+)가 오른쪽에 right join은 (+)가 왼쪽에 존재한다.)

표준 문법 join

  • SELECT E.empno, E.ename, E.job, E.hiredate, E.sal, E.comm,
    deptno, D.dname, D.loc FROM emp E NATURAL JOIN dept D
    ORDER BY deptno, E.empno; (NATURAL JOIN)
  • SELECT E.empno, E.ename, E.job, E.hiredate, E.sal, E.comm,
    deptno, D.dname, D.loc 
    FROM emp E JOIN dept D USING(deptno)
    ORDER BY deptno, E.empno; (JOIN ~USING 결과는 위와 동일)
  • SELECT E.empno, E.ename, E.job, E.hiredate, E.sal, E.comm,
    E.deptno, D.dname, D.loc 
    FROM emp E JOIN dept D ON(E.deptno = D.deptno)
    ORDER BY deptno, E.empno; (JOIN ~ ON)
  • SELECT E1.empno, E1.ename, E1.mgr,
    E2.empno as mgr_empno, E2.ename as mgr_ename
    FROM emp E1 LEFT OUTER JOIN emp E2 ON (E1.mgr = E2.empno)
    ORDER BY E1.empno; (LEFT OUTER JOIN)
  • SELECT E1.empno, E1.ename, E1.mgr,
    E2.empno as mgr_empno, E2.ename as mgr_ename
    FROM emp E1 RIGHT OUTER JOIN emp E2 ON (E1.mgr = E2.empno)
    ORDER BY E1.empno; (RIGHT OUTER JOIN)
  • SELECT E1.empno, E1.ename, E1.mgr,
    E2.empno as mgr_empno, E2.ename as mgr_ename
    FROM emp E1 FULL OUTER JOIN emp E2 ON (E1.mgr = E2.empno)
    ORDER BY E1.empno; (FULL JOIN 왼쪽 오른쪽 컬럼의 모든 NULL을 출력)

--(생략)
FROM T1, T2, T3
WHERE T1, T2, T3
WHERE T1.COL = T2.COL AND T2.COL = T3.COL

 

  • SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'JONES'); (JONES보다 높은 급여를 받는 사원의 정보를 출력)
  • SELECT * FROM emp WHERE hiredate < (SELECT HIREDATE
                                        FROM emp
                                        WHERE ename = 'BLAKE'); (BLAKE보다 빠르게 입사한 사원의 정보를 출력)
  • SELECT E.empno, E.ename, E.job, E.sal, D.deptno, D.dname, D.loc
    FROM emp E, dept D
    WHERE E.deptno = D.deptno 
    AND E.deptno = 20
    AND E.sal> (SELECT avg(sal) 
                FROM emp); (부서번호가 20번이면서 전체 급여 평균보다 높은 급여를 받는 사원 정보 출력)
  • SELECT * FROM emp WHERE sal IN (SELECT max(sal)
                                    FROM emp
                                    GROUP BY deptno); (각 부서별 최고 급여와 동일한 급여를 받는 사원의 정보 출력)
  • SELECT * FROM emp WHERE sal = ANY(SELECT max(sal)
                                      FROM emp
                                      GROUP BY deptno); (서브쿼리가 하나라도 참이면 참)
  • SELECT * FROM emp WHERE sal = SOME(SELECT max(sal)
                                      FROM emp
                                      GROUP BY deptno); (any와 결과값 동일)
  • SELECT * FROM emp WHERE sal < ANY(SELECT sal
                                    FROM emp
                                    WHERE deptno = 30)
    ORDER BY sal, empno; (부서 번호가 30인 사원들의 최소급여보다 더 적은 급여를 받는 직원 정보 출력 )
  • SELECT * FROM emp WHERE sal < ALL(SELECT sal
                                    FROM emp
                                    WHERE deptno = 30)
    ORDER BY sal, empno; (ALL- 모든 서브쿼리의 결과값보다 작은 급여를 받는 직원정보 출력)
  • SELECT * FROM emp
    WHERE EXISTS (SELECT dname
                FROM dept
                WHERE deptno = 10); ( 서브쿼리에 결과값이 존재하면 true , 그렇지 않으면 false)
  • SELECT * FROM emp
    WHERE (deptno,sal) IN (SELECT deptno, max(sal)
                            FROM emp
                            GROUP BY deptno); (비교할 컬럼이 여러개인 다중컬럼 서브쿼리)
  • SELECT E1.empno, E1.ename, E1.deptno, D.dname, D.loc
    FROM (SELECT * FROM emp WHERE deptno = 10) E1, 
        (SELECT * FROM dept) D
    WHERE E1.deptno = D.deptno; (inlineview 예시)
  • WITH
    E1 as (SELECT * FROM emp WHERE deptno = 10),
    D as (SELECT * FROM dept)
    SELECT E1.empno, E1.ename, E1.deptno, D.dname, D.loc
    FROm E1,D
    WHERE E1.deptno = D.deptno; (가독성 때문에 with문 사용 결과는 위와 동일)
  • SELECT empno , ename, job, sal, (SELECT grade 
                                    FROM salgrade
                                    WHERE E.sal between losal AND hisal) as salgrade,
                                    deptno,
                                    (SELECT dname 
                                    FROM dept
                                    WHERE E.deptno = dept.deptno) as dname
    FROM emp E; (select절에서 사용하는 서브쿼리)

'Oracle SQL Programming' 카테고리의 다른 글

오라클 명령어-(2)  (0) 2023.07.25
오라클 명령어-(1)  (0) 2023.07.24
  • SELECT ename, upper(ename), lower(ename),initcap(ename) FROM emp; (upper은 대문자로 바꿔주는 함수, lower는 소문자로 바꿔주는 함수, initcap은 첫글자는 대문자로 나머지는 소문자로 바꿔주는 함수)
  • SELECT * from emp WHERE upper(ename) LIKE upper('%smith%'); 사원이름에 smith 단어를 포함한 데이터를 출력
  • SELECT ename, length(ename) FROM emp; (문자열 길이를 출력하는 함수 length)
  • SELECT ename, length(ename) FROM emp WHERE length(ename)>=5; (사원이름의 길이가 5이상인 사원 출력)
  • SELECT length('한글'), lengthb('한글') FROM dual ; (lengthb함수는 문자열의 바이트 길이를 나타내는 함수, 영문은 1글자당 1바이트 한글은 1글자당 2바이트)
  • SELECT job, substr(job,1,2), substr(job,3,2),substr(job,5)  FROM emp; (시작위치 1번째에서 2글자, 시작위치 3번째에서 2글자, 시작위치 5번째에서 끝까지 가져오는 문자열 일부 추출

-length()함수는 오른쪽 끝에서부터 왼쪽으로 인덱스 부여

-기본 상태는 왼쪽부터 1,2,3,4,5 방식으로 인덱스 부여

  • SELECT job, substr(job,-length(job)) FROM emp; ( 처음 인덱스부터 끝까지 출력)
  • SELECT job, substr(job,length(job)) FROM emp;  (-length(job) 인덱스부터 끝까지 출력)
  • SELECT job, substr(job,-5,2) FROM emp; (-5인덱스부터 2글자 출력)
  • SELECT instr('HELLO, ORACLE!','L')AS INSTR_1,  ( L의 위치는 3번째)
        instr('HELLO, ORACLE!','L',5) AS INSTR_2, ( 5번째글자 이후에 나오는 L의 위치는 12번째)
        INSTR('HELLO, ORACLE!', 'L',2,2) AS INSTR_3, (2번째글자 이후에 나오는 L의 2번째 위치는 4)
        INSTR('HELLo, ORACLE!', 'L',2,3) AS INSTR_4  ( 2번째글자 이후에 나오는 L의 3번째 위치는 12)
        FROM dual;
  • SELECT * FROM emp WHERE instr(ename,'S')>0; (instr함수로 사원이름에 s가 있는 데이터 출력)
  • SELECT '010-1111-1111' AS re_before, 
    replace ('010-1111-1111', '-', ' ') as re_1, (치환 문자를 공백으로 지정)
    replace ('010-1111-1111', '-') as re_2 (치환 문자를 지정하지 않을 시 붙어서 나옴)
    from dual; 
  • SELECT 'ORACLE', LPAD('ORACLE',10,'#')as LPAD_1, -- 전체 10자리를 만들고 왼쪽의 빈공간을 '#'으로 채움
        RPAD('ORACLE',10,'*') as RPAD_1, -- 전체 10자리를 만들고 오른쪽의 빈공간을 '#'으로 채움
        LPAD('ORACLE',10) as LPAD_2, -- 전체 10자리를 만들고 왼쪽의 빈공간을 공백으로 채움
        RPAD('ORACLE',10) as RPAD_2 -- 전체 10자리를 만들고 오른쪽의 빈공간을 공백으로 채움
        FROM dual;
  • SELECT RPAD('970101-',14,'*') as RPAD_1,
        RPAD('010-1234-',13,'*') as RPAD_2
        FROM dual; 
    (실제 사용 예로 주민번호와 전화번호 가리기)
  • SELECT concat(empno, ename), 
        concat(empno, concat(' : ', ename))
        FROM emp WHERE ename = 'SMITH'; (문자열을 합치는 함수 concat)
  • SELECT empno || ename,
        empno || ' : ' || ename
        FROM  emp
        WHERE ename = 'SMITH'; (문자열을 연결하는 연산자 ||  결과는 concat과 동일)

삭제할 문자가 없을때

  • SELECT '[' || trim(' _ _Oracle_ _ ') || ']' as trim_trim, (양쪽의 공백 하나씩제거)
           '[' || trim(LEADING FROM ' _ _Oracle_ _ ') || ']' as trim_leading, (왼쪽의 공백 하나제거)
           '[' || trim(TRAILING FROM ' _ _Oracle_ _ ') || ']' as trim_trailing, (오른쪽의 공백 하나제거)
           '[' || trim(BOTH FROM ' _ _Oracle_ _ ') || ']' as trim_both (양쪽의 공백 하나씩제거)
        FROM dual;

삭제할 문자가 있을때

  • SELECT '[' || trim(' _  _Oracle_  _ ') || ']' as trim_trim, (양쪽의 '-'문자 하나씩 제거)
           '[' || trim(LEADING '_' FROM ' _  _Oracle_  _ ') || ']' as trim_leading, (왼쪽의 '-'문자 하나제거)
           '[' || trim(TRAILING '_' FROM ' _  _Oracle_  _ ') || ']' as trim_trailing, (오른쪽의 '-'문자 하나제거)
           '[' || trim(BOTH '_' FROM ' _  _Oracle_  _ ') || ']' as trim_both (양쪽의 '_'문자 하나씩 제거)
        FROM dual;

 

  • SELECT '[' || trim('  --Oracle--  ') || ']' as trim_trim,
           '[' || ltrim('  --Oracle--  ') || ']' as trim_l,
           '[' || ltrim('<--Oracle-->', '-<') || ']' as trim_l2, 
    --(-, <)를 조합해서 모든 경우를 삭제해준다.
           '[' || rtrim('  --Oracle--  ') || ']' as trim_r,
           '[' || rtrim('<--Oracle-->', '>-') || ']' as trim_r2 
    -- (>, -)를 조합해서 모든 경우를 삭제해준다.
           FROM dual;
  • SELECT round(1234.5678) as r_1, 범위지정을 안할땐 반올림해서 일의자리까지 나타냄(소수점 첫번째 자리에서 반올림)
    round(1234.5678,0) as r_2,
    범위지정이 0 일땐 반올림해서 일의자리까지 나타냄(소수점 첫번째자리에서 반올림)
    round(1234.5678,1)as r_3,
    -- 반올림해서 소수점 첫째 자리까지
    round(1234.5678,2) as r_4,
    -- 반올림해서 소수점 둘째 자리까지
    round(1234.5678,-1) as r_5, --  -기호는 정수부분을 의미( 반올림해서 일의자리까지)
    round(1234.5678,-2) as r_6 --   
    반올림 해서 10의 자리까지
    FROM dual;
  • SELECT trunc(1234.5678) as r_1,
    trunc(1234.5678,0) as r_2,
    trunc(1234.5678,1)as r_3, 
    -- 소수점 둘째자리에서 버리고 첫째자리까지 표현
    trunc(1234.5678,2) as r_4, 
    -- 소수점 셋째자리에서 버리고 둘째자리까지 표현
    trunc(1234.5678,-1) as r_5, --  -기호는 정수부분을 의미( 1의자리에서 버림)
    trunc(1234.5678,-2) as r_6 -- 
    10의자리에서 버림
    FROM dual;
  • SELECT ceil(3.14), 
        floor(3.14),
        ceil(-3.14),
        floor(-3.14)
        FROM dual;
  • SELECT mod(15,6),
        mod(10,2)
        FROM dual;
    (나머지 계산함수)
  • SELECT sysdate as now, sysdate - 1 as yesterday, sysdate + 1 as tomorrow FROM dual; (시스템 날짜 출력)
  • SELECT sysdate, add_months(sysdate,3) from dual; (몇 개월 이후 출력)
  • SELECT empno,ename, hiredate, sysdate FROM emp
    WHERE add_months(hiredate,500) > sysdate; (실제 사용 예시)
  • SELECT empno,ename, hiredate,sysdate,months_between(hiredate,sysdate) as m1,
    months_between(sysdate,hiredate) as m2, 
    trunc(months_between(sysdate,hiredate)) as m3 (소수점은 버림)
    FROM emp; (두날짜간의 개월 수 차이)
  • SELECT sysdate, next_day(sysdate, '월요일'), last_day(sysdate) FROM dual; (돌아오는 월요일은 next_day함수, 이번달의 마지막 날짜는 last_day함수)
  • SELECT sysdate,
    round(sysdate, 'CC') as f_cc, -- 2050년을 기준으로 년도 이하이면 2001년으로 처리
    round(sysdate, 'YYYY') as f_yyyy, -- 모든년도를 7월1일을 기준으로 7월1일 이상이면 1년을 더해줌
    round(sysdate, 'Q') as f_q, -- 각 분기의 두번째 달의 16일 기준 
    round(sysdate, 'DDD') as f_ddd, -- 해당일의 정오를 기준
    round(sysdate, 'HH') as f_hh -- 해당일의 시간을 기준으로 반올림
    FROM dual;
  • SELECT sysdate,
    trunc(sysdate, 'CC') as f_cc,
    trunc(sysdate, 'YYYY') as f_yyyy, 
    trunc(sysdate, 'Q') as f_q,
    trunc(sysdate, 'DDD') as f_ddd, 
    trunc(sysdate, 'HH') as f_hh 
    FROM dual;
  • SELECT to_char(sysdate, 'YYYY/MM/DD HH24:MI:SS') FROM dual;
    SELECT to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
  • SELECT 1300 - '1500', '1300'+'1500' FROM dual; -- 묵시적형변환(자동으로 형변환)
  • SELECT '1,300'-'1,500' FROM dual; --  이 경우는 작동 x
  • SELECT to_number('1,300', '999,999') - to_number('1,500','999,999') FROM dual;  (999,999로 천단위로 숫자를 구분한다는 포맷을 지정해줘야 계산이 가능하다)
  • SELECT to_date('2023-07-25','YYYY-MM-DD')as date_1,
           to_date('20230725', 'YYYY-MM-DD')as date_2,
           to_date('2023/07/25','YYYY-MM-DD')as date_3,
           to_date('2023-07-25','YY-MM-DD')as date_4
           FROM dual; (문자를 날짜로 바꾸는 함수)
  • SELECT empno, ename, sal, comm, sal+comm, nvl(comm,0), sal+ nvl(comm,0) FROM emp; (comm의 null값을 0으로 대체해서 계산)
  • SELECT empno, ename, sal, comm,nvl2(comm,'o','x'), nvl2(comm,sal*12 + comm,sal*12) as annsal FROM emp; 

'Oracle SQL Programming' 카테고리의 다른 글

오라클 명령어-(3)  (0) 2023.07.26
오라클 명령어-(1)  (0) 2023.07.24
  • 명령프롬프트 sql 접속  -> sqlplus system/system (sql프로그램에 아이디 system 비밀번호 system으로 접속)
  • create user scott identified by TIGER; (사용자 scott 생성, 비밀번호는 TIGER,항상 문장끝에는 새미콜론)
  • grant resource ,connect to scott;(scott 계정에 권한 부여)
  • alter user scott account unlock;( user에 있는 제한을 해제)
  • @C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql (scott.sql에 접속)
  • exit (sql 종료)
  • sqlplus scott/TIGER (sql 프로그램에 아이디 scott 비밀번호 TIGER로 접속)
  • select * from emp;

ㄴ---------------- 명령프롬프트( cmd창에서 실행) ---------------------------------------------------------------------------------------

  • select * from emp;  명령 입력 후 문장끝에서 ctrl + enter키 입력 (emp에 들어있는 데이터조회 실행) --> emp테이블에 있는 데이터를 조회한다는 뜻
  • select 컬럼명 FROM 테이블명; (테이블에 있는 컬럼을 가져온다 컬럼명이 *면 모든 컬럼)
  • desc emp; (emp 테이블의 컬럼과 제약조건, 자료형을 출력)
  • -- (한줄 주석)
  • /*  */ (여러 줄 주석)
  • SELECT DISTINCT deptno FROM emp;(열이 한개인 경우(deptno) - 중복된 데이터를 제거)
  • SELECT DISTINCT job, deptno FROM emp;(열이 여러개인 경우(job,deptno) - 중복된 데이터를 제거)
  • SELECT ALL deptno FROM emp; (중복되는 열 제거 없이 그대로 출력)
  • SELECT ALL job, deptno FROM emp; (결과적으로는 SELECT job, deptno FROM emp와 다를바 없음)
  • SELECT ename, sal, sal*12+comm FROM emp;(실제로 sal*12+comm 열은 존재하지 않지만 산술 연산식으로 계산해서 출력 가능)
  • SELECT ename, sal, sal*12+comm AS commsal FROM emp;( sal * 12 + comm을 commsal로 명칭을 바꿔 열을 생성)
  • SELECT * FROM emp ORDER BY SAL; (SAL열을 기준으로 오름차순으로 정렬)
  • SELECT * FROM emp ORDER BY SAL DESC; (SAL열을 기준으로 내림차순으로 정렬)
  • SELECT * FROM emp ORDER BY deptno ASC, sal DESC; (deptno열에 대해 오름차순으로 정렬한 뒤 sal열에 대해 내림차순으로 정렬)
  • SELECT * FROM emp WHERE deptno = 30;(조건절은 where을 사용, from뒤에 쓴다. deptno가 30인 목록을 출력 등호는 하나만 사용)
  • 기본 구조 : select (컬럼명) from (테이블) where(조건식) order by ( ) ;
  • SELECT * FROM emp WHERE deptno = 30 AND job = 'SALESMAN'; (조건이 여러개인 경우, 문자열은 ' ' 를 사용해서 표현)
  • SELECT * FROM emp WHERE EMPNO = 7499 AND DEPTNO = 30;(사원번호가 7499이고 부서번호가 30인 데이터 출력)
  • SELECT * FROM emp WHERE DEPTNO = 30 OR JOB = 'CLERK';   (부서번호가 30이거나, 직업이 'CLERK'인 사원 정보 출력)
  • SELECT * FROM emp WHERE DEPTNO = 30 OR JOB = 'CLERK' order by DEPTNO ASC;( 부서번호가 30이거나 직업이 clerk인 사원 정보를 부서별로 오름차순으로 정렬)
  • SELECT * FROM emp WHERE DEPTNO = 30 OR JOB = 'CLERK' order by DEPTNO DESC; (부서번호가 30이거나 직업이 clerk인 사원 정보를 부서별로 내림차순으로 정렬)
  • SELECT * FROM emp WHERE sal*12 = 36000; (sal*12 = 36000인 데이터를 출력)
  • SELECT * FROM emp WHERE sal>=3000; (sal이 3000이상인 데이터 출력)
  • SELECT * FROM emp WHERE sal >=2500 AND JOB = 'ANALYST'; (sal이 2500이상이고 직업이 ANALYST인 데이터 출력)
  • SELECT * FROM emp WHERE ename >= 'F' (첫문자가 F이거나 그 뒤 인경우)
  • SELECT * FROM emp WHERE ename <= 'FORZ';  (FORZ를 포함한 문자열보다 사전순으로 앞에 있는 데이터를 출력)
  • SELECT * FROM emp WHERE sal != 3000; (등가비교 연산자 3개 다 같은 내용)
    SELECT * FROM emp WHERE sal <>= 3000;
    SELECT * FROM emp WHERE sal ^= 3000;
  • SELECT * FROM emp WHERE NOT sal = 3000; (논리부정 연산자 !=와 결과가 같음. 다만 NOT연산자와 IN,BETWEEN, IS NULL 연산자와 복합적으로 사용)
  • SELECT * FROM emp WHERE job IN('MANAGER','SALESMAN','CLERK'); (IN연산자를 이용한 여러 or연산 계산)
  • SELECT *FROM emp WHERE job NOT IN('MANAGER','SALESMAN','CLERK'); (NOT과 IN연산자를 활용한 여러 AND연산 계산)
  • SELECT * FROM emp WHERE sal BETWEEN 2000 AND 3000; (BETWEEN 최소값 AND 최대값 연산을 활용해 결과출력)
  • SELECT * FROM emp WHERE sal NOT BETWEEN 2000 AND 3000; (급여가 2000~3000 사이 이외의 값을 가진 데이터 출력)
  • SELECT * FROM emp WHERE ename LIKE 'S%'; (사원이름이 대문자 S로 시작하는 데이터 출력)
  • SELECT * FROM emp WHERE ename LIKE '%S',(사원이름의 마지막이 S로 끝나는 데이터 출력)
  • SELECT * FROM emp WHERE ename LIKE '_L%'; (사원이름의 두번째 글자가 L인 사원 출력)
  • SELECT * FROM emp WHERE ename LIKE '%LA%'; (사원 이름에 'LA'가 포함된 데이터를 출력)
  • SELECT * FROM SOME_TABLE WHERE SOME_COLUMN LIKE 'A\_A%' ESCAPE '\'; (검색하려는 데이터가 'A_A'인경우, \를 사용하고 escape로 탈출해준다.)
  • SELECT * FROM emp WHERE comm IS NULL; (comm이 NULL인 데이터를 출력)
  • SELECT * FROM emp WHERE comm IS NOT NULL; (comm이 NULL이 아닌 데이터만 출력)
  • SELECT * FROM emp WHERE sal > NULL OR COMM IS NULL;( sal의 데이터가 있거나 comm이 null인 데이터 출력) 
  • SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10
    UNION 
    SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 20; ( 두 데이터의 결과값을 합집합으로 묶음, 결과값 중복제거)
  • SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10
    UNION
    SELECT sal, job, deptno, sal FROM emp WHERE deptno = 20; (컬럼의 이름이 다르고, 컬럼의 갯수와 자료형이 같을 경우 출력은 되지만 첫번째 select 기준으로 출력된다, 단 데이터가 꼬일 가능성이 높다.)
  • SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10
    UNION ALL
    SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10; ( 출력결과가 같은경우, 중복데이터 존재 UNION ALL 사용)
  • SELECT empno, ename, sal, deptno FROM emp
    MINUS
    SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10; (차집합)
  • SELECT empno, ename, sal, deptno FROM emp
    INTERSECT
    SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10;(교집합)

 

'Oracle SQL Programming' 카테고리의 다른 글

오라클 명령어-(3)  (0) 2023.07.26
오라클 명령어-(2)  (0) 2023.07.25

+ Recent posts