본문 바로가기

Database/Oracle

기본 Query(쿼리) 함수

-- SQLPLUS 실행 CMD>sqlplus 사용자명/"암호" -- 테이블 목록 확인 SQL>SELECT * FROM TAB; -- 테이블 구조 확인 SQL>DESC[RIBE] insa; //**************************************** -- iSQL*Plus 실행(일반 사용자) http://컴퓨터명:5560/isqlplus/ -- em 실행(관리자 영역) http://컴퓨터명:1158/em -- tnsnames.ora 에 정의된 connect_identifier 으로 접속 CMD>sqlplus 사용자명/"암호"@orcl -- orcl : tnsnames.ora 에 정의된 connect_identifier //**************************************** -- SQL 에서 CMD 창으로 잠시 빠져 나가야 하는 경우 SQL>HOST CMD>EXIT -- SQL 로 복귀 //**************************************** -- sqlplus 에서 *.sql 파일 실행 -- 파일이 존재하는 경로에서 sqlplus를 실행하고, -- "@파일명" 명령을 실행하면 된다. SQL>@ex.sql -- 경로를 지정하여 실행 SQL>@d:\sql\ex.sql -- sqlplus 에서 sql 작업 내용 자동 저장하기 SQL>spool d:\sql\test.txt SQL>SELECT * FROM insa; -- d:\sql\test.txt 파일 생성 SQL>spool off -- 스풀 정지 //**************************************** 오라클 명령은 대소문자를 구분하지 않는다. 하지만 리터널(상수)는 대소문자를 구분한다. //**************************************** -- 산술연산자 + : 덧셈 - : 뺄셈 * : 곱셈 / : 나눗셈 ( ) : 괄호 -- 비교연산자 = : 같다. > : 크다. >= : 크거나 같다. < : 적다. <= : 작거나 같다. <> : 같지 않다. != : 같지 않다. -- 논리 연산자 AND : 논리 곱 OR : 논리 합 NOT : 부정 -- SQL 연산자 IN(값, 값, ...) : 피연산자가 식 목록 중 하나와 동일한 경우 TRUE BETWEEN ~ AND: 피연산자가 범위 안에 있는 경우 TRUE LIKE : 피연산자가 패턴과 일치하는 경우 TRUE -- 문자열 연결 연산자 || : 문자열 연결 //**************************************** -- 자료 검색 -- 형식 : SELECT 필드명, 필드명 ..... FROM 테이블 -- 기술 순서 FROM절 -> WHERE절 -> GROUP BY 절 -> SELECT 절 -> ORDER BY 절 -- 전체 자료 출력 SQL>SELECT * FROM 테이블명; SELECT * FROM insa; -- 특정 컬럼 출력 SELECT 컬럼명, 컬럼명 FROM 테이블명; -- 이름, 전화전호, 부서 SELECT name, tel, buseo FROM insa; -- 이름, 출신도, 직위 DESC insa; SELECT name, city, jikwi FROM insa; -- 필드명 변경(AS는 생략 가능. 별명 중간에 공백들이 들어가는 경우 "" 안에 기술) SELECT 컬럼명 AS 별명 FROM 테이블명; SELECT name AS 이름, city 출신도, jikwi 직위 FROM insa; SELECT name "이 름", city 출신도, jikwi 직위 FROM insa; -- 주의 : 컬럼명을변경해서 출력하면 프로그램에서는 변경된 컬럼명만 인식함 //**************************************** -- 조건 검색 SELECT 컬럼명, 컬럼명 FROM 테이블명 WHERE 조건; -- 서울사람중에서 이름, 출신도, 기본급 SELECT name, city, basicpay FROM insa WHERE city='서울'; -- 기본급+수당이 200만원 이상인 이름, 기본급, 수당, 급여(기본급+수당) SELECT name, basicpay, sudang, (basicpay+sudang) pay FROM insa WHERE (basicpay+sudang)>=2000000 -- pay는 (basicpay+sudang)의 별명 -- insa 테이블에 pay 컬럼이 없으므로 오류(SELECT 보다 WHERE를 먼저 번역) SELECT name, basicpay, sudang, (basicpay+sudang) pay FROM insa WHERE pay>=2000000 -- SELECT가 ORDER BY보다 먼저 번역되므로 SELECT name, basicpay, sudang, (basicpay+sudang) pay FROM insa WHERE (basicpay+sudang)>=2000000 ORDER BY pay DESC -- city가 서울사람중에서 buseo가 개발부인 name, city, buseo, basicpay 컬럼출력 SELECT name, city, buseo, basicpay FROM insa WHERE city='서울' AND buseo='개발부'; -- city가 서울, 경기 사람중에서 buseo가 개발부인 name, city, buseo, basicpay 컬럼출력 SELECT name, city, buseo, basicpay FROM insa WHERE (city='서울' OR city='경기') AND buseo='개발부'; //**************************************** -- 테이블 구조 확인 DESC INSA; SELECT * FROM col WHERE tname='테이블명'; SELECT * FROM cols //**************************************** -- DUAL -- DUAL 테이블은 데이터 딕셔너리와 함께 Oracle에 의해 자동으로 생성되는 테이블로 사용자 SYS의 스키마에 존재하며, 모든 사용자가 사용 가능하다. //**************************************** -- 스칼라 함수 //**************************************** -- 문자함수 --------------------------------------------------------- -- SUBSTR (char, m [,n]) : 문자열 추출 인덱스(m)는 1부터, n:개수 SELECT SUBSTR('우리나라대한민국', 5,2) FROM DUAL; SELECT SUBSTR('우리나라대한민국', 5) FROM DUAL; SELECT SUBSTR('우리나라대한민국', -2,1) FROM DUAL; -- insa 테이블의 name, ssn, city 출력 단, 서울사람이면서 남자만(ssn의 성별부분이 1, 3인) SELECT name, ssn, city FROM insa WHERE city='서울' AND (SUBSTR(ssn, 8,1)='1' OR SUBSTR(ssn, 8,1)='3') -- insa 테이블의 name, ssn, city 출력 단, 78~82년생만(ssn이용) SELECT name, ssn, city FROM insa WHERE SUBSTR(ssn, 1,2)>='78' AND SUBSTR(ssn, 1,2)<='82' -- insa 테이블의 name, ssn, city 출력 단, 이름이 김씨이면서 city가 서울사람만 SELECT name, ssn, city FROM insa WHERE SUBSTR(name, 1, 1)='김' AND city='서울'; --------------------------------------------------------- -- LENGTH (column | expression) : 문자열 길이 LENGTHB (column | expression) : 문자열 바이트수 SELECT LENGTH('대한민국'), LENGTHB('대한민국') FROM DUAL; --------------------------------------------------------- -- INSTR (column | expression, 'string' [,m] [,n]) 문자의 위치를 반환한다. m값은 시작위치고, n값은 발생 횟수이며 m과 n의 기본 값은 1이다. SELECT INSTR('korea', 'e') FROM DUAL; SELECT INSTR('korea', 'c') FROM DUAL; SELECT INSTR('02-1111-1111', '-') FROM DUAL; SELECT INSTR('010-1111-1111', '-') FROM DUAL; SELECT INSTR(tel, '-') FROM insa; SELECT SUBSTR(tel, 1, INSTR(tel, '-')-1) FROM insa; --------------------------------------------------------- -- LPAD (column | expression, n, ['string']), RPAD (column | expression, n, ['string']) expression의 문자열을 제외한 공간에 문자열을 왼쪽(오른쪽)에 채운다. SELECT LPAD('korea', 20, '*'), RPAD('korea', 20, '*'), LPAD('*', 0, '*') FROM DUAL; -- insa 테이블의 name, basicpay, 그래프 출력 단, 그래프는 basicpay 10만원당 하나의 *로 출력 SELECT name, basicpay, LPAD('*', basicpay/100000, '*') 그래프 FROM insa; --------------------------------------------------------- -- REPLACE (text, search_string [, replacement_string]) : 문자열 치환 SELECT 'seoul korea', REPLACE('seoul korea', 'seoul', '서울'), REPLACE('seoul korea', 'seoul') FROM DUAL; SELECT REPLACE('12354581584', '5') FROM DUAL; -- insa 테이블의 name, buseo 출력 단, 부서의 마지막 부를 팀으로 변경 출력(영업부->영업팀) SELECT name, REPLACE(buseo, '부', '팀') buseo FROM insa; -- 문제있음. SELECT name, SUBSTR(buseo, 1, 2) || '팀' buseo FROM insa; -- 문제있음(부서명이 네자이상인경우) SELECT name, SUBSTR(buseo, 1, LENGTH(buseo)-1) || '팀' buseo FROM insa; --------------------------------------------------------- -- RTRIM(char [,set]), LTRIM(char [,set]) TRIM (leading | trailing | both trim_character FROM trim_source) 공백을 제고하거나 오른쪽(왼쪽)의 문자열 제거 SELECT '#' || ' 우 리 ' || '#', '#' || RTRIM(' 우 리 ') ||'#', '#' || LTRIM(' 우 리 ') ||'#', '#' || TRIM(' 우 리 ') ||'#', '#' || REPLACE(' 우 리 ', ' ') ||'#', RTRIM('1232', '2'), RTRIM('12322', '2') FROM DUAL; --------------------------------------------------------- -- UPPER(char) : 영문자 문자열을 모두 대문자로 변환 -- LOWER(char) : 영문자 문자열을 모두 소문자로 변환 -- ASCII(char) : 주어진 char의 첫 글자의 아스키 값을 반환 -- CHR(n) : 입력된 수의 바이너리 코드에 해당하는 문자를 반환 -- INITCAP(char) : 입력 문자열 중에서 각 단어의 첫 문자를 대문자로 나머지 문자는 소문자로 변환 //**************************************** -- 숫자함수 --------------------------------------------------------- -- MOD(m, n) : m을 n으로 나눈 나머지 SELECT MOD(14, 4) FROM DUAL; SELECT name, ssn FROM insa WHERE MOD(SUBSTR(ssn, 8, 1), 2)=1; -- 남자만 출력(오라클은 자동 형변환이 됨) --------------------------------------------------------- -- ROUND(n [,m]) : 반올림 SELECT ROUND(15.193) FROM DUAL; -- 15 SELECT ROUND(15.193, 1) FROM DUAL; -- 15.2 SELECT ROUND(15.193, 0) FROM DUAL; -- 15 SELECT ROUND(15.193, -1) FROM DUAL; -- 20 --------------------------------------------------------- -- TRUNC(n [,m]) : 절삭 SELECT TRUNC(15.193, 1) FROM DUAL; -- 15.1 SELECT TRUNC(15.193, -1) FROM DUAL; -- 10 -- insa 테이블의 name, basicpay 및 basicpay를 현금으로 지불할 경우 50000원권 및 10000원권 개수 및 나머지 금액을 출력 SELECT name, basicpay, TRUNC(basicpay/50000) "50000원권", TRUNC(mod(basicpay, 50000)/10000) "10000원권", mod(basicpay, 10000) "나머지금액" FROM insa; -- insa 테이블의 name, basicpay, sudang, (basicpay+sudang), 세금, 실수령액을 출력. 단. 세금은 (basicpay+sudang)의 2%이며 실수령액은 (basicpay+sudang)-세금 이다. 그리고 모든 금액은 1의자리에서 반올림하기. SELECT name, basicpay, sudang, basicpay+sudang pay, ROUND((basicpay+sudang)*0.02, -1) 세금, ROUND((basicpay+sudang)-(basicpay+sudang)*0.02,-1) 실수령액 FROM insa; //**************************************** -- 암시적 형 변환 값을 할당할 때 오라클 서버는 다음과 같이 자동으로 값을 변환할 수 있다. VARCHAR2, CHAR → NUMBER VARCHAR2, CHAR → DATE NUMBER → VARCHAR2 DATE → VARCHAR2 SELECT '123'+45 FROM DUAL; SELECT '123A'+45 FROM DUAL; -- 에러 SELECT '123' || 45 FROM DUAL; //**************************************** -- 변환함수 --------------------------------------------------------- -- TO_CHAR(label [, fmt]) : MLSLABEL datatype을 VARCHAR2 타입으로 변환 TO_CHAR(n [, fmt [, 'nlsparams'] ]) : 숫자를 문자로 변환(VARCHAR2 타입) TO_CHAR(d [, fmt [, 'nlsparams'] ]) : 날짜를 문자로 변환(VARCHAR2 타입) SELECT SYSDATE FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY"년" MM"월" DD"일"') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'DD MONTH') FROM DUAL; SELECT name, TO_CHAR(basicpay, '9,999') FROM insa; -- 숫자 자리수가 부족하면 #으로 표시 SELECT name, TO_CHAR(basicpay, '999,999,999') FROM insa; SELECT name, TO_CHAR(basicpay, 'L999,999,999') FROM insa; SELECT TO_CHAR(100, '99999V9999') FROM DUAL; SELECT TO_CHAR(-100, '99999MI') FROM DUAL; SELECT TO_CHAR(100, '99999MI') FROM DUAL; SELECT TO_CHAR(-100, '99999PR') FROM DUAL; SELECT TO_CHAR(100, '99999PR') FROM DUAL; SELECT TO_CHAR(100, '0,999,999') FROM DUAL; SELECT name, ibsadate FROM insa WHERE TO_CHAR(ibsadate, 'YYYY') = 2000; --------------------------------------------------------- -- 통화기호, 날짜 등 출력 형식 변경 SELECT parameter, value FROM NLS_SESSION_PARAMETERS; -- 확인 ALTER SESSION SET NLS_LANGUAGE = 'KOREAN'; ALTER SESSION SET NLS_CURRENCY = '\'; ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN'; -- 날짜형식 변경(기본:RR/MM/DD) ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'; -- RR : 1900년대의 년도를 기준으로 하여 이전 50년도에서 이후 49년까지는 기준년도와 가까운 1850년도에서 1949년도까지의 값으로 표현하고, 이 범위를 벗아 날 경우 다시 2000년을 기준으로 이전 50년도에서 이후 49년까지의 값을 출력한다. 하지만 YY는 무조건 system 상의 년도를 따른다. --------------------------------------------------------- -- TO_NUMBER(char [,fmt [, 'nlsparams'] ]) : 문자를 숫자로 변환 SELECT '23'+12, TO_NUMBER('23')+12 FROM DUAL; SELECT '23,123'+12 FROM DUAL; -- 에러 SELECT TO_NUMBER('23,123','99,999')+12 FROM DUAL; --------------------------------------------------------- -- TO_DATE(char [, fmt [, 'nlsparams'] ]) : 문자를 날짜로 변환 SELECT TO_DATE('1986-10-10', 'YYYY-MM-DD') FROM DUAL; SELECT TO_DATE('86/10/10', 'YY/MM/DD') FROM DUAL; -- 년도가 2086년. YY는 현재날짜기준 SELECT TO_CHAR(TO_DATE('86/10/10', 'YY/MM/DD'), 'YYYY-MM-DD') FROM DUAL; SELECT TO_CHAR(TO_DATE('86/10/10', 'RR/MM/DD'), 'YYYY-MM-DD') FROM DUAL; SELECT name, ssn, TO_DATE(SUBSTR(ssn,1,6), 'RRMMDD') 생년월일 FROM insa; SELECT name, ssn, TO_CHAR(TO_DATE(SUBSTR(ssn,1,6), 'RRMMDD'), 'YYYY-MM-DD') 생년월일 FROM insa; SELECT TRUNC(SYSDATE - TO_DATE('2000-02-05', 'YYYY-MM-DD')) 날수 FROM DUAL; -- 김지수가 2014년 5월 7일 여자친구를 만났다. 100일은 언제인가 ??? SELECT TO_DATE('2014-05-07', 'YYYY-MM-DD')+100 FROM DUAL; -- 2014년 12월 25일까지는 몇일남았을까요 ?? SELECT TRUNC(TO_DATE('2014-12-25', 'YYYY-MM-DD')-SYSDATE) dday FROM DUAL; --------------------------------------------------------- -- ASCIISTR(string) : string의 아스키 문자로 반환. non-ASCII 문자는 UTF-16 code로 반환. //**************************************** -- 날짜함수 --------------------------------------------------------- -- SYSDATE : 시스템에 저장된 현재 날짜를 반환 --------------------------------------------------------- -- CURRENT_DATE : 현재 session의 날짜 정보를 반환 --------------------------------------------------------- -- ADD_MONTHS(d, n) : 해당 날짜에 n만큼의 달수를 더한다. -- 10달후는 ??? SELECT ADD_MONTHS(SYSDATE, 10) FROM DUAL; --------------------------------------------------------- -- LAST_DAY(d) : 정의된 날짜의 달에서 마지막일이 몇일인지 돌려준다. -- 이번달은 몇일까지 ??? SELECT LAST_DAY(SYSDATE) FROM DUAL; --------------------------------------------------------- -- MONTHS_BETWEEN(d1, d2) : 정의된 두 날짜사이의 차이(d1 - d2)를 월로 돌려준다. SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('2000-02-05', 'YYYY-MM-DD'))) 달수 FROM DUAL; SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('2000-02-05', 'YYYY-MM-DD'))/12) 나이 FROM DUAL; -- insa 테이블 name, ssn, basicpay, ibsadate, 생년월일, 나이, 근무년수 출력 생년월일과 나이는 ssn을 이용. 소수점아하 절석 근무년수는 ibsadate 이용. 소수점아하 절석 급여는 통화기호및세자리마다컴마표시 SELECT name, ssn, TO_CHAR(basicpay, 'L99,999,999') 기본급, TO_DATE(SUBSTR(ssn,1,6),'RRMMDD') 생년월일, TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(SUBSTR(ssn,1,6),'RRMMDD'))/12) 나이, TRUNC(MONTHS_BETWEEN(SYSDATE,ibsadate)/12) 근속년수 FROM insa; --------------------------------------------------------- -- ROUND(d [,fmt]) : 정해진 날짜를 fmt를 기준으로 반올림 -- 년도을 반올림(7월 1일부터는 반올림) SELECT ROUND(TO_DATE('07-07-10', 'RR-MM-DD'), 'YEAR') FROM DUAL; SELECT ROUND(TO_DATE('07-06-10', 'RR-MM-DD'), 'YEAR') FROM DUAL; --------------------------------------------------------- -- TRUNC(d,[fmt]) : 정해진 날짜를 fmt를 기준으로 반 내림 SELECT TRUNC(TO_DATE('07-07-10', 'RR-MM-DD'), 'YEAR') FROM DUAL; --------------------------------------------------------- -- NEXT_DAY(d, char) 명시된 요일(char)이 돌아오는 날짜를 계산한다. 요일은 숫자로 표현 가능(SUNDAY : 1, MONDAY : 2, ...) -- 오늘을 기준으로 가장 가까운 수요일은 ?? SELECT NEXT_DAY(SYSDATE, 4) FROM DUAL; SELECT NEXT_DAY(SYSDATE, '수요일') FROM DUAL; -- 이번주 일요일, 토요일 알아내기 SELECT SYSDATE, CASE WHEN TO_CHAR(SYSDATE, 'DAY')='일요일' THEN SYSDATE ELSE NEXT_DAY(SYSDATE, 1) - 7 END AS "주시작" , CASE WHEN TO_CHAR(SYSDATE, 'DAY')='토요일' THEN SYSDATE ELSE NEXT_DAY(SYSDATE, '토요일') END AS "주마지막" FROM DUAL; SELECT TO_DATE('20141030','YYYYMMDD'), CASE WHEN TO_CHAR(TO_DATE('20141030','YYYYMMDD'), 'DAY')='일요일' THEN TO_DATE('20141030','YYYYMMDD') ELSE NEXT_DAY(TO_DATE('20141030','YYYYMMDD'), 1) - 7 END AS "주시작" , CASE WHEN TO_CHAR(TO_DATE('20141030','YYYYMMDD'), 'DAY')='토요일' THEN TO_DATE('20141030','YYYYMMDD') ELSE NEXT_DAY(TO_DATE('20141030','YYYYMMDD'), '토요일') END AS "주마지막" FROM DUAL; --------------------------------------------------------- -- EXTRACT ({year|month|day|hour|minute|second| timezone_hour|timezone_minute| timezone_region|timezone_abbr} FROM {datetime_value_expr|interval_value_rxpr}) 특정 날짜/시간 값이나 날짜 값을 가진 표현식으로 부터 원하는 날짜 영역을 추출하여 출력한다. SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; --------------------------------------------------------- -- 날짜에 산술 연산을 사용하는 경우 날짜 + 숫자 → 날짜 : 날짜에 일수를 더하여 날짜 계산 날짜 - 숫자 → 날짜 : 날짜에 일수를 감하여 날짜 계산 날짜 + 숫자/24 → 날짜 : 날짜에 시간을 더하여 날짜 계산 날짜 - 날짜 → 일수 : 날짜에 날짜를 감하여 일수 계산 //**************************************** -- NULL : 값이 존재하지 않은 상태(오라클에서는 ''를 추가하면 NULL로 처리) IS NULL : NULL 이면 참 IS NOT NULL : NULL 이 아니면 참 SELECT name, tel FROM insa; SELECT name, tel FROM insa WHERE tel=null; (x) SELECT name, tel FROM insa WHERE tel IS NULL; SELECT name, tel FROM insa WHERE tel IS NOT NULL; --------------------------------------------------------- -- NULL 관련 함수 NVL(expr1, expr2) : expr1이 Null 이면 expr2 반환하고 Null이 아니면 expr1 반환 NVL2(expr1, expr2, expr3) : expr1이 null이 아니면 expr2를 반환하고, null이면 expr3를 반환 NULLIF(expr1, expr2) : 두 표현식을 비교해서 같으면 null 반환하고, 같지 않으면 expr1을 반환 COALESCE(expr1, expr2, ……, exprn) : 표현식 목록에서 첫 번째로 null이 아닌 것을 반환한다. 즉, expr1이 널이 아니면 expr1을 반환하며, expr1이 널이고 expr2가 널이 아니면 expr2를 반환한다. LNNVL(조건) : 조건이 거짓이거나 값이 존재하지 않으면 TRUE를 리턴하며, 조건이 거짓이면 FALSE를 리턴 한다. SELECT 리스트에서는 사용할 수 없으며 WHERE 절에서만 사용 가능 하다. -- 전화가 없는경우 전화없음으로 표시 SELECT name, tel FROM insa; SELECT name, NVL(tel, '전화없음') tel FROM insa; SELECT name, NVL2(tel, tel, '전화없음') tel FROM insa; //**************************************** -- ORDER BY : 정렬 -- ASC(생략가능) : 오름차순, DESC : 내림차순 SELECT 컬럼명, 컬럼명 FROM 테이블명 ORDER BY 컬럼명 [ASC | DESC][, 컬럼명 [ASC | DESC]] ; SELECT name, baiscpay FROM INSA; SELECT name, baiscpay FROM INSA ORDER BY basicpay; -- 오름차순 SELECT name, baiscpay FROM INSA ORDER BY basicpay DESC; -- 내림차순 SELECT name, buseo, basicpay FROM insa ORDER BY buseo; -- 부서 오름차순 SELECT name, buseo, basicpay FROM insa ORDER BY buseo, basicpay; -- 부서오름차순정렬하고 부서가 같으면 basicpay 오름차순 SELECT name, buseo, basicpay FROM insa ORDER BY buseo, basicpay DESC; SELECT name, buseo, basicpay FROM insa ORDER BY buseo DESC, basicpay DESC; -- insa테이블의 name, ssn, basicpay, sudang, basicpay+sudang를 basicpay+sudang 내림차순 출력 단, 남자만출력 SELECT name, ssn, basicpay, sudang, basicpay+sudang pay FROM insa WHERE MOD(SUBSTR(ssn, 8, 1), 2) = 1 ORDER BY pay; SELECT name, ssn, basicpay, sudang, basicpay+sudang pay FROM insa WHERE basicpay+sudang>=2000000 ORDER BY pay; //**************************************** -- DISTINCT : 중복 배제(반대 : ALL -- 기본) -- 부서명 SELECT buseo FROM insa; SELECT ALL buseo FROM insa; -- ALL 생략가능 SELECT DISTINCT buseo FROM insa; -- 중복 배제 SELECT DISTINCT buseo, jikwi FROM insa; -- 성씨가 한자라는 가정하에 중복배제해서 성씨출력 SELECT DISTINCT SUBSTR(name, 1, 1) FROM insa; SELECT DISTINCT SUBSTR(name, 1, 1) FROM insa ORDER BY SUBSTR(name, 1, 1); //**************************************** -- IN IN(값, 값, ...) : 피연산자가 식 목록 중 하나와 동일한 경우 TRUE -- 출신도가 서울,부산,대구,인천 SELECT name, city FROM insa WHERE city='서울' OR city='부산' OR city='대구' OR city='인천'; SELECT name, city FROM insa WHERE city IN ('서울','부산','대구','인천'); //**************************************** -- BETWEEN ~ AND : 피연산자가 범위 안에 있는 경우 참 SELECT name, basicpay FROM insa WHERE basicpay>=1500000 AND basicpay<=2000000; SELECT name, basicpay FROM insa WHERE basicpay BETWEEN 1500000 AND 2000000; //**************************************** -- LIKE : 주어진 문자열이 패턴과 일치하는지 여부 확인 % : 여러문자 공통 _ : 한문자 공통 SELECT name, tel FROM insa WHERE tel LIKE '%3'; SELECT name, tel FROM insa WHERE tel LIKE '%3%'; SELECT name, tel FROM insa WHERE name LIKE '김%'; SELECT name, tel FROM insa WHERE name NOT LIKE '김%'; SELECT name, ssn FROM insa WHERE ssn LIKE '_0%'; //**************************************** -- DECODE : 각각의 조건에 맞는 값에 대한 처리를 결과를 리턴 SELECT name, ssn, DECODE(SUBSTR(ssn, 8, 1), 1, '남자') 성별 FROM insa; SELECT name, ssn, DECODE(SUBSTR(ssn, 8, 1), 1, '남자', 3, '남자', 2, '여자', 4, '여자') 성별 FROM insa; SELECT name, ssn, DECODE(MOD(SUBSTR(ssn, 8, 1), 2), 1, '남자', 0, '여자') 성별 FROM insa; //**************************************** -- CASE ~ END : 조건에 따라 다른 결과를 리턴해야 하는 경우(DECODE 보다 성능 우수) SELECT name,basicpay,sudang,basicpay+sudang pay, CASE WHEN basicpay+sudang>=3000000 THEN 0.03 WHEN basicpay+sudang>=2000000 THEN 0.02 ELSE 0 END * (basicpay+sudang) AS 세금 FROM insa; //**************************************** -- 집합 연산자 UNION : 첫 번째 SQL문의 결과와 두 번째 SQL문의 결과 중 중복된 데이터를 제거한다. UNION ALL : 첫 번째 SQL문의 결과와 두 번째 SQL문의 결과를 모두 출력한다. MINUS : 차집합. 첫 번째 SQL문 결과에는 있고, 두 번째 SQL문의 결과에는 없는 데이터를 출력한다. INTERSECT : 인터섹트는 두 번째 SQL문의 결과와 첫 번째 SQL문의 결과에 중복된 행만 출력(교집합) SELECT name, city, buseo FROM insa WHERE buseo='개발부' UNION SELECT name, city, buseo FROM insa WHERE city='인천'; SELECT name, city, buseo FROM insa WHERE buseo='개발부' UNION ALL SELECT name, city, buseo FROM insa WHERE city='인천';