본문 바로가기

국비과정/JAVA (기초)

20230805 (보충) 동적가변배열 & SQL(JOIN)

[ 동적가변배열 ]

 

public static void main(String[] args) { } 

메인메소드도 안에 비어있는 String 타입 배열로 받겠다고 선언되어 있다 

위처럼 선언해준 arr03은 외부배열의 길이만 정해져있기 때문에 바로 못쓴다. 

arr03.length    => 외부배열의 길이 

arr03[i].length   => 내부배열의 길이 (미정)

 

외부배열을 먼저 생성하고 내부배열까지 생성해줘야 사용가능하다.

외부배열 0번지에 스트링 4칸을 넣어줬다.

외부배열 1번지에 스트링 10칸을 넣어줬다.

 

이렇게 외부배열을 먼저 만들어주고 내부배열은 필요한 길이만큼만 각각 생성해 줄 수 있다. 

이제 for문으로 내부배열들도 전부 만들어줄건데 아래처럼 범위주의**


j의 범위를 arr03.length 로 설정해주면 

외부배열은 5칸인데 내부배열 칸의 갯수가 그 이하인 경우 배열 범위를 벗어나 오류가 난다. 


배열형태를 출력해보면

값을 넣어서 출력해보면

 

리스트 속에 리스트 넣어보는것도 한번 해보기 (얘는 길이 지정 안해줘도 되니까)


 

[ Map & HashMap ]

 

다형성 (Polymorphism) - 하나의 객체가 여러가지 타입을 가질 수 있는 것

부모타입(Map) -- 자식타입(HashMap)

 

Map은 인터페이스라 인스턴스를 발생시킬 수 없음 그래서 자식인 HashMap이 인스턴스를 발생시키고

그걸 Map의 형태로 넣어주는거.

 

코딩의 시작, TCP School

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 


int   => ( object ) =>  String으로 변환 가능 (최상위 객체인 object를 거치면 가능)

그럼 이제 최종적으로는 string타입인 10 이 들어있다.

다시 스트링인 str을 obj에 넣어주고 int로 캐스트하면 최종값은 다시 int

Stringint   => ( object ) =>  int  


인터페이스는 객체생성이 안된다. 미완성 상태이다.

추상메소드만 생성할 수 있음 (기능이 완성되지 않은 메소드_기능구현은 자식에서)

왼쪽이 HashMap  / 오른쪽이 Map 

그래서 Map은 그 자체로만 객체를 생성할 수 없다.

위의 캡쳐처럼 Map으로 인스턴스생성 시도해보면 엄청나게 많이 오버라이딩 된다.

위의 것들을 다 만들어줘야 객체생성을 할 수 있다.(그 전까지는 미완성 객체)

 


자식이 부모타입으로 들어간 형태가 다형성!!!

아래에서도 list에 들어간건 이미 hash로 형변환된 map이라고 생각하면 된다. 미완성 객체인 map이 들어간게 아님**

.getClass().getName() 으로 타입확인가능

new ~~ 로 되어있는 자식부분이 최종타입이 되는거

 

위에서도 boardList 의 타입은 ArrayList인거!!


instanceof => map01이 HashMap 타입이 맞는지 boolean으로 알려준다.

 

 

근데 Map으로 해도 true라고 나온다.


map01에 값을 넣어보자  =>  . put ( key, value )

키가 중복되면 마지막에 넣은 value값으로 업데이트된다. (key는 중복불가)

value는 중복가능

. size ()

. isEmpty () _ boolean 으로 반환

. containsKey ()  _ boolean 으로 반환

"김길동" 이라는 key가 가지고 있는 value값을 remove 할건데 

애초에 key 자체가 없으니 null이 뜬다.

 

아래처럼 key와 value 값이 둘다 일치해야 remove 적용된다.

 

. toString ()

. replace ()

 

 

key랑 value 뽑아주는데

key는 set타입으로 (순서가 없으니까) value는 collection 타입으로

         set으로 바꾼다음에 list로 넣어줘야 한다. 


entrySet () 은 key와 value를 entry 타입으로 가져와서 set에 담아서 뽑아낸다

map 안에 있는 Striing, Integer를 entry타입으로 바꿔주고 그걸 set에다가 저장

set 안에 map이 못들어가니까 중간 인터페이스로 entry를 사용해주는거

 

값을 나중에 list로 보내거나 할 때 entry 타입으로 보내는거


map02에 값을 넣어본다.


 

map02.keyset() 에서 (key값들의 set에서) key 들을 하나씩 뽑아온다.

 map02.get(key) 를 출력 => 하나씩 뽑아낸 key에 대응하는 value 값들을 출력.


sest은 중복값을 허용하지 않아서 아래처럼 같은걸 여러번 넣어줘도 한번만 들어간다.

 


 

 


[ sql ]

 

SELECT
  e.emp_no, e.dept_no, 
  d.dept_name, e.from_date, e.to_date
FROM dept_emp e LEFT JOIN departments d
ON e.dept_no = d.dept_no
LIMIT 10;

 

 dept_emp 의 전체 내용을 다 뽑아내서

JOIN을 이용해 조건을 만족하는 departments 의 몇개의 요소들을 붙여서 한꺼번에 가져올거다.

dept_emp 가 departments  를 참조하고 있는 형태.


 

SELECT
  e.emp_no, m.first_name, m.last_name, e.dept_no,
  e.from_date, e.to_date
FROM dept_emp e left JOIN employees m
ON e.emp_no = m.emp_no
LIMIT 10;

 

 

dept_emp 에 해당하는 위의 값들을 일단 다 뽑아낼건데 

ON ~ 조건을 만족하는 (조인으로 묶어준) employees 의 값들도 함께 뽑아낸다. (교집합을 다시 뽑아내는거)

 

 

[DB/MariaDB] SQL 예제를 통한 JOIN의 종류 파악 (tistory.com)

 

[DB/MariaDB] SQL 예제를 통한 JOIN의 종류 파악

# DB, JOIN의 종류와 SQL를 통한 JOIN 파악 [MariaDB] - 최근 수정일 : 2017.04.13 - IDE : Spring Tool Suite - OS : OSX Sierra (10.12.3) - DB : MariaDB(Ver 15.1 Distrib 10.1.17-MariaDB) ##1. 배경 DB를 사용하면 할 수록 성능최적화가

postitforhooney.tistory.com

 


세개의 테이블을 조인해보자

 

 

SELECT
  e.emp_no, m.first_name, m.last_name, e.dept_no,
  d.dept_name,
  e.from_date, e.to_date
FROM dept_emp e left JOIN employees m
ON e.emp_no = m.emp_no
JOIN departments d
ON e.dept_no = d.dept_no

 

 

헷갈린다....

JOIN 안쓰고 다른 방법으로(WHERE) 뽑아내려면 아래처럼 

 

SELECT
  e.emp_no, m.first_name, m.last_name, e.dept_no,
  d.dept_name,
  e.from_date, e.to_date
FROM dept_emp e,
    employees m,
    departments d
WHERE e.emp_no = m.emp_no
AND e.dept_no = d.dept_no