목록분류 전체보기 (269)
Coding Planet
✨ 문제 💻코드 👩💻 풀이 방법 INNER JOIN을 사용해서 REST_ID를 기준으로 표를 결합했다. 집합함수로 평균을 구하고 ROUND로 반올림을 했다 -> 반올림 함수의 '2', 숫자는 소수점 3번째 자리에서 반올림해 2자리를 남긴다는 의미이다. 🔔 느낀점 ORA-00937: not a single-group group function 오류가 한번 발생했다. 집계함수를 사용했기 때문에 GROUP BY절을 만들어야하는데 원칙상 SELECT 절에 들어간 모든 컬럼을 기재했어야 하지만 집계합수가 사용된 REVIEW만 적어서 발생한 오류이다.
✨ 문제 💻SQL 👩💻 풀이 방법 서브쿼리가 FROM 절 안에서 사용되는 경우 해당 서브쿼리를 '인라인뷰'라고 한다. 처음 문제를 분석할 때는 서브쿼리를 사용하는 것이 아니라 ONLINE_SALE과 OFFLINE_SALE을 각자 SELECT문으로 만들고 UNION ALL을 하거나 조인을 사용하는 방법을 생각했다. 그렇지만 문제의 의도를 전체적으로 보여주기 위해서는 인라뷰인뷰 형식으로 하는 것이 깔끔하여 가독성이 높다고 생각했다. OFFLINE_SALE에는 USER_ID 컬럼이 존재하지 않기 때문에 SELECT절에 NULL로 지정했다. 🔔 느낀점 프로그래머스에서 문제를 풀 때 코드를 작성하는 것보다 문제의 의도를 파악하고 쿼리를 설계하는 것이 더 중요하다는 생각이 들었다. 현재 초보적인 수준에서 연습하고..
✨ 문제 💻SQL 👩💻 풀이 방법 GROUP BY절은 데이터들을 원하는 그룹으로 나눌 수 있다. USER_ID 별, PRODUCT_ID별로 재구매 데이터를 요구했으므로 이 두 컬럼을 기준으로 그룹화 한다. 사실 GROUP BY와 DISTINCT는 ORACLE 10G 이후로 HASH를 이용해 데이터를 처리하므로 기능적으로는 동일하다. 하지만 집계함수와 사용할 경우 GROUP BY절을 이용하는 것이 적절하다. WHERE 절에서는 집계함수를 사용해 줄 수 없기 때문에 HAVING절을 통해 집계함수를 통해 조건비교를 해야한다. HAVING절은 GROUP BY절과 함꼐 사용된다. 🔔 느낀점 GROUP BY를 통해 중복을 제거하여 그룹핑을 하고 HAVING절을 이용해 조건비교를 하는 기본적인 문제이다.
Java, data modeling에서 심심치 않게 등장하는 Mapping 매번 어림짐작하고 넘어갔는데 그 의미를 나름대로 공부하며 정리하고자 한다 1. 수학적 개념 함수와 비슷하지만 함수를 일반화한 개념이다. 함수와 마찬가지로 두 집합 X, Y가 존재할 때 집합 X의 각원소 x를 집합 Y의 하나의 원소 y로 대응시키는 관계를 말한다. 대응, 변환 또는 함수라고 한다. 깊게 들어가면 대응, 변환, 함수, 사상을 구분하여 관습적으로 사용하는 것 같은데 이 부분은 정확히 이해하기는 어려우므로 좀 더 일반화된 형태의 함수라고 이해하고 넘어간다. 2. 자바에서의 Mapping 처음 Map이라는 개념을 자바에서 공부할 때 당연히 '지도'라고 생각했다. 그러나 자바의 자료구조를 공부할수록 Map의 형태는 지도처럼 ..
1. ORACLE DBMS에서 만든 INDEX JDBC에서 사용하기 생성: CREATE INDEX 인덱스명 ON 테이블명(컬럼명); ->인덱스명은 임의로 생성한다 IND_NAME, IDX_NAME 조회하기 :SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '인덱스명'; 삭제하기: DROP INDEX 인덱스명; 인덱스명 수정하기: DROP INDEX 기존 인덱스명 TO 바뀔 인덱스명 컬럼수정은 불가. 인덱스 DROP 후 새로 CREATE해야함 1. 테스트용 테이블 만들기_EMPNO만 복사해오기 2. 인덱스 생성문을 이클립스에서 메소드로 만들기 2. ORACLE DBMS에서 만든 VIEW JDBC에서 사용하기 뷰란? 실체가 없는 테이블, 다른 테이블에 접근하기 위한 테..
예외처리를 위해서는 보통 try~catch~finally를 사용하는 것이 기본적이다. 이외에도 throws를 통해 특정 예외가 발생 경우에 실행할 명령어를 catch블럭에 작성하지 않고도 예외처리를 할 수 있다. 1. throws try~catch 예외처리 시 메소드마다 try~catch를 사용해 예외처리를 해주는데 메소드를 호출한 곳(일반적으로 main())에서 예외처리를 해주는 방식이다. 예외가 발생했을 때 예외를 일으키는 메소드를 호출한 메소드로 예외를 넘기고 책임을 전가하는 방법 throws를 메서드 선언부에 명시해 주어서 예외가 발생할 가능성이 있는 코드가 있다는 것을 알려준다 또한, 발생 가능한 예외를 특정 메서드에서 한 번에 처리해 주기 때문에 관리가 용이하다. 일반적으로 main() 메소드..
1. JDBC Statement와 PreparedStatement * JDBC의 DB접근 플로우 *JDBC 컴포넌트의 상호작용 (출처: [DataBase] JDBC란 ? (velog.io)) 1. DriveManager 데이터 원본에 JDBC 드라이버를 통하여 커넥션을 만드는 역할을 한다. ClassforName()메소드를 통해 생성되며, 반드시 예외처리를 해야한다. 직접 객체 생성이 불가능하고, getConnection()메소드를 통해서 객체를 생성할 수 있다. 데이터베이스 벤더들이 JDBC API를 구현한 드라이버를 관리하고 DriveManager.getConnection()의 인자로 들어오는 특정값에 따라서 해당 특정 값에 해당되는 데이터벤더가 구현한 Conncection 타입의 객체를 반환한다. ..
1. 오류발생 경로 이미 생성된 시퀀스의 MAXVALUE를 변경하던 와중 MAXVALUE가 특정 값 이하로 설정 될 경우 오류가 발생 2. 발생원인 MAXVALUE로 설정한 값이 CACHE로 할당된 값에 비해 너무 작아서 문제가 발생 CASHE는 처리속도를 증가시키기 위해 SEQUENCE 번호를 한 번에 여러 개씩 메모리에 올려놓고 작업을 한다. 이러한 방법이 매번 SEQUENCE 번호를 생성하는 것보다 빠르기 때문이다. ( https://denodo1.tistory.com/273) CASHE 옵션이 아래 그림과 같이 20개씩 번호를 생성하도록 설정되어 있다면 한번에 1에서 20번까지의 시퀀스가 생성된다. 그런데 아래와 같이 MACVALUE를 70으로 설정할 경우 CACHE 설정값에 한참 못 미치게 된다..