반응형

개발 창고/Database 56

[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 - MySQL

1. 문제 2. 풀이 문제 https://school.programmers.co.kr/learn/courses/30/lessons/164673 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다. 풀이 제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다. SELECT T1.TITLE , T1.BOARD_ID , T2.REPLY_ID , T2.WRITER_ID , T2..

[MSSQL] How to create a blank, non-inputable column.

How to create a blank, non-inputable column. 테이블을 생성하다 보면 NOT NULL 제약조건을 이용하여 컬럼에 NULL이 입력 불가하도록 생성할 수 있습니다. 하지만, 이는 공란까지 입력 불가한 상태는 아니기 때문에 반드시 입력이 필요한 경우에 NOT NULL 만으로 해결되지 않는 경우가 발생합니다. 만약 아래와 같은 NOT NULL인 COL1을 갖는 TEMPTABLE이 있다고 가정한다면 CREATE TABLE TEMPTABLE ( COL1 NVARCHAR(10) NOT NULL ) 여기에 NULL 을 입력하는 경우 아래와 같은 오류가 발생합니다. INSERT INTO TEMPTABLE (COL1) VALUES (NULL) 하지만 공란을 입력하면 입력되는 것을 확인할 ..

[SQLite] How to get the last inserted ID

0. 미리보기 1. 테이블 생성 2. 임시 데이터 추가 3. 마지막 입력된 SEQ 가져오기 0. 미리보기 SELECT LAST_INSERT_ROWID(); TRANSACTION 처리를 위해 ID에 의미를 부여하지 않는 경우에는 Sequence를 ID로서의 역할인 중복방지가 가능합니다. 만약 아래와 같은 메모를 관리하기 위한 MEMO 테이블이 있다고 가정하고 SEQ가 해당 테이블의 PK인 경우 SEQTITLECONTENT SEQ TITLE CONTENT 1 로이팩토리 블로그 작성중입니다. 2 워드프레스 블로그 이용중입니다. 1. 테이블 생성 CREATE TABLE MEMO ( SEQ INTEGER PRIMARY KEY AUTOINCREMENT , TITLE TEXT , CONTENT TEXT ) SEQ :..

[SQLite] How to Look Up the Date Interval (Date Diff)

How to Look Up the Date Interval (Date Diff) 1. 테이블 생성 2. 테스트 데이터 추가 3. 율리우스일 (JULIANDAY) 4. DATEDIFF 5. STRFTIME How to Look Up the Date Interval (Date Diff) 만약 아래와 같은 테이블이 있다고 가정하면, TITLE DATE_ST DATE_ED CASE #1 2023-07-01 09:00:00.000 2023-07-02 10:10:10.000 CASE #2 2023-06-01 09:00:00.000 2023-07-02 10:10:10.000 CASE #3 2022-07-01 09:00:00.000 2023-07-02 10:10:10.000 CASE #1 : 시작 일자와 종료 일자가 ..

[SQLite] 마지막으로 입력 된 ID 가져오는 방법

0. 미리보기 SELECT LAST_INSERT_ROWID(); TRANSACTION 처리를 위해 ID에 의미를 부여하지 않는 경우에는 Sequence를 ID로서의 역할인 중복방지가 가능합니다. 만약 아래와 같은 메모를 관리하기 위한 MEMO 테이블이 있다고 가정하고 SEQ가 해당 테이블의 PK인 경우 SEQ TITLE CONTENT 1 로이팩토리 블로그 작성중입니다. 2 워드프레스 블로그 이용중입니다. 1. 테이블 생성 CREATE TABLE MEMO ( SEQ INTEGER PRIMARY KEY AUTOINCREMENT , TITLE TEXT , CONTENT TEXT ) SEQ : 메모 일련번호 (1, 2, 3, 순으로 자동 증가) TITLE : 메모 제목 CONTENT : 메모 내용 2. 임시 데..

[SQLite] Date Diff를 구하는 방법

How to look up the Date Interval 만약 아래와 같은 테이블이 있다고 가정하면, TITLE DATE_ST DATE_ED CASE #1 2023-07-01 09:00:00.000 2023-07-02 10:10:10.000 CASE #2 2023-06-01 09:00:00.000 2023-07-02 10:10:10.000 CASE #3 2022-07-01 09:00:00.000 2023-07-02 10:10:10.000 CASE #1 : 시작 일자와 종료 일자가 1일 1시간 10분 10초 차이 CASE #2 : 시작 일자와 종료 일자가 1개월 1일 1시간 10분 10초 차이 CASE #3 : 시작 일자와 종료 일자가 1년 1일 1시간 10분 10초 차이 1. 테이블 생성 CREATE ..

[MSSQL] SQL Error [14607] [S0001]: profile 이름이 잘못되었습니다.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole' , @membername = ''; mssql의 메일 발송 프로시저인 sp_send_dbmail을 이용하는 경우 아래와 같은 오류를 발견하곤 합니다. 이 경우 주로 원인으로 두 가지인데, 1/ 지정된 profile이 없거나 2/ 지정된 profile에 대한 권한이 없는 경우입니다. 지정된 profile이 없는 경우에는 생성한 profile명으로 변경해 주면 되지만, 권한이 없는 경우에는 아래와 같이 권한 부여가 가능한 계정으로 로그인 후 실행 하여 profile에 대한 접근 권한을 부여해 주는 방법이 있습니다. -- profile 접근하려는 계정이 test인 경우 EXEC msdb.dbo..

[MSSQL] SEQUENCE 사용하기

-- 시퀀스 생성 CREATE SEQUENCE SEQ_TEST START WITH 1; -- 시퀀스 초기화 ALTER SEQUENCE SEQ_TEST RESTART WITH 1; -- 시퀀스 가져오는 방법 SELECT NEXT VALUE FOR SEQ_TEST; -- 시퀀스 삭제 DROP SEQUENCE SEQ_TEST; 시퀀스(Sequence)란? 시퀀스는 한 개의 테이블 내에서 유일값을 가질 수 있도록 별도의 순번을 관리하도록 하는 기법입니다. 만약, A라는 사람과 B라는 사람이 동시에 테이블에 데이터를 기입하는 경우 우선순위는 일반적으로 먼저 입력하는 사람에게 있습니다. TB_STUDENT 학생 번호 학생 명 ... 1 고길동 2 로이야 3 노라라 만약 위와 같이 학생 정보 (TB_STUDENT)라..

[MySQL] Limit 사용하기

SELECT * FROM TAB LIMIT 0, 5 문법은 간단합니다. SELECT * FROM 테이블명 LIMIT 시작INDEX, 출력수 만약 아래와 같이 Col1, Col2의 컬럼을 갖는 테이블(TAB)이 있다고 가정하고 Col1 Col2 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I 10 J 11 K 12 L 13 M 14 N 아래의 Query를 수행하면 SELECT * FROM TAB LIMIT 0, 5 Index 시작점인 0부터 5개인 아래의 결과가 출력되게 됩니다. Col1 Col2 1 A 2 B 3 C 4 D 5 E 만약 Col1이 4부터 10까지 출력하고 싶은 경우 아래와 같이 Index를 3부터 7개를 출력하는 Query인 SELECT * FROM TAB LIMIT 3,..

[MySQL] CONNECT BY 구현하기

WITH RECURSIVE TMP AS ( -- 최상위 부모 정의 SELECT COD , NM , 1 AS LVL , CAST(COD AS VARCHAR(100)) AS PATH , CAST(NM AS VARCHAR(100)) AS PATHNM FROM CODTEST WHERE PARNT = '' UNION ALL -- 단계별 부모와 자식 매핑 SELECT C.COD , C.NM , P.LVL + 1 AS LVL , CONCAT(P.PATH , ' > ', C.COD) AS PATH , CONCAT(P.PATHNM, ' > ', C.NM) AS PATHNM FROM TMP AS P JOIN CODTEST AS C ON C.PARNT = P.COD ) SELECT * FROM TMP MySQL에서도 CON..

반응형