SQL개발자 24

[SQLD] 조인 종류와 수행 원리

조인 종류와 수행 원리 Join - 두 개 이상의 테이블을 하나의 집합으로 만드는 연산(두 테이블 사이에서 수행) - 자주 사용하는 Join으는 NL Join, Sort Merge Join, Hash Join이 있다. NL Join( Nested Loop Join ) - 중첩된 반복문과 유사한 방식으로 사용. - 랜덤 액세스 방식으로 데이터를 읽는다. - 외부 테이블의 각 행에 대해 내부 테이블을 한 번만 스캔한다. 작업 방식 1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾는다. -> 이때 선행 테이블에 주어진 조건을 만족하는 첫 번째 행을 찾는다. 2. 선행 테이블의 조인 키 값을 가지고 후행 테이블에 조인 키가 존재하는지 확인. -> 조인 시도 3. 후행 테이블의 인덱스에 선행 테이블의 조인 키..

[SQLD] 옵티마이저와 테이블 스캔

옵티마이저와 테이블 스캔 옵티마이저 - 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할을 수행 - 다양한 실행 방법들 중에서 최적의 실행 방법을 결정하는 것이 옵티마이저의 역할임. - 관계형 DB는 옵티마이저가 셜정한 실행 방법대로 실행 엔진이 데이터를 처리하여 결과 데이터를 사용자에게 전달하는 역할을 할 뿐이다. - 최적의 실행방법( 어던 방법으로 처리하는 것이 최소 일량으로 동일한 일을 처리할 수 있는지 ) 규칙기반 옵티마이저 - 규칙(우선 순위)을 가지고 실행계획을 생성한다. 규칙기반 옵티마이저의 규칙(15가지 순서) 순위 엑세스 기법 규칙 설명 1 Single row by rowid Rowid를 통해서 테이블에서 하나의 행을 액세스 하는 방식, Rowid는 행이 포함된 데이터 파..

[SQLD] 서브쿼리와 그룹함수(Group Function)

서브쿼리와 그룹함수 서브쿼리 - 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다. - 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다. 서브쿼리 예시 select 칼럼1,칼럼2 FROM 테이블명 where 조건= (select.....from....where); 조인과 서브쿼리의 분류 조인 - Join에 참여하는 모든 테이블이 대등한 관계에 있기 때문에 조인에 참여하는 모든 테이블의 칼럼을 어느 위치에서라도 자유롭게 사용할 수 있다. 서브쿼리 - 메인쿼리의 칼럼을 모두 사용할 수 있지만 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없다. - 질의 결과에 서브쿼리 칼럼을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼리 등을 사용해야 한다. 서브쿼리 사용시 주의점. - ..

[SQLD] 집합연산자와 계층형 질의

집합연산자와 계층형 질의 집합 연산자(Set Operator) - 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용 - 집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 줌 - 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때와 동일테이블에서 서로 다른 질의를 수행하여 결과를 합치고자 할 때 사용할 수 있다. - 튜닝관점에서 실행계획을 분리하고자 하는 목적으로도 사용 Caution. * SELECT 절의 칼럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환 가능해야 한다. 그렇지 않으면 데이터베이스가 오류를 반환한다. 집합 연산자의 종류 집합 연산자 의미 UNION 여러 개의 SQL문의 결과에 대한 합집합으..

[SQLD] ORDER BY 와 JOIN

Order by 와 Join ORDER BY 절 - SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용 ODER BY 절의 예로 선수 테이블에서 선수들의 이름, 포지션, 백넘버를 출력하는데 사람 이름을 내림차순으로 정렬하여 출력한다. ODER BY 칼럼명 [ASC 또는 DESC] -> ASC : 조회한 데이터를 오름차순으로 정렬한다.(기본 값이므로 생략 가능) -> DESC : 조회한 데이터를 내림차순으로 정렬한다. Caution. - Oracle에서는 NULL값을 가장 큰 값으로 취급하지만 SQL에서는 가장 작은 값으로 취급한다. - 기본적인 정렬 순서는 오름차순(ASC)이다. - 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된..

[SQLD] GRORP BY, HAVING 절

Group By, Having 절 집계 함수(Aggregate Function) - 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다. - GROUP BY 절은 행들을 소그룹화 한다. - SELECT 절, HAVING 절, ORDER BY 절에서 사용할 수 있다. 집계 함수 명 ( [DISTINCT | ALL] 칼럼이나 표현식 ) - ALL : Default 옵션이므로 생략 가능함. - DISDINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션이다. 집계 함수의 종류 집계 함수 사용 목적 COUNT( * ) NULL 값을 포함한 행의 수를 출력한다. COUNT( 표현식 ) 표현식의 값이 NULL값인 것을 제외한 행의 수를 출력한다. SUM( [DISTINCT | ALL ]..

[SQLD] 함수(Function)

함수(Function) 함수 조직도 Infotance. 함수는 입력되는 값이 아무리 많아도 출력은 하나만 된다는 M:1 관계라는 중요한 특징을 가지고 있다. 단일행 함수의 종류 종류 내용 문자형 함수 문자를 입력하면 문자나 숫자 값을 반환한다. 숫자형 함수 숫자를 입력하면 숫자 값을 반환한다. 날짜형 함수 DATE 타입의 값을 연산한다. 변환형 함수 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. NULL 관련 함수 NULL을 처리하기 위한 함수 일단 큼지막 하게 대충 알아보고 아래에 상세하게 알아보자. 단일행 함수의 중요 특징 - SELECT,WHERE,ORDER BY 절에 사용 가능하다. - 각 행(Row)들에 대해 개별적으로 작용하여 데이터 값들을 조작하고, 각각의 행에 대한 조작 결과를 리턴한..

[SQLD] WHERE

WHERE WHERE 절 - 두 개 이상의 테이블에 대한 Join 조건을 기술하거나 결과를 제한하기 위한 조건을 기술 할 때. SELECT 칼럼명 FROM 테이블명 WHERE 조건식; - WHERE 절은 FROM 절 다음에 위치한다. - Column명은 보통 조건식의 좌측에 위치한다. - 비연산자 - 문자, 숫자, 표현식 (보통 조건식의 우측에 위치) - 비교 칼럼명(Join 사용 시) 연산자 종류 비교연산자나 논리 연산자는 아실거라고 생각하고 이 2개는 빼고 서술하겠습니다. 연산자의 종류 구분 연산자 연산자 의미 SQL 연산자 Between A and B A와 B의 값 사이에 있으면 된다. (A와 B값 포함) IN (list) List에 있는 값 중에서 어느 하나라도 일치하면 된다. Like '문자열'..

[SQLD] TCL (Transaction Control Language)

TCL(TraTransaction Control Language) Transaction(트랜잭션) - 데이터베이스의 논리적 연산단위 - 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작 - 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함된다. - 분할할 수 없는 최소의 단위 - 그렇기 때문에 전부 적용하거나 전부 취소한다. - All Or Nothing의 개념 * 올바르게 반된 데이터를 데이터베이스에 반영시키는 것(COMMIT) * 트랜잭션 시작 이전의 상태로 되돌리는 것(ROLLBACK) * 저장점기능(SAVEPOINT) 트랜잭션의 특성 특성 설명 원자성 트랜잭션에서 정의된 연산자들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.(All or Noth..

[SQLD] DML(Data Manipulation Language)

DML(Data Manipulation Language) DML(Data Mainpulation Language) -> 데이터 조작어 -> 테이블에 관리하기를 원하는 자료들을 입력, 수정, 삭제, 조회하는 명령어들 자 일단 시작하기 전에 이번 챕터를 같이 해줄 제가 미리 만들어놓은 테이블을 소개합니다 CREATE TABLE `my_contacts` (`last_name` varchar(30) , `first_name` varchar(20) , `email` varchar(50) , `gender` char(1), `birthday` date , `profession` varchar(50), `location` varchar(50), `status` varchar(20), `interests` varcha..