목록DB, SQL (22)
Coding Planet
어떠한 테이블에서 문자열을 가지고와 다른 테이블을 수정한다면 일반적으로 select문으로 해당 값을 조회하고 update문을 작성하면 그만이다. 하지만 만약 이러한 작업이 여러번 이루어져야 한다면? 예를들어 `employee` 테이블에서 직원의 직무(`job_title`)를 가져와서 `employee_salary` 테이블의 급여 설명(`salary_description`)을 업데이트하는 로직을 생각해보자 일반적인 작업은 'employee'테이블에서 job_title을 조회하고 이 값을 이용하여 `employee_salary` 테이블을 업데이트하는 `UPDATE` 문을 작성한다.- `employee` 테이블: 직원 정보를 저장하는 테이블- `employee_salary` 테이블: 직원의 급여 정보를 저장..
아래와 같이 application.properties에서 데이터베이스 연결 설정을 했다. # H2 spring.datasource.url=jdbc:h2:file:C:/Users/Hyeonjeong.Jeon/test/test spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= # H2 spring.h2.console.enabled=true spring.h2.console.path=/h2-console # create > 기존 테이블 삭제하고 자동 재성성, update 업데이트 spring.jpa.hibernate.ddl-auto=update spring.jpa.prope..
새로운 테이블을 만들 때(tb_new) create문 단계에서 기존 테이블의 스키마(column정보)를 복사해올 수 있다. 데이터는 insert문을 통해 복사해올 수 있다. CREATE TABLE tb_new AS TABLE tb_old WITH NO DATA; INSERT INTO tb_new SELECT * FROM tb_old ; SELECT * FROM tb_new ;
| Window Function 윈도우 함수는 SQL에서 데이터 집합의 특정 '윈도우' 또는 하위 집합에 대해 계산을 수행하는 함수이다. 윈도우 함수는 그룹화와 유사하게 보일 수 있지만, 그룹화 함수가 결과 집합의 행 수를 줄이는 반면 윈도우 함수는 원래의 행 수를 유지한다. 윈도우 함수는 주로 다음과 같은 상황에서 주로 쓰인다. 누적 합계 : 각 행에 대한 이전 행들의 누적합계를 계산할 때 이동 평균 : 주어진 기간에 대한 평균값을 계산할 때 순위 부여 : 결과의 각 행에 순위를 부여할 때 - 윈도우 함수의 형식 () OVER ( PARTITION BY -- (선택적) 같은 값의 행들을 나누기 위해 사용 ORDER BY -- (선택적) 행들을 어떤 순서로 정렬할지 지정 -- (선택적) 특정 범위 내에서..
1. 다중 행 서브쿼리 1. ANY (=SOME) 서브 쿼리에서 여러 개의 값이 나오게 되는 경우 이 값들에 대해 어떤 한 값보다만 어떻다라고 비교할 때 사용 즉, 메인쿼리의 비교 조건이 서브쿼리의 검색 결과와 하나 이상만 일치하면 참이다. '> ANY'는 찾아진 값에 대해서 하나라도 크면 참이다. 그러므로 찾아진 값 중에서 가장 작은 값 즉, 최소값보다 크면 참이 된다. (-> ALL의 경우 최대값보다 커야한다.) SAL > ANY (500, 600, 700)은 SAL> 500 OR SAL> 600 OR SAL> 700과 동일하고 결국 SAL>500만 충족하면 된다. * 양 쪽의 SQL문은 동일한 결과를 출력한다. SELECT ename, sal FROMM emp_tbl WHERE sal > ANY (..
| START WITH ... CONNECT BYOracle SQL에서 계층적 데이터를 쿼리하는데 사용되는 구문이다. 이 구문을 사용하면 트리 또는 그래프와 같은 계층적인 관계를 가진 데이터들을 쉽게 쿼리할 수 있다. 1. START WITH:계층 구조의 시작점을 지정한다.만약 부모가 없는 노드(루트 노드)를 시작점으로 선택하려면 'START WITH parent_colum IS NULL'을 사용한다.2. CONNECT BY:부모와 자식 간의 관계를 지정한다.PRIOR 키워드는 이전 레벨의 컬럼의 참조한다.CONNECT BY PRIOR child_column = parent_column은 child_column의 값이 현재 행의 값이고, parent_colum의 값이 부모행인 값인 행을 찾는다.3. PR..
| EXISTS, NOT EXISTS EXISTS(서브쿼리)는 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건이다. 만약 한 건이라도 존재하는 경우에는 TRUE 없으면 FALSE를 반환한다. EXISTS는 서브 쿼리에 일치하는 경우가 한 건이라도 있으면 쿼리를 더 이상 수행하지 않는다. NOT EXISTS(서브쿼리)는 이와는 반대로 서브쿼리의 결과를 만족하는 값이 한 건이라도 존재하는 경우 FALSE 존재하지 않는 경우 TRUE이다. | RIGHT OUTER JOIN, LEFT OUTER JOIN RIGHT OUTER JOIN은 아우터 조인에서 사용하는 방법 중 하나이며 RIGHT JOIN으로 부르기도 한다. RIGHT OUTER JOIN은 두번째(오른쪽) 테이블의 모든 레코드와 첫 번째..
| NVL(표현식1, 표현식2) - ORACLE , ISNULL(표현식1, 표현식1) - SQL Server 표현식 1의 결과값이 null이면 표현식 2의 값을 출력한다. 단, 표현식 1과 표현식2의 데이터 타입이 같아야 한다. null 관련 가장 많이 사용되는 함수이다. | NULLIF(표현식1, 표현식2) 표현식1과 표현식2가 같으면 NULL을 같지 않으면 표현식 1을 리턴한다. ex) SELECT ENAME, EMPNO, MGR, NULLIF(MGR, 7698) AS NM FROM EMP; | COALESCE (표현식1, 표현식2,...) 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이면 NULL을 리턴한다.
CASE 표현식은 SQL에서 조건에 따라 다른 값을 반환하는 데 사용되는 조건 연산자이다. CASE 표현식에서 SEARCHED CASE와 SIMPLE CASE 두 가지 형태가 있다. | SIMPLE CASE 특정 컬럼 또는 표현식의 값에 따라 결과를 정한다. CASE 뒤에 특정 컬럼 또는 표현식이 오면 그 값이 WHEN에 지정된 값과 일치하는 지를 확인한다. 기본 형식은 아래와 같다. CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END CASE grade WHEN 'A' THEN 'Excellent' WHEN 'B' THEN 'Good' ELSE 'Average' END | SEARCHED..
문제 41. 다음 중 아래와 같은 2건의 데이터 상황에서 SQL의 수행 결과로 가장 적절한 것은? (단, 이해를 돕기 위해 ↓는 줄바꿈을 의미 -> 실제 저장값이 아님, CHR(10) : ASCII 값 -> 줄바꿈을 의미한다.) TAB1 ROWNUM C1 1 A ↓ A 2 B ↓ B ↓ B SELECT SUM(CC) FROM( SELECT(LENGTH(C1) - LENGTH(REPLACE(C1, CHR(10)))+1) CC FROM TAB1 ) 위 문제는 라인 수를 구하기 위한 문제이다. LENGTH('문자열') : 문자열의 길이를 Integer 형식으로 출력한다. ex) LENGTH('ABC') = 3 LENGTH함수는 줄바꿈 또한 한 자리로 읽는다. CHR/CHAR(ASCII번호) : 해당 ASCII..