|
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
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)
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)
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;
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;
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';
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';
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# 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) 부동 소수점 숫자가 있다는 것이다.
|