본문 바로가기

자격증고나리/⚽ SQLD 슈웃

(8)
[SQL] 이전, 이후 행과 관련된 키워드(LAG, LEAD / PRECEDING, FOLLOWING) 윈도우 함수에서 범위를 정의하거나 행의 위치를 나타내는 데 사용되는 키워드 정리 LAG() 현재 행을 기준으로 이전의 행을 가리켜 값을 가져오는 키워드 LAG(column, offset, default) -- column : 값을 가져올 컬럼명, -- offset : 몇 개의 행 이전의 값을 가져올건지 ( 3행 전의 값 등등.. ) -- default : 지정된 행이 없을때 반환할 기본값 설정 LEAD() / READ() 현재 행을 기준으로 이후 행을 가리켜 값을 가져오는 키워드 LEAD(column, offset, default) -- column : 값을 가져올 컬럼명, -- offset : 몇 개의 행 이후의 값을 가져올건지 ( 3행 후의 값 등등.. ) -- default : 지정된 행이 없을때 ..
[SQL] 순위를 구하는 함수 (RANK, DENSE_RANK, ROW_NUMBER) 2023.09.07 - [자격증고나리/⚽ SQLD 슈웃] - [SQL] 상위 n개를 선택하는 윈도우 함수 (LIMIT,TOP,ROWNUM, FETCH FRIST) 앞선 포스팅에서 상위 n개의 레코드를 구하는 함수를 살펴봤는데 이번엔 비슷하지만 다른 순위를 구하는 함수에 대해 알아보자 단순히 전체 데이터중 상위 n개를 구하는 LIMIT와 같은 함수와는 달리 각 레코드 별 순위를 매겨 그 중 n등까지를 조회하는 함수로 RANK(), DENSE_RANK(), ROW_NUMBER() 세 가지가 있다 유사하지만 디테일이 조금씩 다르니 차이를 잘 알아놓는게 포인트임!! 예를 들어, 학생테이블이 다음과 같을 때 점수를 기준으로 순위를 매겨보자 홍길동, 김길동,차길동 학생의 점수가 100점으로 같을 때 순위를 매길 수..
[SQL] 상위 n개를 선택하는 윈도우 함수 (LIMIT,TOP,ROWNUM, FETCH FRIST) SQL의 윈도우 함수에는 다양한 것이 있는데, 그 중에서 전체 레코드 중 상위 n 개를 선택하는 함수에 대해 알아보자 함수를 사용하는 방법과 위치에 조금씩 차이가 있지만 기본적인 기능은 동일하다. MySQL - LIMIT -- 학생테이블의 전체 데이터에서 맨 위부터 10개의 레코드를 조회 -- 전체 데이터를 select 한 후에 사용 SELECT * FROM student LIMIT 10; Oracle - ROWNUM / FETCH FIRST -- 학생테이블의 전체 데이터에서 10개까지의 행을 조회 -- where절에 조건을 주는 방식으로 사용 SELECT * FROM student WHERE ROWNUM
[SQL] NOT EXISTS NOT EXISTS 주로 서브쿼리와 함께 사용되며 서브쿼리의 결과가 존재하지 않을 때 해당 조건을 만족하는 행을 검색하는 데 사용됨 (= 서브쿼리에 데이터가 존재하지 않을 경우 데이터가 조회된다.) 예를 들어, 주문(Order) 테이블에서 아직 발송되지 않은 주문을 선택하는 SQL 쿼리를 작성할 때, SELECT OrderID, CustomerID FROM Orders WHERE NOT EXISTS ( SELECT 1 FROM Shipments WHERE Shipments.OrderID = Orders.OrderID ); 여기서 SELECT 문에 1을 사용하면 해당 테이블의 개수만큼 1로 된 행을 출력 1은 TRUE를 의미하며 값의 존재유무(조건을 만족하는 결과가 있는지 여부)가 더 중요하기 때문에 간편..
[SQL] 데이터베이스의 JOIN 0. JOIN 관계형 데이터베이스에서 두 개 이상의 테이블을 연결하고 관련된 데이터를 결합하는 데 사용되는 연산 1. INNER JOIN 두 개 이상의 테이블을 연결하고, 두 테이블 간에 일치하는 행만 반환 2. OUTER JOIN INNER JOIN의 반대 연산으로 두 개 이상의 테이블을 연결하고 일치하지 않는 행도 포함하여 결과를 반환하는 연산 2-1. LEFT OUTER JOIN 왼쪽 테이블의 모든 행을 유지하고 오른쪽 테이블에서 일치하는 행이 있는 경우에만 오른쪽 테이블의 해당 행을 가져옴 일치하지 않는 경우에는 NULL 값으로 채움 2-2. RIGHT OUTER JOIN LEFT OUTER JOIN의 반대개념. 오른쪽 테이블의 모든 행을 유지하고 왼쪽 테이블에서 일치하는 행이 있는 경우에만 해당..
데이터베이스의 함수 1. 데이터베이스 함수 데이터베이스에서 데이터를 처리, 변환, 계산하고 검색하기 위해 사용되는 기능 시스템이 제공하는 내장함수와 사용자가 직접 정의하는 함수로 나뉨 2. 내장함수 데이터베이스 시스템 자체에 내장되어 있는 함수로, 기본적인 데이터 조작 및 변환 작업을 수행 3. 사용자 정의 함수 데이터베이스 사용자가 직접 정의하고 구현한 함수로, 특정 비즈니스 논리를 수행하는 데 사용 4. 단일 행 함수 단일 행 함수는 각 행에 대해 독립적으로 작동하며, 결과를 해당 행에 반환 -- 문자열을 대문자로 변환하는 단일 행 함수 (Oracle) SELECT UPPER('hello') FROM dual; 5. 다중 행 함수 다중 행 함수는 여러 행을 대상으로 작동하며, 결과를 하나의 값을 반환합니다. 주로 서브쿼..
무결성과 제약조건 무결성이란 ? 데이터베이스에서 데이터의 정확성, 또는 유효성을 의 제약조건이란 ? 데이터베이스 상태가 만족시켜야 하는 조건, 무결성을 보장하기 위한 규칙과 제약사항 종류 개체 무결성 기본키로 지정된 속성은 null이나 중복된 값을 가질 수 없음 참조 무결성 외래키 값은 참조하는 릴레이션의 기본키값이어야 함(null 허용) 도메인 무결성 속성들의 값은 정의된 도메인에 속한 값이어야 함 고유 무결성 기본키가 있는 테이블이라면 각 튜플이 가지는 속성값들은 서로 달라야 함 null 무결성 릴레이션의 특정 속성 값은 null이 될 수 없음(not null로 정의했다면)
절차적/비절차적 DML의 차이 비절차적 DML SELECT first_name, last_name FROM employees WHERE department_id = 101; 익숙하게 써왔던 sql이 비절차적 dml에 해당한다 가져올 데이터만 명시하고 어떻게 가져올지 그 처리방법은 시스템이 알아서 함 절차적 DML DECLARE v_first_name employees.first_name%TYPE; v_last_name employees.last_name%TYPE; BEGIN FOR rec IN (SELECT first_name, last_name FROM employees WHERE department_id = 101) LOOP v_first_name := rec.first_name; v_last_name := rec.last_nam..