728x90

 

SELECT

데이터 ’조회’

SELECT 컬럼명 FROM 테이블명;

방법1
SELECT EMP_ID,EMP_NAME,SALARY FROM EMPLOYEE;

방법2
SELECT EMP_ID,EMP_NAME, SALARY
FROM EMPLOYEE;

 

SELECT 컬럼명 -- 조회하고자 하는 컬럼명 기술
FROM 테이블명 -- 조회하고자 하는 컬림이 포함된 테이블명 기술
WHERE 조건식; -- 행을 선택하는 조건 기술, 조건을 만족하는 행만 반환
                     -- 조건식 복수로 붙여서 사용가능. 복수라도 WHERE절 한개만 기술

 

한 테이블의 모든 정보 조회

--EMPLOYEE 테이블의 모든 정보 조회
방법1
SELECT EMP_ID,EMP_NAME, EMP_NO, EMAIL, PHONE, DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY,
        BONUS, MANAGER_ID, HIRE_DATE, ENT_DATE, ENT_YN FROM EMPLOYEE ;
 
방법2
SELECT * -- * : 전체
FROM EMPLOYEE;

 


 

 DISTINCT

중복제거

DISTINCT는 한번만 쓸 수 있다

-- DISTINCT : 중복제거
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 직원의 부서 코드를 중복 없이 조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;

-- DISTINCT는 한번만 쓸 수 있다
--SELECT DISTINCT DEPT_CODE, DISTINCT DEPT_CODE -- ERROR
--FROM EMPLOYEE;

 

DISTINCT A,B 콤마로 같이 쓰면 ()로 묶은 효과 발생

콤마로 두 컬럼을 묶으면 두 컬럼의 조건이

AND조건으로 교집합 된 것만 중복 제거한다

SELECT DISTINCT DEPT_CODE, JOB_CODE -- 콤마로 두 컬럼을 묶으면 두 컬럼의 조건이  
FROM EMPLOYEE;                      -- AND조건으로 교집합 된 것만 중복 제거한다

 


 

리터럴(literal)

값 자체

싱글쿼테이션( ' ' )

오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다

컬럼 별칭

컬럼명  AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”

별칭 : "" 

쌍따옴표( “”)를 무조건 붙여야하는 조건

1)별칭에 특수문자가 들어갈 경우
2)별칭이 숫자로 시작할 경우
쌍따옴표 = 더블 쿼테이션(” ”)
    EX) 직원 명 ←띄어쓰기 공백 특수문자라 “직원 명”으로 적어줘야한다
    EX) SALARY*12 AS 연봉

 

-- EMPLOYEE 테이블에서 직원의 직원 번호, 사원명, 급여, 단위 조회
SELECT EMP_ID, EMP_NAME, SALARY, '원' "단위"
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, SALARY, '원입니다' "단위"
FROM EMPLOYEE;
-- 별칭 : "" 
-- 리터럴을 싱글쿼테이션으로 처리한다 : ' '
-- '원'이라는 컬럼을 보여주고 싶지않으면 더블쿼테이션""으로 단위써주자

 




비교연산자

>, <, >=, <=, = ,!= 

크다, 작다, 크거나 같다
같다 : =
같지않다 : != , ^= , <>

--EMPLOYEE테이블에서 부서코드가 'D9'인 직원의 이름, 부서코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9'; 
-- '' 없이 D9만 쓰면 컬럼으로 인지하게 됨
-- 'd9'라고 써도 안됨. 리터럴은 대소문자 구분


-- 급여가 4000000이상인 직원의 이름, 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= '4000000'; -- ''로 감싸도 숫자로 인지잘한다. '' 없어도 됨

-- EMPLOYEE테이블에서 부서코드가 D9이 아닌 사원의 사번, 이름, 부서코드조회
SELECT EMP_NO, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9'; -- != //  ''이랑 대소문자 구별 주의
WHERE DEPT_CODE ^= 'D9'; -- ^=
WHERE DEPT_CODE <> 'D9'; -- <>

 

 

 

전체코드

-- 컬럼 별칭
-- 컬럼명  AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”
SELECT EMP_NAME "직원 명", SALARY * 12 급여,SALARY *(1+BONUS)*12 총수령액, SALARY *(1+BONUS)*12 - SALARY*12*0.03 실수령액
FROM EMPLOYEE;

SELECT EMP_NAME,HIRE_DATE, SYSDATE-HIRE_DATE AS 근무일수
FROM EMPLOYEE;


/*
리터럴(literal)
값 자체 ‘ ‘

오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다
데이터 타입에 상관없이 별칭(””) 외에는 다 싱글쿼테이션으로 감싼다
*/ 

-- EMPLOYEE 테이블에서 직원의 직원 번호, 사원명, 급여, 단위 조회
SELECT EMP_ID, EMP_NAME, SALARY, '원' "단위"
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, SALARY, '원입니다' "단위"
FROM EMPLOYEE;
-- 별칭 : "" 
-- 리터럴을 싱글쿼테이션으로 처리한다 : ' '
-- '원'이라는 컬럼을 보여주고 싶지않으면 더블쿼테이션""으로 단위써주자

-- EMPLOYEE테이블에서 직원의 직급 코드 조회
SELECT JOB_CODE, '직급코드'
FROM EMPLOYEE;

select emp_name, email
from employee
where email like 'bang%'; -- bang으로 시작하는 email 다 조회
-- 결과 : 방명수 bang ns@kh.kr
-- 오라클은 대소문자 구분안해서 소문자로 써도 되나 리터럴에서는 엄격히 구분하기에 주의

SELECT EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE 'BANG%';
-- 결과 : 없음
-- 리터럴은 대소문자 철저히 구별하기에 대문자 BANG으로 시작하는 EMAIL이 없어서 안나온 것



------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------



-- DISTINCT : 중복제거
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 직원의 부서 코드를 중복 없이 조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;

-- DISTINCT는 한번만 쓸 수 있다
--SELECT DISTINCT DEPT_CODE, DISTINCT DEPT_CODE
--FROM EMPLOYEE;

SELECT DISTINCT DEPT_CODE, DEPT_CODE
FROM EMPLOYEE;


/*
SELECT 컬럼명 -- 조회하고자 하는 컬럼명 기술
FROM 테이블명 -- 조회하고자 하는 컬림이 포함된 테이블명 기술
WHERE 조건식; -- 행을 선택하는 조건 기술, 조건을 만족하는 행만 반환
             -- 조건식 복수로 붙여서 사용가능. 복수라도 WHERE절 한개만 기술




------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------



-- 비교연산자
>, <, >=, <=, = ,!= 

크다, 작다, 크거나 같다
같다 : =
같지않다 : != , ^= , <>
*/
--EMPLOYEE테이블에서 부서코드가 'D9'인 직원의 이름, 부서코드 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9'; 
-- '' 없이 D9만 쓰면 컬럼으로 인지하게 됨
-- 'd9'라고 써도 안됨. 리터럴은 대소문자 구분


-- 급여가 4000000이상인 직원의 이름, 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= '4000000'; -- ''로 감싸도 숫자로 인지잘한다. '' 없어도 됨

-- EMPLOYEE테이블에서 부서코드가 D9이 아닌 사원의 사번, 이름, 부서코드조회
SELECT EMP_NO, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9'; -- != //  ''이랑 대소문자 구별 주의
WHERE DEPT_CODE ^= 'D9'; -- ^=
WHERE DEPT_CODE <> 'D9'; -- <>

-- EMPLOYEE 테이블에서 퇴사 여부가 N인 직원을 조회하고 근무 여부를 재직중으로 표시
-- 사번,이름, 고용일, 근무여부 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE, '재직중' "근무여부"
FROM EMPLOYEE 
WHERE ENT_YN = 'N';


-------------- 실습문제 --------------
--1.EMPLOYEE테이블에서 월급이 3000000이상인 사원의 이름, 월급, 고용일 조회
--2.EMPLOYEE테이블에서 SAL_LEVEL이 S1인 사원의 이름, 월급, 고용일, 연락처 조회
--3.EMPLOYEE테이블에서 실수령액(총수령액-(연봉*세금3%))이 5천만원 이상인 
--  사원의 이름, 급여, 실수령액, 고용일 조회


--1.EMPLOYEE테이블에서 월급이 3000000이상인 사원의 이름, 월급, 고용일 조회
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE SALARY >= 3000000;

--2.EMPLOYEE테이블에서 SAL_LEVEL이 S1인 사원의 이름, 월급, 고용일, 연락처 조회
SELECT EMP_NAME, SALARY, HIRE_DATE, PHONE
FROM EMPLOYEE
WHERE SAL_LEVEL = 'S1';

--3.EMPLOYEE테이블에서 실수령액(총수령액-(연봉*세금3%))이 5천만원 이상인 
--  사원의 이름, 급여, 실수령액, 고용일 조회
SELECT EMP_NAME 이름, SALARY "급여", SALARY *(1+BONUS)*12 - SALARY*12*0.03 AS 실수령액, HIRE_DATE AS "고용일"
FROM EMPLOYEE
WHERE SALARY *(1+BONUS)*12 - SALARY*12*0.03 >= 5000000;
-- 컬럼 산술연산으로 뽑아낸 값을 조건식의 기준 데이터에 사용가능

 

 

 

 

 

728x90
반응형
728x90

 

ch6-38 변수의 초기화

<변수의 초기화>

지역변수(lv)는 수동 초기화 해야함

멤버변수(iv,cv)는 자동초기화된다

 

지역변수(lv)는 수동 초기화 해야함

class InitTest {
    int x;        // 인스턴수변수(iv)
		int y = x;    // 인스턴스변수(iv)
   
    void method1() {
         int i;      // 지역변수
         int j = i;  // error : 지역변수를 초기화하지 않고 사용해서
    }
}

i의 모르는 값을 j의 모르는 값에 넣을려고 하니 에러난 것

 

수동초기화 해야하는 이유

호출 스택 메모리

계속 쌓였다가 없어졌다 한다(재사용이 빈번한 메모리)

계속 같은 공간을 여기저기서 사용한다

메소드가 호출될 때마다 이 공간을 0으로 초기화하면 성능저하됨

이를 방지하기 위해서 항상 0으로 초기화하는게 아닌 새로운 값으로 초기화한다

지역변수는 메소드가 호출되서 작업하는 동안만 존재하기에 생명 주기가 굉장히 짧다(메소드는 빨리 실행되고 제거되는게 좋다)

옛날 다른 메소드가 쓰던 값을 새로운 값으로 초기화하는데 다른 메소드가 쓰던 값을 뭔지 모르는데 그 값을 덮어쓰는거고 그래서 수동 초기화 해야만함

인스턴스 변수는 유지기간이 비교적 길어서 초기화하고 쓴다(자동초기화)

인스턴스 변수(자동초기화)

 

 

멤버변수(iv,cv)는 자동초기화된다

class InitTest {
    int x;        // 인스턴수변수(iv)
		int y = x;    // 인스턴스변수(iv)

InitTest it = new InitTest();

 

 

데이터타입 별 초기화 값

 

 


 

 

 

 

ch6-39 멤버변수의 초기화

<멤버변수의 초기화>

1.명시적 초기화(=)

2.초기화 블럭 { }

3.생성자

 

 

1.명시적 초기화(=)

대입연산자(=) 이용

간단한 초기화 방법

 

1)기본형(primitive type) 변수의 초기화

int door = 4;

 

2)참조형(reference type) 변수의 초기화

Engine e = new Engine();

참조형 변수가 가질 수 있는 값

  • null or 객체주소
  • 기본값은 nul

참조형은 객체를 만들어넣어줘야한다

객체를 만들어 값을 넣어주면서 초기화해야함

 

2.초기화 블럭

복잡한 초기화

여러문장 넣기

(여러문장이 필요하면 대입연산자로는 불가능)

  • 인스턴스 초기화 블럭 : { }
  • 클래스 초기화 블럭 : static { }

 

3.생성자

iv초기화

복잡한 초기화에 사용

 

 

멤버변수 cv, iv 초기화의 3가지 방법

1.자동초기화 : 자동

2.간단초기화 : 대입연산자 =

3.복잡초기화 : { }, static { } , 생성자

  • cv 초기화에는 static { }
  • iv 초기화에는 생성자. // {}도 쓰긴하나 거의안씀

 

위의 이미지는 명시적 초기화로 간단하게 배열 생성 및 초기화하고 초기화블럭 static {}을 사용해서 cv 복잡초기화로 배열 안에 값을 for문 이용하여 채운 것

 

 

 

멤버변수 초기화 시점

1.클래스 변수 초기화 시점

클래스가 처음 로딩될 때 한번(메모리에 올라갈 때)

2.인스턴스 변수 초기화 시점

인스턴스가 생성될 때 마다

 

 

멤버변수 초기화 순서

 

 

 

 

728x90
반응형
728x90

문제

 

 

<풀이과정>

 

 

728x90
반응형
728x90

문제

 

 

<풀이과정>

 

 

728x90
반응형

+ Recent posts