DB 13

VARCHAR 컬럼과 INT 컬럼 비교

SELECT A.컬럼, (SELECT COUNT(컬럼) FROM TEST2 B WHERE A.형식이 VARCHAR인 컬럼 = B.형식이 INT인 컬럼) FROM TEST1 A 이런 식의 쿼리가 있었는데 INT 형식으로 변환할수 없다는 ERROR가 났다. 생각을 해보다가 VARCHAR형식의 컬럼 과 INT 형식의 컬럼을 비교 가능 여부가 헷갈리기 시작했다.. 그래서 공부 차 정리해보고자 한다. CHAT GPT에게 물어본 결과 아래와 같다. * VARCHAR 와 INTEGER 간의 비교는 가능하다. 비교 연산자(=.)를 사용하여 VARCHAR 와 INTEGER의 값을 비교할 수 있다. 그러나 이러한 비교는 데이터 형식의 호환성을 고려해야 한다. 아래의 경우, VARCHAR열과 INTEGER 값을 비교하려고 ..

DB/SQL 2023.06.08

[Oracle] ORDER BY 사용 시, ROWNUM

ROWNUM 을 쓰는 쿼리에서 ORDER BY로 정렬을 하면 ROWNUM이 뒤죽박죽 되어버리는 경험을 한 적이 있을거다. 그럴 경우 아래와 같이 해보자! SELECT ROWNUM, A.* FROM ( SELECT NAME, ID FROM TEST ORDER BY NAME ASC ) A 아래와 같이 ROWNUM을 사용할 시 뒤죽박죽 이유는 SELECT실행 순서때문이다. SELECT ROWNUM, ID, NAME FROM TEST_DATE ORDER BY NAME SELECT 실행순서에 대해 자세한 내용을 확인하고 싶다면 아래의 링크 클릭! https://talking-potato-dev.tistory.com/46

DB/SQL 2023.05.23

[SQL] DB 옵티마이저(Optimizer)란?

* 옵티마이저(Optimizer)란? : 가장 효율적인 방법으로 SQL 을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진! 사용자 쿼리 작성 -> SQL 파서 -> 옵티마이저(규칙기반/비용기반) -> 실행계획 수립 -> SQL 실행 엔진 -> 결과리턴 : 개발자가 SQL을 작성하고 실행하면 옵티마이저에서 "이 쿼리를 어떻게 실행하겠다" 라는 여러가지 실행계획 수립하고 각 예상 비용을 산정 및 최고의 효율을 가지는 실행계획 판별 & 쿼리 수행 * 옵티마이저 종류 항목 규칙기반 옵티마이저 비용기반 옵티마이저 개념 사전에 정의된 규칙 기반 최소비용 계산 실행계획 수립 기준 실행우선 순위(Ranking) 액세스 비용(Cost) 인덱스 인덱스 존재 시 가장 우선시 사용 cost에 의한 결정 성능 서용..

DB/SQL 2023.05.10

[SQL] INDEX 가공

* 인덱스 컬럼은 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다!! * 인덱스 사용이 불가능하거나 범위 스캔이 불가능한 예 1. 인덱스 컬럼을 조건절에사 가공하는 경우 SELECT * FROM USER WHERE SUBSTR(NAME,1,1)="이"; --SUBSTR(컬럼, 시작위치,길이) 2. 부정형을 사용하는 경우 SELECT * FROM USER WHERE F_NAME '김'; 3. IS NOT NULL을 사용하는 경우 SELECT * FROM USER WHERE F_NAME IS NOT NULL; * 인덱스 가공 예 위 1번을 인덱스가 타게끔 수정한 것. SELECT * FROM USER WHERE NAME LIKE '%이%';

DB/SQL 2023.05.10

[Oracle] SQL SELECT 쿼리 실행 순서

* SELECT 쿼리 실행 순서 : SQL 쿼리 실행 시, WHERE / GROUP BY / ORDER BY 절 등 구문을 실행하는데 순서가 존재한다. 실행 순서 FROM / JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 1. FROM / JOIN 절 : 쿼리에서 첫번째 실행 순서는 FROM ! , 테이블 전체를 가져옴. 2. WHERE 절 : FROM절에서 읽어온 테이블에서 조건에 맞는 결과만 필터링 3. GROUP BY 절 : 필터링된 데이터들을 선택한 컬럼으로 그룹핑 4. HAVING 절 : 그룹핑 후 각 그룹에 사용되는 조건절. HAVING절은 각 그룹엥 조건을 걸기 때문에 퍼포먼스가 떨어지므로 주의해서 사용할 것. 5. SELECT 절 :..

DB/SQL 2023.05.10

[Oracle] 데이터 복구 쿼리(TIMESTAMP)

* 데이터를 실수로 변경 OR 삭제하고 COMMIT 했을 시, 데이터 복구하는 방법 * 기존 데이터 ( SELECT * FROM TEST) NAME AGE ID 홍길동 26 HONG@TEST.COM 기존데이터 이름을 실수로 고길동이라고 변경했다고 가정할 경우 테이블을 조회해보면 아래와 같다. * 변경된 데이터 (SELECT * FROM TEST) NAME AGE ID 고길동 26 HONG@TEST.COM 기존데이터 데이터를 확인하고 싶다면 아래와 같이 쿼리를 날리면된다. //10분전 NAME=홍길동인 데이터 SELECT SELECT * FROM test AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE name = '홍길동' 결과 NAME AGE I..

DB/SQL 2023.05.04

[Oracle] 날짜 및 형식 변환(TO_CHAR)

* T0_CHAR(날짜 데이터 타입, '지정형식') : 날짜, 숫자 , 문자 값을 지정한 형식의 VARCHAR2 타입 문자열로 반환하는 함수. SYSDATE = 2023-05-03(수) 지정형식 설명 EX 결과 CC 세기 SELECT TO_CHAR(SYSDATE, 'CC') FROM DUAL; 21 YYYY or YYY or YY or Y 연도 SELECT TO_CHAR(SYSDATE, 'YYYY') FROM DUAL; 2023 YEAR 문자로 표혐된 연도 SELECT TO_CHAR(SYSDATE, 'YEAR') FROM DUAL; TWENTY TWENTY-THREE Q 분기 SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; 2 MM 두 자리 값 월 SELECT TO_CHAR(SYS..

DB/SQL 2023.05.03

[MSSQL]사용자 정의 함수Function 만들기

* Function 생성 : 아래는 점수값에 대한 텍스트를 리턴하는 FUNCTION이다. 매개변수 : INT(점수) USE [ICERT] GO /****** Object: UserDefinedFunction [dbo].[f_gwt_jumsu] Script Date: 04/27/2023 16:28:26 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER function [dbo].[f_jumsu_exchange]( @VALUE INT ) RETURNS VARCHAR(50) AS BEGIN DECLARE @RESULT_VALUE VARCHAR(50); IF(@VALUE>=95) SET @RESULT_VALUE = '텍스트'; ELSE IF(@VAL..

DB/SQL 2023.04.27

[SQL] PK와 UNIQE INDEX 차이점

차이 : PK = NOT NULL, UNIQE INDEX NULL 허용 구분 Primary Key Unique Index 정의 데이터베이스 테이블 설계를 고유하게 식별하는 키 중복 값을 허용하지 않는 인덱스 특징 1. 중복될 수 없는 유일한 단일값을 가짐 2. NOT NULL 3. Object 속성 : iConstratint로써 제약조건 생성 4. 테이블당 PK는 하나, 다중컬럼은 가능 1. 인덱스가 걸려있는 커럼에 중복될 수 없는 유일 값 가짐. 2. NULL 허용 3. Object 속성 : index 4. 여러개 생성 가능 * 테이블 생성 시, PRIMARY KEY 1개 CREATE TABLE onePrimaryKey ( code varchar(5) primary key, name varchar(20..

DB/SQL 2023.04.06