가장 확연한 차이는 느린 반응 속도입니다.
프로토타입인 안드로이드 타블렛보다 못한 성능을 보이는 아이패드입니다.
(물론 HTML5와 플래시로 전체 성능을 판단한다는 건 비약적이나, UI 면에선 iPad에 좋은 점수를 주기 어렵습니다.)

iPad HTML5 시연 동영상



안드로이드 타블렛 시연 동영상





스티브 잡스 형님께 묻습니다.
안드로이드가 아직도 만만해 보이십니까?
저작자 표시 비영리 동일 조건 변경 허락
신고
오라클이 설치된 경로 - C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib
    사용자 환경에 따라 다릅니다. 여기서, ojdbc14.jar 파일을 복사

 자바가 설치된 경로 - C:\Program Files\Java\jdk1.6.0_19\jre\lib\ext
    마찬가지입니다. 사용자 환경에 따라 다르죠. 이곳에 붙여 넣습니다.

정상적으로 JDBC가 연결되었습니다.
저작자 표시 비영리 동일 조건 변경 허락
신고
-- 쿼리문의 구조
SELECT first_name
            , last_name
FROM employees;

--

SELECT employee_id
            , last_name
            , salary
FROM employees
WHERE employee_id = 100;

--

SELECT *
FROM employees
WHERE employee_id = 100;

-- 테이블 컬럼 확인
DESC employees;

-- emp last_name이 'Austin', 'Chen'인 사원의 정보를 얻어보자.
-- 출력 결과> 사번, last_name, job_id, salary
SELECT employee_id
            , last_name
            , job_id
            , salary
FROM employees
WHERE last_name = 'Austin' OR last_name = 'Chen';

-- emp

SELECT employee_id
            , last_name
            , job_id
            , salary
FROM employees
-- WHERE salary >= 10000 AND salary <= 15000;
WHERE salary BETWEEN 10000 AND 15000;

-- emp last_name이 'Austin', 'Chen'인 사원의 정보를 얻어보자.
-- 출력 결과> 사번, last_name, job_id, salary
SELECT employee_id
            , last_name
            , job_id
            , salary
FROM employees
-- WHERE last_name = 'Austin' OR last_name = 'Chen';
WHERE last_name IN('Austin', 'Chen');

-- emp에서 입사 일자가 97년인 사원의 정보를 얻어오자.
SELECT employee_id
          , last_name
          , hire_date
FROM employees
WHERE hire_date LIKE '97%';

-- emp에서 이름이 'Au' 사원의 정보를 얻어보자.
SELECT employee_id
            , last_name
            , hire_date
FROM employees
WHERE last_name LIKE 'A%';

-- emp 에서 모든 사원의 정보를 얻어보자.
-- 단, 월급순(내림차순)이다.
-- 출력결과 > 사번, 이름(라), 월급
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary ASC;

-- 전체 사원의 평균 월급
SELECT AVG(salary)
FROM employees;

-- 

SELECT AVG(salary)
FROM employees
WHERE salary>10000;

--

-- 부서번호가 50인 사원의 평균 월급을 구하라.

SELECT AVG(salary)
FROM employees
WHERE department_id = 50;

-- 각 부서의 평균 월급을 구하라.
-- 출력 결과 > 부서번호, 평균 월급
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) ASC;

-- 

SELECT TO_CHAR(hire_date, 'YYYY'), AVG(salary)
FROM employees
GROUP BY TO_CHAR(hire_date, 'YYYY')
HAVING AVG(salary) >= 10000;

-- 부서 번호가 30, 50이고 월급이 5000 이하인 사원의 정보를 구하자.
-- 출력결과 > 사원번호, 이름(라), 부서번호, 월급
SELECT employee_id, last_name, department_id, salary
FROM employees
WHERE (department_id = 30 OR department_id = 50) AND salary <= 5000;

-- 부서번호가 10 또는 20인 부서의 최대 월급을 구하자.
-- 출력결과 > 부서번호, 최대월급
SELECT department_id, MAX(salary)
FROM employees
WHERE department_id IN (10, 20)
GROUP BY department_id;

-- 위와 똑같음
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING department_id IN (10, 20);

--

-- 직무 ID 별 최대 월급을 구하자. MAX(salary) 사용.
-- 출력 결과 > 직무ID , 최대월급
SELECT job_id, MAX(salary)
FROM employees
GROUP BY job_id
ORDER BY job_id ASC;

-- 직무 ID가 'SA_REP' 거나 'SA_MAN' 이고,
-- 입사일자가 98년인 사원의 정보를 구하자.
-- 출력 결과 > 사원번호, 이름(라), 직무ID, 입사일자
SELECT employee_id, last_name, job_id, hire_date
FROM employees
WHERE (job_id = 'SA_REP' OR job_id = 'SA_MAN') AND --hire_date LIKE '98%';
-- TO_CHAR(hire_date, 'YYYY') = '1998';
EXTRACT (YEAR FROM hire_date) = '1998';

-- 단일 행 함수(문자, 숫자, 날짜, NULL, 변환, 기타)
SELECT CAST('22-OCT-1997' AS TIMESTAMP WITH LOCAL TIME ZONE) 
   FROM dual;

--

SELECT job_id,
  CASE job_id
        WHEN  'SA_MAN' THEN
        'Sales Dept'
        WHEN 'SA_REP' THEN
        'Sales Dept'
        ELSE
        'Another'
  END CASE
FROM jobs
WHERE job_id LIKE 'S%';

-- 사원번호가 150, 170인 사원의 정보를 얻어보자.
-- 출력결과 > 사번, 이름, 월급, commission_pct, 매니저ID
SELECT employee_id, last_name, salary, commission_pct, manager_id
FROM employees
-- WHERE employee_id = 150 OR employee_id = 170;
WHERE employee_id IN(150, 170);

-- 사원의 월별 입사자 수를 얻어보자.
-- 출력결과> 월, 입사자 수
SELECT TO_CHAR(hire_date, 'mm') AS hd, count(*)   -- 별칭(애칭)을 hd를 사용
FROM employees
GROUP BY TO_CHAR(hire_date, 'mm');
ORDER BY hd;

-- 주민등록번호 770525-1567423을
-- 770525-1******으로 나타내 보자.
--SELECT RPAD('770525-1567423', 8, '*')
SELECT CONCAT(SUBSTR('770525-1567423', 1, 8), '******')
FROM DUAL;

--???
SELECT RPAD('770525-1567423', 20, '*')
FROM DUAL;

-- 각 사원의 월급 등급을 알아보자.
-- 출력 결과 > 사원번호, 이름, 월급, 등급(10단계)
SELECT employee_id,
            last_name,
            salary,            
WIDTH_BUCKET(salary, 2100, 24000, 10) AS GRADE
FROM employees
ORDER BY GRADE DESC;

-- NULL과의 연산
SELECT NULL + 10
FROM DUAL;

-- 직원들의 예상 월급을 구하라.
-- 출력결과>사번,이름,월급,commision_pct,예상월급
SELECT employee_id,
              last_name,
              salary,
              salary + salary * commission_pct --NVL(TO_CHAR(commission_pct), 0) AS "commision"
FROM employees;

-- 분기별 입사 인원 수를 구하라.
-- 출력결과 > 분기, 입사 인원 수
SELECT CEIL(EXTRACT (MONTH FROM hire_date)/3) AS quater,
            , COUNT(*)
FROM employees
GROUP BY CEIL(EXTRACT (MONTH FROM hire_date)/3);

-- 사원의 근무기간을 구하라.
-- 출력결과 > 사원번호, 이름, 입사일자, 근무기간(년), 근무기간(월)
SELECT employee_id,
              last_name,
              hire_date,
              FLOOR(months_between(SYSDATE, hire_date)/12) AS "근무기간(년)",
              FLOOR(MOD(months_between(SYSDATE, hire_date), 12)) AS "근무기간(월)"
FROM employees;


SELECT ADD_MONTHS(SYSDATE, 12)
FROM dual;

--

SELECT --employee_id
                CAST(employee_id AS CHAR(6))
FROM employees;

--
SELECT TO_CHAR(SYSDATE, 'YYY-MM-DD HH24:MI:SS')
FROM DUAL;

-- 오늘 + 1년
SELECT SYSDATE + 365 AS PLUSDATA
FROM DUAL;

SELECT TO_DATE('2008-01-01') + 365 AS PLUSDATA
FROM DUAL;

-- 분기별 입사 인원수를 구하자.
-- 출력 결과 > 분기, 입사인원
SELECT CEIL(EXTRACT(MONTH FROM hire_date)/3) AS quater,
            COUNT(*)
FROM employees
GROUP BY CEIL(EXTRACT(MONTH FROM hire_date)/3)
ORDER BY quater;

-- TO_CHAR(hire_date)를 사용해서 위와 같은 결과 값 출력
SELECT TO_CHAR(hire_date, 'Q') AS quater
FROM employees
--GROUP BY TO_CHAR(hire_date, 'D')
ORDER BY quater;

-- job_id가 'SA_MAN'인 사원은 'Sales_Manager',
-- 'SA_REP'인 사원은 'Sales_Representative'
-- 기타 사원은 'Other'로 표시하여라(DECODE 사용)
-- 출력결과 > 사번, 이름, job_id, job_id fullname
SELECT employee_id as "사번",
             last_name as "이름",
            job_id,
DECODE(job_id, 'SA_MAN', 'Sales_Manager', 'SA_REP', 'Sales_Representative', 'Other') AS AAA
FROM employees WHERE job_id LIKE 'S%'
ORDER BY job_id ASC;

-- 사원의 월급 랭크를 만들어 보자.
-- 5000미만이면 l, 5000이상이면 M, 10000이상이면 H
-- 출력 결과 > 사원번호, 이름, 월급, 등급
SELECT employee_id,
              last_name,
              salary,
    CASE employee_id
            WHEN salary<5000 THEN 'L'
            WHEN salary<10000 THEN 'M'
            ELSE 'H'
    END CASE
FROM employees;

-- 부서별 인원 수를 구해보자.
SELECT department_id, COUNT(*)
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;

SELECT job_id, SUM(salary)
FROM employees
GROUP BY job_id;


-- job_id별 최대 월급을 산출하라.
-- 단, 최대 월급이 10000 이상인 그룹만 표시하라.
SELECT DISTINCT JOB_ID
            , MAX(salary) OVER(PARTITION BY JOB_ID ORDER BY JOB_ID DESC) as "Salary Over"
FROM employees;

-- INLINE VIEW (테이블 안에 테이블을 한번 더 정의. FROM 절 안에 쿼리가 포함되어 있는 형태)
SELECT *
FROM(
SELECT DISTINCT JOB_ID, MAX(salary) OVER(PARTITION BY JOB_ID ORDER BY job_id DESC) as mscx
FROM employees)
WHERE mscx >= 10000;

-- RANK(), ORDER BY 절이 항상 필요
SELECT employee_id
            , salary
            , RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) as rnk
FROM employees; -- department_id 별로 묶어서 순위를 출력(PARTITION BY department_id)


-- 부서별 월급이 1~5등인 사원의 정보를 보자. INLINE VIEW로 작성.
-- 단, 사원이 5명 이상인 부서로 한한다.
-- 출력결과 > 사번, 이름, 월급, 등급
SELECT *
FROM
          (SELECT employee_id
                      , last_name
                      , salary
                      , RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) as rnk --부서별로 등급이 어떻게 되는지?
                      , COUNT(*) OVER(PARTITION BY grade) as cnt --속한 부서의 인원이 몇 명인지?
          FROM employees)
WHERE rnk <= 5 AND cnt >=5; -- 사원수(cnt)가 5명 이상,  부서별 월급이 1~5등(rnk)

-- 각 사원의 월급 등급을 부서 평균과 비교하여 다음과 같이 등급을 정하자. 평균보다 작으면 L, 평균과 같으면 S, 크면 H
-- 출력결과 > 사번, 이름, 월급, 등급
SELECT employee_id
            , last_name
            , salary
            , RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) as rnk
            --, ROUND(AVG(salary) OVER (PARTITION BY department_id), 0) as avg
            , CASE
              WHEN salary < AVG(salary) OVER (PARTITION BY department_id)  THEN
                        'L'
              WHEN salary = AVG(salary) OVER (PARTITION BY department_id) THEN
                        'S'
              WHEN salary > AVG(salary) OVER (PARTITION BY department_id) THEN
                        'H'
            END as 등급
FROM employees;

-- NTILE
SELECT salary,
             NTILE(10) OVER(ORDER BY salary ASC) as ntile
FROM employees;

-- 부서별로 입사 순위가 빠른 순서로 순위 1,2위를 얻어보자.
-- 출력결과> 부서번호, 이름, 사원번호, 순위
SELECT *
FROM(
          SELECT department_id
                      , last_name
                      , employee_id
                      , RANK() OVER(PARTITION BY department_id ORDER BY hire_date DESC) as rnk
          FROM employees)
where rnk IN(1,2);

-- job_id별로 월급이 낮은 20%의 사람의 정보를 얻어보자.
-- 출력결과> job_id, 사번, 이름, 월급, 등급(%)
SELECT *
FROM(
        SELECT job_id
                    , employee_id
                    , last_name
                    , salary
                    , ROUND(PERCENT_RANK() OVER(ORDER BY salary DESC), 2) as RANK
        FROM employees)
WHERE RANK <= 0.2;


-- ROW_NUMBER(), 1부터 10까지 출력(INLINE VIEW)
SELECT *
FROM(
        SELECT employee_id
                    , department_id
                    , salary
                    , ROW_NUMBER() OVER(ORDER BY salary DESC) AS rn
        FROM employees
        WHERE department_id = 80)
WHERE rn BETWEEN 1 AND 10;

-- JOIN
SELECT employee_id
            , department_id
FROM employees
WHERE department_id IN(80, 90);

SELECT department_id
            , department_name
FROM departments
WHERE department_id IN(80, 90);

-- 비명시적 JOIN (하나의 쿼리문으로 두 개의 테이블에 있는 데이터를 한꺼번에 가져올 수 있다)
SELECT employee_id
            , e.department_id
            , department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id         -- employees에 있는 department_id와 departments에 있는 department_id를 연결한다.
AND e.department_id IN(80, 90);

-- 부서의 정보를 얻어보자
-- 출력결과> 부서번호, 부서이름, 부서위치(도시이름-LOCATIONS)
SELECT department_id
            , department_name
            , city
FROM departments d, locations l
WHERE d.location_id = l.location_id;

-- 명시적 JOIN
SELECT d.department_id
            , d.department_name
            , city
FROM departments d JOIN locations l
ON d.location_id = l.location_id;   -- ON은 employees와 department을 JOIN하기 위한 조건을 정의한다.

-- 사원번호가 132, 150번인 사원에 대하여 월급 정보를 얻어보자.
-- 출력결과> 사번, 월급, 최소 월급, 최대 월급(JOBS)
SELECT employee_id
            , salary
            , j.min_salary
            , j.max_salary
FROM employees e JOIN jobs j
ON employee_id IN(132,150)
WHERE e.job_id = j.job_id;

-- 사원번호(employees)가 164, 170인 사원의 job_title(jobs), department_name(departments)을 얻어보자.
-- 출력결과> 사번, job_title, department_name (비명시적)
SELECT employee_id
            , job_title
            , department_name
FROM  employees e, jobs j, departments d
WHERE e.job_id = j.job_id AND e.department_id = d.department_id
AND employee_id IN(164,170);


-- 명시적 JOIN으로 바꿔서 출력
SELECT employee_id
            , job_title
            , department_name
FROM employees e JOIN jobs j
  ON e.job_id = j.job_id
JOIN departments d
  ON e.department_id = d.department_id
AND employee_id IN(164, 170);


-- OUTER JOIN(null 데이터 출력을 위한 JOIN)
-- 1999년 1월부터 6월까지 입사한 인원의 정보를 얻어보자.
SELECT employee_id
            , last_name
            , hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'YYYY-MM') BETWEEN '1999-01' AND '1999-06'
ORDER BY hire_date ASC;

-- 위 예제에 부서 이름 출력
SELECT employee_id
            , last_name
            , hire_date
            , department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id
WHERE TO_CHAR(hire_date, 'YYYY-MM') BETWEEN '1999-01' AND '1999-06'
ORDER BY hire_date ASC;

-- 위 예제를 비명시적으로 바꿈
SELECT employee_id
            , last_name
            , hire_date
            , department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+)    -- (+)를 추가
AND TO_CHAR(hire_date, 'YYYY-MM') BETWEEN '1999-01' AND '1999-06'
ORDER BY hire_date ASC;


-- 부서와 부서 관리자 정보를 얻어보자.
-- 단, 부서의 관리자가 없는 부서의 정보도 얻자. OUTER JOIN으로 해야함.
-- 출력결과> 부서이름, 부서관리자 아이디, 부서관리자 이름
SELECT department_name
            , d.manager_id
            , last_name
FROM employees e RIGHT OUTER JOIN departments d   -- ON에서 지정한 컬럼 데이터에 NULL이 있는 쪽을 LEFT/RIGHT로 지정함.
ON e.employee_id = d.manager_id;
--ON e.manager_id = d.manager_id;


-- 비명시적
SELECT department_name
            , d.manager_id
            , last_name
FROM departments d, employees e
WHERE d.manager_id = e.employee_id(+);

-- 각 사원의 매니저 이름을 얻어보자. (SELF JOIN. 자기 자신을 JOIN)
-- 출력결과> 사원번호, 이름, 매니저의 사번, 매니저 이름
SELECT a1.employee_id
            , a1.last_name
            , a2.manager_id
            , a2.last_name
FROM employees a1 RIGHT OUTER JOIN employees a2
ON a2.manager_id = a1.employee_id;

-- 사원(EMP), 부서(DEPT), 급여등급(SALGRADE)
-- 1. 사원 테이블에서 사원번호가 7369, 7698 번인 사원번호와 이름을 출력하세요?
SELECT empno
           , ename
FROM emp
WHERE empno IN(7369, 7698);

-- 2. 사원 테이블에서 사원번호가 7369, 7698 번인 아닌 사원번호와 이름을 출력하세요?
SELECT empno
           , ename
FROM emp
WHERE empno != 7369 AND empno != 7698;

-- 3. 사원 테이블에서 급여(SAL)가 3000에서 5000사이인 사원 정보를 다 출력하세요?
SELECT *
FROM emp
WHERE sal >= 3000 AND sal <= 5000;

-- 4. 사원 테이블에서 고용일자(HIREDATE)가 1981년 12월 1일 이후 고용된 사원 정보를 다 출력하세요?
SELECT *
FROM emp
WHERE TO_CHAR(hiredate, 'YYYY-MM-DD') >= '1981-12-01'
ORDER BY hiredate ASC;

-- 5. 사원 테이블에서 직업(JOB)이 SALESMAN 중에서 사원번호의 최대값을 출력하세요?
SELECT MAX(empno), job
FROM emp
WHERE job = 'SALESMAN'
GROUP BY job;

-- 6. 사원 테이블에서 각 사원에 부서명을 아래 예제처럼 출력하세요
-- (사원, 부서 테이블 조인 시 부서가 없는 사원은 출력 안함)
-- ex) 정렬은 부서명(DNAME), 사원명(ENAME) 오름차순 
SELECT dname
            , empno
            , ename
FROM emp e JOIN dept d
ON e.deptno = d.deptno
ORDER BY dname ASC;
 
-- 7. 사원 테이블에서 각 사원에 부서명을 아래 예제처럼 출력하세요
-- (사원, 부서 테이블 조인 시 부서가 없는 사원도 출력)
-- ex) 정렬은 부서명(DNAME), 사원명(ENAME) 오름차순
SELECT dname
            , empno
            , ename
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno
ORDER BY dname ASC;

-- 8. 부서 위치가 'DALLAS', 'CHICAGO' 곳에 근무하는 사원 정보 아래 
-- 예제처럼 출력하세요
-- ex) 정렬은 부서위치(LOC) 내림차순, 사원명(ENAME) 오름차순
SELECT loc
            , empno
            , ename
FROM emp e JOIN dept d
ON e.deptno = d.deptno
WHERE d.loc IN('DALLAS', 'CHICAGO')
ORDER BY LOC DESC;
 
-- 9. 부서별 최고 급여(SAL) 금액을 아래 예제처럼 출력하세요
-- ex) 부서 없는 사원은 제외
SELECT d.deptno
            , MAX(sal)
FROM emp e JOIN dept d
ON e.deptno = d.deptno
GROUP BY d.deptno
ORDER BY deptno ASC;
 
-- 10. 부서별 최고 급여(SAL) 금액을 받는 사원 정보를 아래 예제처럼 출력하세요
-- ex) 부서 없는 사원은 제외
SELECT DISTINCT deptno
                          , MAX_SAL
                          , empno
                          , ename
                          , job
FROM emp,
(SELECT DISTINCT MAX(sal)
 OVER(PARTITION BY deptno ORDER BY deptno ASC) AS MAX_SAL
 FROM emp)
WHERE deptno IS NOT NULL AND MAX_SAL=sal
ORDER BY deptno;
 
-- 전체 사원에 대한 평균 월급을 구하자.
SELECT AVG(salary)
FROM employees;
-- 전체 사원 중에서 평균 월급보다 많이 받는 사원을 구하자. (서브쿼리)
SELECT employee_id
            , last_name
            , salary
FROM employees
WHERE salary >  (SELECT AVG(salary)
                            FROM employees
                            );

-- 직무별 최대 급여를 받는 사원의 정보를 얻자.
-- 부서별 최대월급을 받는 사람이 한 명이 아니라, 복수의 사람이 출력되면 WHERE 절에서 서브쿼리를 작성해야 한다.
-- 출력결과 > 사번, 이름, 월급

SELECT job_id
            , MAX(salary)
FROM employees
GROUP BY job_id;
------------------------------ 일단 이 정도, 그 다음에

SELECT employee_id
            , last_name
            , salary
FROM employees
WHERE (job_id, salary) IN(SELECT job_id
                                                      , MAX(salary)
                                          FROM employees
                                          GROUP BY job_id
                                          );
----------- 이렇게 서브쿼리를 작성해서, 직무별 최대 급여를 받는 사원의 정보를 얻었다.


-- 부서별로 입사일이 가장 오래된 사원의 정보를 얻자.
-- 출력결과 > 사번, 이름, 부서, 입사일자
SELECT job_id
            , MIN(hire_date)
FROM employees
GROUP BY job_id;

SELECT employee_id
            , last_name
            , department_id
            , hire_date
FROM employees
WHERE (department_id, hire_date) IN(SELECT department_id
                                                                          , MIN(hire_date)
                                                              FROM employees
                                                              GROUP BY department_id
                                                              );

-- 위 예제를 상관하위질의로 바꿔라.
SELECT employee_id
            , last_name
            , department_id
            , hire_date
FROM employees e1
WHERE hire_date = (SELECT MIN(hire_date)
                                  FROM employees e2
                                  WHERE e2.department_id = e1.department_id
                                  );

-- 위 예제를 JOIN으로 바꿔라.
SELECT employee_id
            , last_name
            , e.department_id
            , hire_date
FROM employees e JOIN(SELECT department_id
                                                    , MIN(hire_date) as mnhrd
                                         FROM employees
                                         GROUP BY department_id
                                         ) d
ON e.department_id = d.department_id
WHERE e.hire_date = d.mnhrd;


-- JOIN
SELECT employee_id
            , last_name
            , e.job_id
            , salary
FROM employees e JOIN(SELECT job_id
                                                    , MAX(salary) as mxsal
                                         FROM employees
                                         GROUP BY job_id
                                         ) v
ON e.job_id = v.job_id
WHERE e.salary = v.mxsal;

-- 상관하위질의
SELECT employee_id
            , last_name
            , job_id
            , salary
FROM employees e1
WHERE salary = (SELECT MAX(salary)
                            FROM employees e2
                            WHERE e2.job_id = e1.job_id
                           );


-- 부서별 평균 급여보다 적게 받는 사원의 정보를 얻어보자.
-- 출력결과 > 사번, 이름, 부서이름, 급여
-------------------------------------------------------------- JOIN으로 작성
SELECT employee_id
            , last_name
            , e.department_id
            , salary
FROM employees e JOIN(SELECT department_id
                                                    , AVG(salary) as agsal
                                         FROM employees
                                         GROUP BY department_id
                                         ) v
ON e.department_id = v.department_id
JOIN departments d
ON e.department_id = d.department_id
WHERE e.salary < v.agsal;

-------------------------------------------------------------- 상관하위질의
SELECT employee_id
            , last_name
            , department_id
            , salary
FROM employees e1
WHERE salary < (SELECT AVG(salary) as agsal
                            FROM employees e2
                            WHERE e1.department_id = e2.department_id
                           );
-------------------------------------------------------------- 

-- JOIN
SELECT employee_id
            , last_name
            , e.job_id
            , salary
FROM employees e JOIN(SELECT job_id
                                                    , MAX(salary) as mxsal
                                         FROM employees
                                         GROUP BY job_id
                                         ) v
ON e.job_id = v.job_id
WHERE e.salary = v.mxsal;


SELECT employee_id
            , last_name
            , job_id
            , salary
FROM employees e1
WHERE salary = (SELECT MAX(salary)
                            FROM employees e2
                            WHERE e2.job_id = e1.job_id
                           );
 
-- SEQUENCE
INSERT INTO dept(deptno
                         , dname)
VALUES(dept_id_seq.NEXTVAL
              , 'CHA')

--

 CREATE SEQUENCE dept_id_seq
 START WITH 50
 INCREMENT BY 10
 MAXVALUE 999;
 
 


-- 1. 사원 테이블에서 각 사원에 급여(SAL) 등급을 아래 예제처럼 출력하세요.
SELECT empno
            , ename
            , sal
            , grade
FROM emp e JOIN salgrade s
ON e.sal < s.hisal AND e.sal > s.losal
ORDER BY grade ASC;

-- 2. 사원 테이블에서 평균 급여(SAL) 보다 높은 사원 정보를 아래 예제처럼 출력하세요.
SELECT empno
            , ename
            , job
            , sal
FROM emp
WHERE sal >  (SELECT AVG(sal)
                            FROM emp
                            )
ORDER BY sal DESC;

-- 3. 사원 테이블에서 부서별 평균 급여(SAL) 보다 높은 사원 정보를 아래 예제처럼 출력하세요.
-- 정렬은 급여 내림차순
SELECT dname
            , empno
            , ename
            , job
            , sal
FROM emp e JOIN(SELECT deptno
                                          , AVG(sal) as agsal
                                         FROM emp
                                         GROUP BY deptno
                                         ) v
ON e.deptno = v.deptno
JOIN dept d
ON e.deptno = d.deptno
WHERE e.sal > v.agsal
ORDER BY sal DESC;  

-- 4. 사원 테이블에서 각 사원에  급여(SAL) 순위 점수 별로 인원수를 아래 예제처럼 출력하세요.
-- 급여순위점수(SALGRADE) 테이블 JOIN  
SELECT DISTINCT grade
                              , losal
                              , hisal
                              , COUNT(*) OVER(PARTITION BY grade) as cnt
FROM emp e JOIN salgrade s
ON e.sal > s.losal AND e.sal < s.hisal
ORDER BY grade ASC;


-- 5. 부서명이 'RESEARCH' 이거나 부서위치가 'NEW YORK' 사원 정보를 아래 예제처럼 출력하세요
SELECT dname
            , loc
            , empno
            , ename
FROM emp e JOIN dept d
ON e.deptno = d.deptno
WHERE dname = 'RESEARCH' OR loc = 'NEW YORK'
ORDER BY dname ASC;

-- 6. 사원 테이블에서 EMPNO, MGR, SAL 세 개의 컬럼을 단순 숫자 의미로 가정 할 경우 세 개의 값 중 최대값(MAX_VALUE), 최소값(MIN_VALUE) 을 아래 예제처럼 출력하세요
-- ex) EMPNO, MGR, SAL 컬럼 중 널 값이 존재할 경우 0으로 치환
-- 정렬은 최대값 내림차순
SELECT empno
              , mgr
              , sal
              , GREATEST(TO_NUMBER(NVL(EMPNO,0))
              , TO_NUMBER(NVL(MGR,0))
              , TO_NUMBER(NVL(SAL,0))) MAX_VALUE
              , LEAST(TO_NUMBER(NVL(EMPNO,0)),TO_NUMBER(NVL(MGR,0)),TO_NUMBER(NVL(SAL,0))) MIN_VALUE
FROM emp
ORDER BY 4 DESC;


-- 7. 부서 테이블에서 DNAME 컬럼의 길이가 6자리 이상이면은 5자리까지 데이터만 보여주고 ‘..’ 뒤에 붙여준다. 아래 예제처럼 출력하세요
SELECT dname
            , CONCAT(SUBSTR(dname, 1, 5), '..')
FROM dept;


-- 8. 사원 테이블에서 고용일자(HIREDATE) 해당 년 월의 마지막 날짜(HIREDATE_MONTH_LASTDAY), 고용일자부터 2006/08/05 
-- 일자까지 근무일(WORK_DAY)을 아래 예제처럼 출력하세요
SELECT empno
            , hiredate
            , LAST_DAY(hiredate)
            , TO_DATE('2006/08/05','YYYY/MM/DD') - hiredate WORK_DAY
FROM emp; 
저작자 표시 비영리 동일 조건 변경 허락
신고

"단순무식 불법야근에 월화수목금금금"

기사전문 (http://www.asiae.co.kr/news/view.htm?idxno=2010042111102423592)

개발자를 지향하는 한 사람으로서 이런 기사에 자꾸 예민해집니다.
정작 정책 주도권을 쥔 사람들 입에서 나와야 할 소리가 사회 변두리 층에서 간혹 언급된다는 게 문제이긴 하죠.
진보신당도 나름 공신력 있는 정당이지만, 실제 그 힘은 미약한 수준(...)
앉아서 일한다고 편하게 일한다고 생각하면 큰 오산이지만 아직도 우리 사회는 개발자를 너무 '몰라라.' 합니다.
가까운 나라 일본이 역사적으로 아무리 미워도 한 가지 부러운 게 있다면 바로 근로 환경입니다.
(막 굴려 먹으면 어떻게든 결과물이 나올 거라고 믿는 한국의 단순 무식 스타일은 소프트웨어 발전을 가로막는 병폐입니다.)
아(...) 정말 언제까지 한국은 개발자를 홀대하렵니까.

저작자 표시 비영리 동일 조건 변경 허락
신고
  1. d.d 2010.04.22 00:35 신고

    야근한다고 당연한듯 아침엔 늦게 오고 밥먹고는 졸리다고 한시 넘어서꺼정 오락하고 채팅창 뜨면 간간이 낄낄대다 저녁때나 돼야 정신 나서 주섬거리는 종족인데 뭐가 더 아쉽다고...외국 개발자는 금요일 오후면 TGIF인줄 아시남유? 영화만 보시는건지. 주변 나라에 야근이 없다면 그만큼 아침과 낮시간 관리를 잘하는겁니다. 이나라에 야근때문에 아이폰이 없고 스티붕잡승이 안생기는듯 때만 생기면 대우가 허접이네 뭐네 징징징. 샴승 에루쥐 물량으로 뜨다가 짱깨한테 밀리는건 시간문젠데 관리자들 지능이 설마 공돌이만 못할까봐서? 디자인입네 개발부입네 다들 야근하는거 자랑으로 삼잖아? 우린 요롷코롬 빡신데 왜 대접이 없냐고...자기 루저 인생 합리화하려는 발버둥이겠지. 주어진 시간 딱 부러지게 쓰기나 하고 타령을 읇던지. 막상 정시 출근에 딴짓하면 짤리고 정시 퇴근 전까지 일 마무리 해놓으라고 하면 또 길길이 뛰겠지. 루저 인생에 길들여놓고 이제와서 정시퇴근 하라고 하면 워쩌냐고...뭐하잔건지...그렇게 사슈.

    • Favicon of http://theh4l.tistory.com BlogIcon TheH4L 2010.04.22 00:39 신고

      IT 현업에 계시면서 이런 댓글을 다시는거면 할 말 없겠습니다만...
      아니면서 이런 댓글 달면..ㅡ;; 어이없어서 대꾸할 필요도 없겠군요.

    • 병신님 인증 2010.04.22 08:33 신고

      님이 보신게 그런건가 보네요. 님이 보신게 그런거라면 그런 회사에 다니고 계신것 같은데. 안봐도 뻔하군요. 좋은 날 생기겠죠. 좋은 회사로 가세요. 저처럼. ^^

    • Favicon of http://plakia.tistory.com BlogIcon 곰단지 2010.04.22 21:48 신고

      d.d 님 말씀은 솔직히 대응할 가치를 못 느끼겠네요. 아무쪼록 직함에 맞게(관리 레벨에 계신다면) 제발 개발자를 가족처럼 대해 주십시오. 개발자가 무슨 막노동 일꾼입니까? 구글이 괜히 구글이겠습니까? 일본은 작은 중소기업도 지킬 건 지킵니다. 왜 이런 하소연이 나온 건지 조금이라도 고민해 보셨나요? 괜히 엄한데 와서 신경질 내지 마시고, 본인 일이나 착실히 잘하시죠.



안드로이드 펍
http://www.androidpub.com/

칸드로이드
http://www.kandroid.org

안드로이드 사이드
http://www.androidside.com/


한국은 뒤늦은 감이 있지만, 스마트폰 솔루션에 대한 기대로 온 나라가 잔뜩 들뜬 모양새다.
그렇잖아도 소프트웨어 진흥을 위해 정부가 손을 걷고 나섰지만, 그 내용이란 게 겉만 그럴싸할 뿐,
내용물이 없다는 지적이 크다. 더군다나 실제 현업에서 개발자들이 겪는 고충과 상반된 먼 나라 얘기를 아주 당연하다는 듯이 해 대는 정부 각료의 말을 듣고 있노라면 더더욱 기가 찰 뿐. 쩝이다. 쩝. -ㅅ-

말이 잠깐 딴 대로 새었지만,
현재로선 안드로이드 개발에 관한 한 안드로이 펍과 칸드로이드를 적극적으로 참고할 필요성이 크다.
많은 도움이 될 것 같다.

저작자 표시 비영리 동일 조건 변경 허락
신고
난 정말 JAVA를 공부한 적이 없다구요
카테고리 컴퓨터/IT
지은이 윤성우 (오렌지미디어, 2009년)
상세보기


저 역시 수 많은 자바 관련 서적을 접했지만,
여태껏 이 책만한 기초 서적을 보지 못 했습니다.
아무리 이름 있는 유명한 책을 선택하더라도,
쉽사리 읽혀지지 않고 몇 일이 지나면 흐지부지한게 부지기수였지요.
물론 교재를 잘 이해하지 못한 독자의 잘못도 크지만,
사람마다 자신에게 딱 맞는 교재가 분명 존재하는 것 같습니다.

학과 전공으로 자바 수업을 들었음에도 "객체 지향"이 무엇인지,
그리고 쉬운 개념조차 명쾌히 설명할 수 없다는 사실에 스스로 화가 났습니다.
인터넷을 통한 지식 습득에도 한계가 있었고요.
이제 곧 사회 생활을 시작할테고, 개발자로서 현업에 뛰어들어야 할 텐데.
이런 기초지식으론 부족함을 절실히 느꼈습니다.

그러던 찰나에 윤성우 님께서 자바 서적을 집필하셨다는 소식을 접했습니다.
조금 뒤늦게 접했죠. C강의로 이 분 강의에 큰 매력을 갖고 있었거든요.
그래서 곧바로 책을 구매했고 이 선택을 후회하지 않습니다.

다른 어떤 전공 서적이나 프로그래밍 기초서적들이 감히 범접하지 못 할,
저자의 포스가 저를 사로잡았다고나 할까요.^^

완전 생초보자에게도 좋겠지만 어느정도 전공 지식이 있음에도,
자바의 기초에 대해 갈증을 느끼고 있는 이라면 이 책을 적극 추천합니다.
저작자 표시 비영리 동일 조건 변경 허락
신고

+ Recent posts

티스토리 툴바