목록Development/Database & SQL (37)
컴공생의 다이어리
[SQL] WITH 절 WITH 절은 복잡한 쿼리문에서 반복되는 서브쿼리를 임시 테이블처럼 활용할 수 있는 가상 테이블의 개념이다. 일종의 이름을 붙인 서브쿼리라고 할 수 있다. 주요 RDBMS(MySQL, Oracle, Postgresql...)에서 제공하는 기능이다. WITH 절을 사용하면 반복되는 블록을 재사용함으로써 코드 가독성을 높일 수 있으며 실행 속도 시간을 최적화할 수 있다. WITH 절은 아래와 같이 별칭(서브쿼리의 이름)을 지정하고 별칭에 해당하는 쿼리문을 지정해주면된다. WITH 별칭1 AS (SELECT 문), 별칭2 AS (SELECT 문) ... SELECT FROM 별칭1, 별칭2 ...; # example WITH LIST AS ( SELECT * FROM TEST_TB WH..
[Oracle] 오라클 실수로 삭제 후 커밋한 데이터 복구 - AS OF TIMESTAMP 최근 실수로 데이터를 삭제하고 커밋(commit)해버려 엄청 당황스러웠던 일이 있었다. 어떻게 복구할 수 있을까 찾던 중 AS OF TIMESTAMP 를 활용하여 복구하는 방법에 대해 알게 되었고 그 방법에 대해 이 글에 정리하고자 한다. FlashBack은 DB에서 데이터 수정 및 삭제를 하고 커밋을 한 이후더라도 특정한 시간이나 특정 시점으로 되돌릴 수 있는 기능이다. Oracle 9i 이후부터 지원되는 기능으로 잘못된 DML operation으로 인한 복구를 쉽게 할 수 있다. FlashBack 기능을 통해 AS OF TIMESTAMP를 활용하여 삭제 전 데이터를 조회할 수 있으며 이를 활용하여 데이터 복구가..
[MySQL] 한번에 여러개의 데이터 삽입(insert) 첫번째로 VALUES 로 아래와 같이 여러 데이터를 한번에 삽입하는 방법이 있다. INSERT INTO TEST (col1, col2, ...) VALUES ('v1', 'v2', ...), ('v1', 'v2', ...), ... ('v1', 'v2', ...); 두번째로 SELECT 문을 활용하여 SELECT 된 결과를 삽입 방법이 있다. 여러 테이블의 결과를 단일 테이블에 저장하거나 하나의 테이블의 일부 컬럼을 조회하여 저장하는 경우에 활용된다. INSERT INTO TEST SELECT * FROM TEMP WHERE 조건; SELECT INTO TEST SELECT A, B, C, D FROM TEMP WHERE 조건;

MySQL 테이블 생성(CREATE) 스크립트(script) 보기 특정 테이블의 생성(CREATE) 스크립트를 보고 싶다면 아래 명령어와 같이 SHOW CREATE TABLE 명령어를 사용해서 확인할 수 있다. SHOW CREATE TABLE [테이블명]; 아래는 user라는 테이블의 스크립트를 출력하는 예시이다. # example : user라는 테이블의 create script 출력 SHOW CREATE TABLE user; 위에 형식이 보기 힘들수도 있는데 이럴 때 테이블명 뒤에 \G 옵션을 붙여주면 테이블 형식이 아닌 읽기 편한 형식으로 스크립트가 출력된다. SHOW CREATE TABLE user \G; https://zetawiki.com/wiki/MySQL_%ED%85%8C%EC%9D%B4%..

DBeaver(디비버) Public Key Retrieval is not allowed 에러 디비버에서 MySQL 데이터베이스 접속을 잘하다가 갑자기 Public Key Retrieval is not allowed 에러를 만났다. MySQL의 8.x 버전 이후부터 발생하는 문제라고 한다. 해결방법 지우고 다시 연결할 것 없이 접속하고자 하는 connection을 클릭하고 우클릭한 뒤, Edit Connection을 클릭한다. 클릭 후 나오는 창에서 Driver properties 탭에 들어가서 allowPublicKeyRetrieval의 값을 TRUE로 변경해준뒤 확인 버튼을 누르면 해결된다! https://bae9086.tistory.com/219 [에러 해결] Client 접속 시 Public Key..
[SQLite3] 테이블 존재하는지 확인 아래 쿼리를 실행시켰을 때 0이면 존재하지 않는 것이고 1이면 존재하는 테이블이라는 의미이다. SELECT COUNT(*) FROM sqlite_master WHERE name={존재여부 확인하려는 테이블명}; # 0이면 존재하지 않음 # 1이면 존재 # example : hello라는 테이블이 존재하는지 확인하려면 SELECT COUNT(*) FROM sqlite_master WHERE name='hello'; https://bloodguy.tistory.com/entry/SQLite3-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%A1%B4%EC%9E%AC-%EC%97%AC%EB%B6%80-%EC%B2%B4%ED%81%AC-check-table-ex..
ANY 함수 컬럼명 비교연산자 ANY(값들 혹은 서브쿼리) 여러개의 비교값 중 하나라도 만족하면 true 반환 IN과 다른점은 비교 연산자를 사용한다는 점 비교 연산자와 ANY > ANY : 최소값보다 크면 >= ANY : 최소값보다 크거나 같으면 ANY(20, 22, 31); ALL 함수 컬럼명 비교연산자 ALL(값들 혹은 서브쿼리) 전체 값을 비교해서 모두 만족해야 true 반환 비교 연산자와 ALL > ALL : 최대값보다 크면 >= ALL : 최대값보다 크거나 같으면 < ALL : 최소값보다 작으면..
[MySQL] ORDER BY FIELD() - 특정 값 우선 정렬 MySQL에서 ORDER BY 에서 FIELD()함수를 사용하면 특정한 값을 우선적으로 정렬할 수 있다. 기본적으로 ORDER BY는 기본적으로 ASC, DESC 형태로 정렬이 되지만 FIELD 함수를 사용하면 1,2,3,4,5 혹은 5,4,3,2,1 처럼 정렬되는 것이 아닌 3,4,2,5,1 순서와 같이 내 설정에 맞춰 정렬될 수 있다. SELECT * FROM 테이블명 ORDER BY FIELD(컬럼1, 우선 정렬할 값, 두번째 정렬할 값, 세번째 정렬할 값, ...); 컬럼1의 값 중에 정렬할 값들 중에 해당하는 값이 없다면 0번째 순위를 갖는다. 관련해서는 FIELD 함수 관련 글을 여기 클릭해서 참고하는 것을 추천한다. http..
[MySQL] FIELD 함수 FIELD 함수는 찾는 문자열이 어디에 위치했는지 찾을 때 사용된다. 아래와 같은 형태로 사용되며 찾는 문자열이 str1과 같다면 1을 반환하고, str2와 같다면 2를 반환하고 일치하는 문자열이 없다면 0을 반환합니다. FIELD(찾는 문자열, str1, str2, str3, ...); Example SELECT FIELD('하하', 'ㅇㄴ', '하하', '안녕'); # 2 반환 SELECT FIELD('하하', '안녕', 'ㅇㄴ', 'hello'); # 0 반환 https://mohading.tistory.com/36 [Mysql] 문자열 찾기, 원하는 순서로 정렬 - FIELD 함수 Field 함수는 FIELD(찾는 문자열, 문자열1, 문자열2, ...) 형태로 사용된..
[MySQL] NULL 처리 - IFNULL MySQL에서 해당 Column의 값이 NULL을 반환할 경우 다른 값으로 출력하고 싶다면 INFULL함수를 사용하면 된다. SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명; 예시 # AGE 컬럼이 NULL인 경우, -1을 반환 SELECT IFNULL(AGE, -1) FROM 테이블명; # ADDRESS 컬럼이 NULL인 경우, '주소 없음'을 반환 SELECT IFNULL(ADDRESS, "주소 없음") FROM 테이블명; https://velog.io/@gillog/DB-MySQL-NULL-%EC%B2%98%EB%A6%ACIFNULL-CASE-COALESCE [DB] MySQL NULL 처리(IFNULL, CASE..