2023. 10. 12. 16:30ㆍdatabase
[참고링크] https://ribo.dev/28
[참고링크] https://turing0809.tistory.com/48
ROWNUM은 반환되는 쿼리결과의 임시 행번호이다. 그리고 반드시 1부터 시작하여 차례대로 붙여진다.
데이터를 1 ~ 10개 불러오는 경우 (WHERE ROWNUM > 0) 같은 조건이 없어도 WHERE ROWNUM <= 10 조건절로
오류없이 불러올 수 있다.
그러나 11부터 12까지의 데이터를 불러오려면 WHERE 조건절을 2번 사용한다.
페이징 ***
※ 시행착오 - ROWNUM에 별칭 rn이 있어야 페이징처럼 동작한다.
11줄에 ROWNUM에 별칭 없이 14줄, 15줄 WHERE 조건에 ROWNUM으로 조건을 설정하면 동작하지 않는다.
ROWNUM 이 임시행이기 때문에 반드시 1부터 출력되므로 15줄 WHERE ROWNUM > 10 때문에 동작하지 않으므로
ROWNUM에 별칭 rn을 설정한다(11줄). 15줄에 WHERE rn > 10으로 고치면 두 WHERE 조건에 만족하는 쿼리가 출력된다.
만약 15줄을 주석처리하면 1 ~ 12번 데이터가 출력될 것이다.
ROWNUM 값을 별칭으로 새로운 컬럼으로 만들어 외부에서 ROWNUM에 부여한 별칭을 통해 페이징 처리한다.
페이징 구현하는 다른 방법 (WHERE rn BETWEEN 4 AND 8)
UNION, 유니온
두 테이블을 위 아래로 붙인다 JOIN은 옆으로 붙이는 반면에 UNION은 위 아래로 붙여서 속성명이 같아야 한다.
LISTAGG() 사용
LISTAGG()로 tbl_employees에서 departmentid가 같은 직원이름만 묶어주었다.
departmentid가 같은지가 기준이므로 departmentid 로 GROUP BY로 묶어준다.
employeename을 묶어야 한다 . 여러 employeename이 들어가는데 그 중에서 각각 이름을 구분하기 위해
,(콤마) 를 separator로 지정한다.
LISTAGG()를 사용할 때 WITHIN GROUP() 예약어와 함께 사용해서 그룹 내에 LISTAGG()를 사용해
employeename을 합친다.
[테이블편집] 창에서 열에서 가장 왼쪽에 PK에 기본키가 되는 속성에 체크한다.
속성을 입력하고 데이터타입, 크기, 널 여부 입력한다.
마지막 ID열 클릭하고 유형 '열 시퀀스' 클릭한다.
열 시퀀스를 클릭하는 이유는 데이터를 넣을 때 survey_id 숫자가 증가하게 하기 위해 넣었다
QUESTION_ID별로 ANSWER_TEXT별로 데이터 항목 갯수 출력
(1) SELECT QUESTION_ID FROM TBL_QUESTIONS WHERE SURVEY_ID=41 -> SURVEY_ID=41 조건을 만족하는 TBL_QUESTIONS 테이블에서 QUESTION_ID 속성을 조회한다.
(2) SURVEY_ID=41인 QUESTION_ID에 해당하는 데이터를 TBL_ANSWERS 테이블에서 조회한다
쿼리로 만든 테이블을 이미 만들었던 tbl_questions 테이블과 조인하기
연결 연산자로 다른 속성에 있는 데이터 연결
'database' 카테고리의 다른 글
Oracle 17 LEFT JOIN, RIGHT JOIN, SELF JOIN (0) | 2023.10.11 |
---|---|
Oracle 16 JOIN 개념, INNER JOIN 실습, 3개 테이블 조인 (1) | 2023.10.11 |
Oracle 15 GROUP BY ~ HAVING , PARTITION BY ~ (1) | 2023.10.10 |
Oracle 14 키, 정규화 (0) | 2023.10.10 |
Oracle 13 LEAST(), GREATEST(), DECODE(), DUMP(), SYS_CONTEXT() (0) | 2023.10.10 |