SQL

    MySQL - Incorrect coloumn specifier for column 에러 원인과 해결방법

    원인 auto_increment 옵션을 특정 컬럼에 부여했을 때 해당 컬럼의 타입은 int 또는 float이어야 한다. 그 외 타입일 때 해당 에러가 발생한다. CREATE TABLE `POST` ( `POST_ID` varchar(11) NOT NULL AUTO_INCREMENT,-- varchar 타입이 문제 `POST_TITLE` varchar(100) NOT NULL, `POST_CONTENT` text NOT NULL, `POST_AUTHOR_USER_ID` varchar(20) NOT NULL, `POST_REG_DT` datetime NOT NULL, `POST_UPD_DT` datetime NOT NULL, PRIMARY KEY (`POST_ID`) ) SQL Error [1063] [42..

    Oracle - 다중 Like (Like In)

    기존 서비스에서 검색 기능에 대한 요구사항이 있었다. 요구사항은 다음과 같다. 복수 검색 가능 검색 키워드를 포함하는 결과값 모두 조회 ex) kim, lee, park 검색 -> 결과값: kimchanbin, leechanbin, parkchanbin, kimleepark 만약 검색어와 일치하는 결과값만 가져오면 됐다면 IN 연산자를 사용했으면 됐을텐데, 검색어를 포함하는 모든 결과값을 가져와야 했기 때문에 LIKE문을 사용해야 했다. IN 연산자 SELECT NAME FROM USERS WHERE NAME IN ('kim', 'leechan', 'parkchanbin'); 결과값: parkchanbin LIKE 연산자 SELECT NAME FROM USERS WHERE NAME LIKE '%kim%'..

    MariaDB - 행 번호 출력하기 ROW_NUMBER() OVER PARTITION BY

    오라클에서는 RNUM()을 통해 쉽게 순번에 맞는 행 번호를 출력할 수 있었다. 이번에 JSP로 프로젝트를 진행하면서 MariaDB를 사요하게 되었고 MariaDB에서도 행 번호를 출력할 수 있는 방법에 대해 정리해본다. MariaDB에서는 ROW_NUMBER() OVER() 함수를 사용하면 된다. OVER 안에는 PARTITION BY와 OREDER BY를 사용할 수 있다. PARTITION BY : 결과 집합을 분할하는 데 사용하는 열을 지정한다. PARTITION BY를 지정하지 않으면 모든 행이 단일 그룹으로 취급된다. ORDER BY : 지정된 파티션 내에서 각 행의 고유 ROW_NUMBER가 할당되는 순서를 결정한다. 예제 SELECT ROW_NUMBER() OVER(ORDER BY name ..

    Oracle - 줄바꿈(개행) 제거

    게시글을 작성하거나 댓글을 작성할 때 줄바꿈(개행)이 들어가는 경우가 있다. 개행이 포함된 데이터를 csv파일로 추출해야 할 일이 있었는데, 글씨가 깨져서 추출되었다. 개행을 제거해서 csv파일을 추출해야 했다. 오라클에서 개행을 제거하는 방법을 가볍게 알아보자 SELECT REPLACE(REPLACE(컬럼명, CHR(10), ''), CHR(13), '') FROM 테이블명 CHR(10) : 라인 피드라고 한다. 현재 커서가 위치한 줄에서 한 칸 아래로 이동한다. (\r) CHR(13) : 캐리지 리턴이라고 한다. 캐리지 리턴은 현재 커서가 위치한 줄의 맨 앞으로 보낸다. (\n) 눈치가 빠른 사람은 알겠지만 위 방법을 반대로 사용하면 개행을 추가해줄 수 있다. UPDATE 테이블명 SET '개행을'|..

    DB - DB View에 대해서 알아보자

    DB View DB View란 데이터베이스에서 특정한 데이터를 보여주는 가상의 테이블이나 뷰를 말한다. 실제 데이터를 저장하고 있는 테이블에서 필요한 데이터를 가져와서 논리적인 구조로 표현하는 것이다. 특정 정보를 자주 조회해야 하는 경우나 복잡한 쿼리를 View로 만들어서 간편하고 일관성 있게 조회할 수 있다. 가상 테이블: DB View는 실제 데이터를 저장하지 않고, 저장된 데이터를 기반으로 쿼리에 따라 동적으로 생성되는 가상 테이블이다. 그래서 데이터의 물리적 공간이 필요하지 않다. 데이터 추상화: DB View는 데이터베이스에 저장된 복잡한 데이터 중에서 필요한 데이터만 선택적으로 조회할 수 있다. 보안 및 접근 제어: 특정 테이블의 일부 컬럼만을 노출하거나, 데이터의 일부를 가공하여 제공함으로..

    Oracle - LISTAGG (여러 컬럼을 하나의 컬럼으로 가져오기)

    LISTAGG LISTAGG 함수는 Oracle에서 여러 개의 컬럼을 하나의 컬럼으로 가져와야 할 때 사용한다. SELECT LISTAGG(가져올 컬럼, 구분자) WITHIN GROUP (ORDER BY 순서컬럼) FROM 테이블 이름 예시 SELECT FOOD_NM FROM FOOD_INFO FOOD_NM 1 피자 2 치킨 3 햄버거 4 스파게티 5 짜장면 6 비빔밥 7 불고기 위 데이터를 LISTAGG 함수를 통해 하나의 컬럼으로 조회해보자 SELECT LISTAGG(FOOD_NM, ',') AS FOOD_NM FROM FOOD_INFO FOOD_NM 1 피자, 치킨, 햄버거, 스파게티, 짜장면, 비빔밥, 불고기 여기서 컬럼을 합치기 전 정렬을 하고 싶다면 WITHIN GROUP 함수를 사용한다. S..

    SQL - Oracle과 MySQL 문법 차이

    드디어 힘들게 취업을 했다.ㅠㅠ 지금까지는 MySQL만 사용했었는데 회사에서는 Oracle을 사용한다. MySQL과 Oracle에는 약간의 문법 차이가 있는데 공부도 할겸 비교해보자. 데이터 타입 MySQL CREATE TABLE mysql ( id INT, name VARCHAR(50) ); Oracle CREATE TABLE oracle ( id NUMBER, name VARCHAR2(50) ); MySQL 정수형 : INT 가변 길이 정수형 : VARCHAR Oracle 정수형 : NUMBER 가변 길이 정수형 : VARCHAR2 날짜 시간 MySQL SELECT * FROM mysql WHERE created_at > '2023-06-28'; Oracle SELECT * FROM oracle WH..

    SQL - 가독성 좋은 SQL 작성하기

    요즘IT에서 데이터리안의 윤선미님의 글 'SQL 가독성을 높이는 다섯 가지 사소한 습관'을 정리한 내용입니다. 예약어는 대문자로 작성하자 SELECT, FROM, GROUP BY, HAVING, AS, AND와 같은 SQL 예약어를 대문자로 쓰면 훨씬 잘 읽힌다. 에디터가 예약어를 하이라이팅해주기는 하지만 에디터마다 규칙이 다르기 때문에 대문자로 작성해서 가독성을 높이는 것이 좋다. SELECT tip, total_bill FROM tips select tip, total_bill from tips 행갈이를 자주 하자 쭉 작성한 코드는 작성하기에는 편하지만, 의미를 파악하기 위해서 모든 코드를 다 읽어봐야 한다. 적절히 행갈이를 해준 코드는 에약어만 확인하더라도 작성자의 의도와 코드 구조를 쉽게 파악할 ..

    SQL - MySQL 워크밴치에서 Foreign key 삭제하기

    실수로 중복으로 foreign key를 만들어버렸다. 중복된 foreign key를 지워보자! 아래 DDL을 확인해보면 following_id를 갖는 foreign key가 2개 있는 것을 알 수 있다. CREATE TABLE `follow` ( `id` bigint NOT NULL AUTO_INCREMENT, `follower_id` bigint NOT NULL, `following_id` bigint NOT NULL, PRIMARY KEY (`id`), KEY `follower_id` (`follower_id`), KEY `following_id` (`following_id`), CONSTRAINT `follow_ibfk_1` FOREIGN KEY (`follower_id`) REFERENCES `m..

    MySQL - 프로그래머스 164670. 조건에 맞는 사용자 정보 조회하기

    [unrated] 조건에 맞는 사용자 정보 조회하기 - 164670 문제 링크 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms 구분 코딩테스트 연습 > String, Date 채점결과 Empty 문제 설명 다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다. Column name Type Nullable B..