'분류 전체보기'에 해당되는 글 32건

  1. 2007.06.22 7. 부서별 평균 급여보다 적게 받는 사원
  2. 2007.06.22 6. 직무별로 최대 급여를 받는 사원의 정보
  3. 2007.06.22 5. 평균 급여보다 많이 받는 사원의 수
  4. 2007.06.22 4. 사원 자신의 매니저 정보
  5. 2007.06.22 3. 지역별로 소속되어 있는 사원 수의 합
  6. 2007.06.22 2. 사원 'SEO JOHN'의 직무와 정보
  7. 2007.06.22 1. 사원 'SEO JOHN'의 정보를 얻자
  8. 2007.05.29 clone()의 구현
  9. 2007.05.29 배열의 복사
  10. 2007.05.29 C#과 Java언어 비교(12) - Select Statement, Predefined types

7. 부서별 평균 급여보다 적게 받는 사원

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:50

부서별 평균 급여보다 적게 받는 사원은 누구?

1.부서별 평균급여

SELECT department_name, AVG(salary)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY department_name

2. 1번을 테이블로 생각하여 접근

SELECT *
FROM
 (SELECT department_name, AVG(salary)
 FROM departments d JOIN employees e
 ON d.department_id = e.department_id
 GROUP BY department_name) dept_avgsal


 

SELECT employee_id, last_name, department_name, salary
FROM departments d JOIN employees e
ON d.department_id = e.department_id
JOIN  (SELECT department_name, AVG(salary) avgsal
 FROM departments d JOIN employees e
 ON d.department_id = e.department_id
 GROUP BY department_name) dept_avgsal
ON d.department_name = dept_avgsal.department_name
WHERE dept_avgsal.avgsal > salary
:

6. 직무별로 최대 급여를 받는 사원의 정보

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:48

직무별로 최대 급여를 받는 사원의 정보를 얻어 보자.

사번 사원이름 직무 급여

1) 직무별로 최대 급여가 얼마냐?

SELECT job_title, MAX(salary)
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
GROUP BY job_title;

2) 해당 직무에 최대 급여를 받는 사원은 누구?

SELECT job_title, employee_id
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
WHERE (job_title, salary) IN
 (SELECT job_title, MAX(salary)
 FROM employees e JOIN jobs j
 ON e.job_id = j.job_id
 GROUP BY job_title)
:

5. 평균 급여보다 많이 받는 사원의 수

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:47

평균 급여보다 많이 받는 사원의 수는 몇 명인가?

1) 사원의 평균 급여를 얻는다.

SELECT AVG(salary)
FROM employees;

6461.68224 

2) 평균 급여보다 많이 받는 사원의 수를 얻는다.

SELECT COUNT(employee_id)
FROM employees
WHERE salary > 6461.68224;

SELECT COUNT(employee_id)
FROM employees
WHERE salary >
 (SELECT AVG(salary)
  FROM employees)

:

4. 사원 자신의 매니저 정보

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:45

사원 자신의 매니저 정보를 얻자.

사번 사원이름 매니저이름

SELECT e.employee_id, e.last_name, m.last_name
FROM employees e JOIN employees m
ON e.manager_id = m.employee_id;

:

3. 지역별로 소속되어 있는 사원 수의 합

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:43

지역별로 소속되어 있는 사원 수의 합을 나타내자.

결과

지역   사원 수
Europe
Americas
Asia
Middle East and Africa


 

SELECT region_name, COUNT(employee_id)
FROM employees e JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON l.location_id = d.location_id
JOIN countries c
ON c.country_id = l.country_id
JOIN regions r
ON r.region_id = c.region_id
GROUP BY region_name;

SELECT region_name, COUNT(employee_id)
FROM employees e JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON l.location_id = d.location_id
JOIN countries c
ON c.country_id = l.country_id
RIGHT OUTER JOIN regions r
ON r.region_id = c.region_id
GROUP BY region_name;


 

:

2. 사원 'SEO JOHN'의 직무와 정보

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:40

사원 'SEO JOHN'의 직무는 무엇인가?

SELECT job_title
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
WHERE UPPER(last_name) = 'SEO'
AND UPPER(first_name) = 'JOHN';


사원 'SEO JOHN'의 정보를 얻자.

사번 사원이름 부서이름 직무이름

SELECT employee_id, last_name, department_name, job_title
FROM jobs j JOIN employees e
ON j.job_id = e.job_id
JOIN departments d
ON d.department_id = e.department_id
WHERE UPPER(last_name) = 'SEO'
AND UPPER(first_name) = 'JOHN';

:

1. 사원 'SEO JOHN'의 정보를 얻자

STUDY/ORACLE_SQL_2일차 2007. 6. 22. 13:33

사원 'SEO JOHN'의 정보를 얻자

사원, 사원이름, 부서이름

1) 사원 테이블로부터 사번, 사원이름, 부서 아이디를 얻는다.

SELECT employee_id, last_name, department_id
FROM employees
WHERE UPPER(last_name) = 'SEO'
AND UPPER(first_name) = 'JOHN'

2) 사원 테이블의 부서 아이디를 참고하여
   부서 테이블로부터 부서 이름을 얻는다.

SELECT department_name
FROM departments
WHERE department_id = 50

두개를 합하면

SELECT employee_id, last_name, department_name
FROM employees, departments
WHERE UPPER(last_name) = 'SEO'
AND UPPER(first_name) = 'JOHN'
AND employess.department_id = departments.department_id;

join 으로 다듬기 (가독성 향상)

SELECT employee_id, last_name, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE UPPER(last_name) = 'SEO'
AND UPPER(first_name) = 'JOHN';

:

clone()의 구현

JAVA/기본 2007. 5. 29. 20:36

▣ Object 의 clone() 메서드의 접근

1. clone() 메서드의 접근지정자가 protected로 외부 접근이 불가능하기 때문에, 내부에서 재정의 한 후 super로 접근해야 한다.

2. 재정의된  public 메서드의 이름이 clone()이라면 메서드의 이름이 충돌하기 때문에 super.clone()을 사용해서 object()의 clone()을 호출한다.

▣ 객체복사 방법

1. 이미 구현된 Cloneable 인터페이스의 clone() 메서드 사용

2. Cloneable 인터페이스를 직접 구현


public class ArrayParam extends Object implements Cloneable{
 
  //메서드
 public int[] copyArray(int[] src) {
  int[] des = (int[])src.clone();

/*  int[] des = new int[src.length];
  for(int i =0; i<src.length; i++)
   des[i] = src[i];
*/
  return des;
 }
  //clone메서드 재정의
 public Object clone() throws CloneNotSupportedException{
  return super.clone();

 }
}



public class Test {

 public static void main(String args[]) throws CloneNotSupportedException{
  int[] source = new int[]{1,2,3,4,5};
  ArrayParam p = new ArrayParam();
 
  int[] result = p.copyArray(source);
  for(int i =0; i<result.length ;i++){
   System.out.println("result["+i+"] : " + result[i]);
  }
 
  System.out.println();
 
  source[0] = 5;
  for(int i =0; i<source.length ;i++){
   System.out.println("source["+i+"] : " + source[i]);
  }

  //두개의 헤쉬코드는 틀림
  System.out.println(result.hashCode());
  System.out.println(source.hashCode());
 
 
  //객체로 한번 클론을 만들어보자..
  ArrayParam test1 = new ArrayParam();
  ArrayParam test2 = (ArrayParam)test1.clone();
 
  //이 두놈의 헤쉬 코드도 틀림
  System.out.println(test1.hashCode());
  System.out.println(test2.hashCode());
 
 }
}

결과
result[0] : 1
result[1] : 2
result[2] : 3
result[3] : 4
result[4] : 5
source[0] : 5
source[1] : 2
source[2] : 3
source[3] : 4
source[4] : 5
8187137
28050664
7754385
2548785

API에서는 클론을 사용하더라도 얕은복사(Shallow Copy)가 이루어 진다고 했는데 위의 테스트로서는 해쉬코드가 틀리기 때문에 깊은 복사로 나타났다.
clone()의 내부 알고리즘은 무엇일까....ㅡ_ㅡ

:

배열의 복사

JAVA/기본 2007. 5. 29. 15:26

배열은 객체 => 배열의 이름은 참조값
그러므로 당연히 할당은 참조값 복사 (같이 가르키고 있게 됨)


int[] 1학기점수 = new int[]{100, 90, 90, 30};
int[] 2학기점수 = 1학기점수; //참조값 복사




메모리 차원에서의 배열 복사

1. 부분배열 복사
System.arraycopy() 메서드를 이용

int[] source = new int[]{5, 4, 6, 9, 7, 9};
int[] target = {100, 200, 300, 400, 500, 600, 700};

System.arraycopy(source, 2, target, 3, 4};

결과
target[0]:100
target[1]:200
target[2]:300
target[3]:6
target[4]:9
target[5]:7
target[6]:9


2. 전체배열 복사
배열의 속성 clone() 메서드를 이용

int[] source = new int[]{5, 4, 6, 9, 7, 9};
int[] target = (int[])source.clone();

clone() 메서드는 메모리를 복사해서 Object형 객체를 리턴해주는 메서드
:

C#과 Java언어 비교(12) - Select Statement, Predefined types

C# and JAVA 2007. 5. 29. 11:27

http://genamics.com/developer/csharp_comparative_part10.htm

16.
선택문

C# 여러분이 정수형, 문자(char), 열거형(enum) 혹은 (C++이나 Java와는 달리) 문자열로 switch 문을 제어할 있도록 해준다. Java C++에서 여러분이 case 문장을 break 이용하여 빠져나올 경우 여러분은 이미 실행되고 있는 다른 case 문장에 대한 책임을 져야한다. 나는 이렇게 드물지만 에러를 유발할 있는 것을 Java C++에서 기본 동작으로 만들어 놓았는지 모르겠지만, C#에서는 이렇게 하지 않는 것을 보니 기쁘다.

17. 기정의된(predefined) 타입

C# 원형 타입들은 Java에만 추가되어 있는 unsigned 제외하고는 기본적으로 모두 동일하다. C#에는 sbyte, byte, short, ushort, int, uint, long, ulong, char, float double 있다. 여기서 유일하게 놀라운 점은 최신 프로세서를 이용할 있는 12바이트 십진”(decimal) 부동 소수점 숫자가 있다는 것이다.

: