본문 바로가기

Oracle DataBase/SQL

2day

-- select

 

SELECT *
FROM EMP
WHERE 1!=1; -- 1 = 1



-- 10번 부서 사람들만 조회

 

SELECT *
FROM EMP
WHERE DEPTNO = 10;



-- 직업이 'CLERK' 인 사람들 조회

 

SELECT *
FROM EMP
WHERE JOB = 'CLERK';



-- like 검색 (%,_)
-- 이름에 C자가 들어있는 사람을 조회

 

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



-- 두번째 글자가 C로 시작하는 사람 조회

 

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



-- order by절 컬럼으로 정렬을 함.(오름차순 : ascending, 내림차순 : descending)
-- 월급 오름차순으로 정렬

 

SELECT *
FROM EMP
--order by sal asc;
ORDER BY SAL DESC, 2;



-- 문제1. 20번 부서 사람들의 사원번호, 이름, 직업을 조회하시오.(별칭 줄 것)

 

SELECT EMPNO AS "사원번호",ENAME AS "사원명", JOB AS "직업명"
FROM EMP
WHERE DEPTNO = 20
ORDER BY ENAME;

 

-- 문제2. 월급이 2000 이상인 사람들의 정보를 오름차순으로 정렬하세요.

 

SELECT *
FROM EMP
WHERE SAL >= 2000
ORDER BY SAL ASC;


-- 문제3. 이름이 M으로 시작하는 사원들을 이름순으로 출력하세요.

 

SELECT *
FROM EMP
WHERE ENAME LIKE 'M%'
ORDER BY ENAME ASC;


-- 문제4. 20번 부서 사람들 직업을 내림차순으로 정렬하고, 월급의 오름차순으로
--        정렬해서 출력하세요.

 

SELECT ENAME, JOB 직업, SAL
FROM EMP
WHERE DEPTNO = 20
ORDER BY 직업 DESC, 3;


-- NULL 검색 : is null, is not null

 

SELECT *
FROM EMP
WHERE COMM IS NOT NULL;

 

-- distinct : 중복제거
-- 30번 부서 사람들의 직업을 출력하세요

 

SELECT distinct JOB--, ename 다 같지 않으면 삭제 안됨
FROM EMP
WHERE DEPTNO = 30;

-- 연봉 출력

 

SELECT sal*12 || '$' 연봉, ename || '이(가) 받는 월급은 ' || sal || '입니다.', 0
FROM EMP
WHERE SAL >= 2000
ORDER BY 연봉 DESC;


-- 날짜 비교
-- 문자(varchar2,char), 숫자(number), 날짜(date)
DESC EMP; -- describe


-- 82년부터 입사한 사람들 출력

 

SELECT *
FROM EMP
where hiredate >= '82/01/01';

UPDATE EMP SET HIREDATE = '1987/07/13' WHERE EMPNO = 7876;
UPDATE EMP SET HIREDATE = '1987/07/13' WHERE EMPNO = 7788;
commit;

 

-- and or
-- 직업이 ANALYST이고 월급이 3000이상

 

SELECT *
FROM EMP
where sal >= 3000 and job = 'ANALYST';

 

-- 직업이 SALESMAN 이고 월급이 1500 이상인 사람이거나 부서번호가 30번인 사람

 

SELECT *
FROM EMP
WHERE JOB = 'SALESMAN' AND (SAL >= 1500 OR DEPTNO = 30);


-- not
SELECT *
FROM EMP
WHERE NOT DEPTNO = 30; // !=, ^=, <>


-- between A and B A에서 B까지 (이상 ~ 이하)
-- 월급 1000이상 2000이하 직원 출력

 

SELECT *
FROM EMP
where sal between 1000 and 2000;


-- where sal >= 1000 and sal <= 2000;
--where not sal between 1000 and 2000;

--IN, not in
-- 직업이 CLERK, MANAGER인 사람들 출력


select *
FROM EMP
WHERE JOB IN ('CLERK', 'MANAGER');
-- where job not in ('CLERK', 'MANAGER');
-- where job = 'CLERK' or job = 'MANAGER';

 

-- 연습문제 1
--(15) 이름이 B와 J사이의 모든 사원의 이름을 출력하라

 

SELECT ENAME 이름
FROM EMP
WHERE ENAME >= 'B' AND ENAME < 'K';


--(22) 이름이 S로 시작하고 마지막 글자가 H인 사람의 이름을 출력하라

 

SELECT ENAME 이름
FROM EMP
WHERE ENAME LIKE 'S%H';



--(28) 급여가 $1,500 이상이고, 부서번호가 30번인 사원 중 직업이 MANAGER인 사람의 급여, 부서번호,

직업을 출력하라

 

select sal 급여, deptno 부서번호, job 직업
FROM EMP
WHERE SAL >= 1500 AND DEPTNO = 30 AND JOB = 'MANAGER';


--(20) 입사일이 81년도인 사람의 입사일, 이름을 출력하라

 

SELECT HIREDATE 입사일, ENAME 이름
FROM EMP
where hiredate >= '1981-01-01' and hiredate < '1982-01-01';


-- where hiredate between '1981-01-01' and '1981-12-31';
-- 0시0분0초 기준이기 때문에 12월31일 2시에 들어온 사람은 적용되지 않음


/*
INSERT INTO EMP(EMPNO, HIREDATE, ENAME)
VALUES(9999, TO_DATE('1981-12-31 14:50:00','yyyy-mm-dd hh24:mi:ss'), '미스빈');
rollback;
*/
/************************** 함수 ***************************/
-- 단일행 숫자 함수
-- abs(n), ceil, floor, mod, power, round(n, 자리수), sqrt(n) 제곱근,
-- trunc(n, 자리수)
SELECT ABS(-234.32423) FROM DUAL;
SELECT CEIL(3.3), CEIL(33.33), CEIL(33.333*100)/100 FROM DUAL;
SELECT FLOOR(3.3), FLOOR(5.5) FROM DUAL;
SELECT MOD(5, 2) FROM DUAL;
SELECT POWER(5, 4) FROM DUAL;
SELECT ROUND(55.5555, 0), ROUND(55.5555, 1), ROUND(55.5555, -2) FROM DUAL;
SELECT SQRT(4) FROM DUAL;
SELECT TRUNC(28, -1) FROM DUAL;


-- 단일행 문자함수
-- chr, ascii, lower, upper, lpad, rpad, ltrim, rtrim, trim
SELECT CHR(65), ASCII('A'), ASCII('완샘') FROM DUAL;
SELECT LOWER('ABcD'), UPPER('abCd') FROM DUAL;


-- 사원명이 s로 시작하는 사람을 출력하세요
SELECT lower(ename)
FROM EMP
WHERE LOWER(ENAME) LIKE LOWER('S%');


SELECT LPAD('1234', 6), RPAD('1234', 6)||'끝'  FROM DUAL;
SELECT LTRIM('   1234'), LTRIM('아아아아졸려', '아'), TRIM('   트림  ') FROM DUAL;
SELECT LPAD('333', 6, '0'), RPAD('333', 6, '0') FROM DUAL;
SELECT LPAD('$'||SAL, 5) FROM EMP;


-- regexp_replace(문자열, 패턴 [, 대체문자열])
SELECT REGEXP_REPLACE('123abc123', '[a-z]') FROM DUAL;


-- oracle.tahiti.com 오라클 문서
-- oracleclub.com 한국어 오라클 튜토리얼
-- w3schools.com 정규식

 

 

 

 

'Oracle DataBase > SQL' 카테고리의 다른 글

3day  (0) 2012.07.05
문제1 (select)  (0) 2012.07.04
1day  (0) 2012.07.04
1차 시험 ( 2012.04.13 )  (0) 2012.06.05
2차 시험 ( 2012.04.17 )  (0) 2012.06.05