대덕240910 자바:참조 타입,변수/DB:기타 연산자
<1~4교시 자바>
참조 타입과 참조 변수
참조타입이란 객체라는 덩어리를 다른 주소에로 저장해놓고 해당 주소를 값 대신 주소값으로 가지는 변수이다
*문자열도 참조 타입이다, 기본 변수로 지정하기엔 단어가 길어질 수 있기에
메모리 영역
메소드 영역:실제 코드 작성 영역
힙 영역: 참조형 데이터의 실제 데이터 저장공간
스택:입구와 출구가 같다=데이터가 차곡차곡 쌓인다(먼저 들어간 데이터가 제일 나중에 나온다)(first in last out)
프레임마다 독립적인 영역을 가진다
메소드를 호출할 때마다 프레임이 추가되고, 메소드가 종료되면 해당 프레임이 제거
정해진 범위(블록)을 벗어나면 사라지기 때문에 해당 블록에서만 사용가능
참조타입 변수간 동일 객체를 참조하는지, 다른 객체를 참조하는지 알아보고자 할 떄에는
' == ', ' != ' 연산을 이용한다
참조변수를 작성하고는 싶은데 안에 아무 객체도 지정(참조)하고싶지 않을 때 null을 사용한다
*null 값은 처음부터 지정할 수도 있고 나중에 객체의 값을 지우면서 지정도 가능하다
*참조를 잃은 String객체는 쓰레기 수집기(Garbage Collector)를 통해 메모리에서 자동 제거한다
*참조 대상이 없기에 해당 변수의 데이터를 사용하고자 할 때 에러 발생(NullPointException)
문자열 리터럴 동일한 경우 같은 String 객체를 공유
new 연산자 사용시 새로운 String 객체 생성 이 둘을 == 비교연산해보면 다른 것으로 나온다. 서로 객체가 다르기 때문이다
*equals 연산자 사용시 단순 문자열의 내용을 가지고 비교 가능, 따라서 문자열의 비교에 자주 사용된다
배열
많은 양의 데이터를 적은 코드로 처리하면서 손쉽게 접근할 수 있게 해준다
데이터를 연속된 공간(heap)에 나열하고 각 데이터에 인덱스(Index)(첨자)를 부여한 자료구조
같은 타입의 데이터만 저장할 수 있음
*한 번 생성된 배열은 길이를 늘리거나 줄일 수 없음
new 연산자를 입력하면 기본값이 초기값으로 설정된다.
배열 변수 선언 후에는 변수값 변경 불가
배열 변수 미리 선언한 후 값 목록이 나중에 결정되는 경우 연산자를 사용하여 값 목록 지정 가능
배열 생성 후 다음과 같이 특정 인덱스 위치에 새 값 저장 가능
<5~8교시 DB>
연산자
기타 연산자
1
2
3
4
5
6
7
8
|
<회원테이블에서 회원 중 '김'씨에서 '박'씨까지
회원번호,회원명,마일리지>
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MJY.MEMBER
WHERE SUBSTR(MEM_NAME,1,1) BETWEEN '김' AND '박'
ORDER BY 2;
|
cs |
BETWEEN)
expr BETWEEN 값1 AND 값2
1
2
3
4
5
6
7
|
-2020년 6월의 판매정보를 조회하시오(날짜,상품코드,구매회원번호,수량)
SELECT TO_DATE(SUBSTR(CART_NO,1,8)) AS 날짜,
PROD_ID AS 상품코드,
MEM_ID AS 구매회원번호,
CART_QTY AS 수량
FROM MJY.CART
WHERE CART_NO LIKE '202006%';
|
cs |
LIKE)
문자열 연산자(문자 전용), 패턴을 비교할 때 사용
'%' : 길이와 상관없이 모든 문자 데이터을 의미(Null도 포함)
'_':어떤 값이든 상관없이 한 개의 문자 데이터를 의미
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
2024-0910-03)기타연산자(IN, ANY, SOME, ALL)
- 불규칙적이거나 불연속적인 복수개의 값을 비교할때 사용
1) IN
. '=' 기능을 보유한 연산자
. OR 연산자로 바꾸어 기술할 수 있음
사용형식)
컬럼명 IN(값1,값2,... 값n)
- '컬럼명'의 값이 '값1'이거나, '값2'이거나 또는 '값n'이면 참(true)를 반환
사용예)HR 계정에서 20, 40, 90번 부서에 속한 사원을 조회하시오(사원번호,사원명,부서번호,직책)
(OR 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
JOB_ID AS 직책
FROM HR.EMPLOYEES
--WHERE DEPARTMENT_ID=20
--OR DEPARTMENT_ID=40
--OR DEPARTMENT_ID=90
--WHERE DEPARTMENT_ID IN(20,40,90)
WHERE DEPARTMENT_ID = ANY(20,40,90);
ORDER BY 3;
|
cs |
다중행연산자!
IN)
'='으로서의 기능뿐
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
2) ANY(SOME)
. 관계 연산자와 같이 사용해야 함
. '=' 연산자를 사용한 ANY(SOME)연산자는 IN으로 바꾸어 기술할 수 있음
사용형식)
컬럼명 관계연산자 ANY|SOME(값1,값2,... 값n)
- '컬럼명'의 값이 어느 하나라도 '관계연산자'를 만족하면 참(true)를 반환
사용예) 마일리지가 2000, 3000, 4000 중 어느 하나보다 많은 회원정보 조회
Alias는 회원번호,회원명,마일리지
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MJY.MEMBER
WHERE MEM_MILEAGE >ANY(2000,3000,4000)
ORDER BY 3;
(OR 연산자 사용)
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MJY.MEMBER
WHERE MEM_MILEAGE >2000
OR MEM_MILEAGE > 3000
OR MEM_MILEAGE > 4000
ORDER BY 3;
|
cs |
ANY,SOME)
여러개 중 하나만 만족하면 성립(OR와 비슷)
=ANY은 IN과 같다
관계연산자가 필수이며, 이 관계연산자는 ANY,SOME 왼편에 붙여 사용한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
3) ALL
- 기술된 필드가 여러 개의 값 전부와 사용된 관계연산자를 만족하는지 살펴보기 위한 연산자
- 관계 연산자 중 '=' 사용할 수 없다.
사용예) 사원테이블에서 20,30,70번 모든 부서를 가진 사원정보
SELECT *
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID = ALL(20,30,70);
SELECT MEM_ID, MEM_NAME, MEM_MILEAGE
FROM MJY.MEMBER
WHERE MEM_MILEAGE < ALL(2000,3000,4000)
ORDER BY 3 DESC;
SELECT MEM_ID, MEM_NAME, MEM_MILEAGE
FROM MJY.MEMBER
WHERE MEM_MILEAGE <2000
AND MEM_MILEAGE <3000
AND MEM_MILEAGE <4000
ORDER BY 3 DESC;
|
cs |
ALL)
전부 만족하면 성립(AND와 비슷)
'='기호 성립불가
연산자 왼쪽에는 컬럼이기 때문에 딱 하나밖에 올 수밖에 없다. 때문에 서브쿼리를 이용해 연산자 오른쪽의 여러 값과 비교할 떄에는 다음과 같은 다중행 연산자를 사용한다