Database
-
본 포스팅은 스터디를 통해 작성한 글을 복사한 내용입니다. 여기서 더 많은 글들을 확인하실 수 있습니다. 예제에서 사용될 컬렉션은 다음과 같습니다. 사용자 : users export const UserScheme = new Schema({ _id: { type: ObjectId }, userName: { type: String }, roleCode: { type: String }, createDate: { type: Date, default: Date.now }, }); 역할 : roles export const RoleScheme = new Schema({ _id: { type: ObjectId }, roleName: { type: String }, }); INSERT 먼저 roles 컬렉션에 데이터를..
Node와 MongoDB(+Mongoose) 2024. 2. 27. -
오래전 토이프로젝트로 시작한 소스를 리팩토링하면서 암호화 기능을 추가해봤습니다. 소스는 여기에서 확인하실 수 있습니다. 무료로 사용이 가능한 MariaDB에서는 단/양방향의 암호화 기능을 제공합니다. 본문에서 사용된 암호화는 단방향으로 사용자 패스워드를 암호화할 때 사용되었습니다. 단방향 암호화 일반적으로 암호화는 평문을 암호문으로 바꿔주는 것을 말합니다. 단방향 암호화는 평문을 암호문으로 바꾸는 것만 가능한 암호화 기법입니다. 단방향 암호화는 해시 함수를 이용합니다. 해시 함수는 임의의 평문 데이터를 고정된 길이의 데이터로 반환해줍니다. 또 동일한 값이 입력되면 동일한 출력값을 보장합니다. (이 부분에 대한 위험성은 이 블로그에서 확인할 수 있었습니다) 해시 함수에는 대표적으로 MD5와 SHA가 있는데..
[MySQL,MariaDB]암호화, 복호화 2021. 7. 30. -
오라클 사용시 날짜를 영문으로 표기하는 법은 간단합니다. 아래와 같이 문자열인 경우는 DATE 타입으로 변환을 한번 하고 NLS_DATE_LANGUAGE 옵션을 사용합니다. MonthDD YYYY : 월(月)일(日) 년도 MonthDD, YYYY : 월(月)일(日), 년도(원하는 기호문자 입력 가능, ex. /, -, . 등) Month : 월(月) MonthfmDD, YYYY : 월(月)일(日) 년도(이 때 fmDD를 사용하면 일 표기시 0을 제외됩니다) MonthDD, YYYY, Day : 월(月)일(日), 년도, 요일 SELECT TO_DATE('20210101') , TO_CHAR(TO_DATE('20210101'),'MonthDD YYYY','NLS_DATE_LANGUAGE=ENGLISH') F..
[Oracle]날짜 영문 표기 2021. 1. 14. -
관계형 테이블은 행과 열로 이루어져 있습니다. 이번 글은 테이블의 행과 열의 위치를 바꾸는 피벗에 대한 포스팅입니다. 예제는 MariaDB(MySQL 가능)로 실습하였습니다. 오라클 11g부터는 피벗 기능을 자체적으로 제공하는데 거기에 대해서는 이후에 따로 포스팅할 예정입니다. 여기 피벗을 이용하려는 테이블 두 개가 있습니다. PM_CALENDAR 테이블에는 2021년도까지의 날짜 데이터가 입력되어 있습니다. DATE : DATE 타입의 날짜 데이터 DATECHAR : VARCHAR 타입의 날짜 데이터 PM_COMMUTE 테이블은 사람들의 출, 퇴근 기록이 담겨있습니다. 여기서 사용할 필드는 USERCD, WORKDAY, TODATE, FROMDATE 입니다. USERCD : 사람들의 고유번호 WORKD..
[MySQL,MariaDB]피벗(Pivot) 사용하기 2020. 5. 11. -
Oracle을 오래 써왔던 탓에 MariaDB로 뭘 하려고 하다보니까 문법의 차이나... 함수나... 적응이 쉽지는 않네요 ㅠㅠ 오늘은 MariaDB(+MySQL)에서 Outer join시 조건을 주는 법에 대한 포스팅을 준비했습니다. MariaDB 역시 Outer Join에 대한 개념은 Oracle과 다르지 않습니다. 다만 개인적으로 자주 사용하던 (+) 연산자가 되지 않아서 불편하긴 하네요.. 문제가 되는 쿼리 로그입니다. (참고로 PM_CALENDAR 라는 테이블에는 날짜 데이터들이 들어있고, PM_COMMUTE 라는 테이블에는 유저마다 날짜에 해당하는 출,퇴근 시간이 찍힌 데이터가 들어있습니다) 원하는 결과는 B테이블(PM_COMMUTE)에 대한 Null 처리였는데 어째서인지 Inner Join과..
[MySQL,MariaDB]Outer Join 조건 주기 2020. 4. 30. -
SQL 오류 (1093): Table 'PM_COMMUTE' is specified twice, both as a target for 'UPDATE' and as a separate source for data MariaDB(또는 MySQL)를 사용하다가 1093 에러와 마주친다면 서브쿼리 사용이 문제일 것입니다. 아래는 에러가 발생한 쿼리 로그입니다. UPDATE PM_COMMUTE SET FROMDATE = '2020.04.29 13:42:43' WHERE WORKDAY = ( SELECT MAX(WORKDAY) WORKDAY FROM PM_COMMUTE WHERE USERCD = 'admin' AND FIXYN = 'N' ) MariaDB는 Oracle과 달리 UPDATE 또는 DELETE 시에 서..
[MySQL,MariaDB]SQL 오류 (1093) 2020. 4. 29. -
계층형 쿼리는 테이블 내의 데이터 관계가 계층적 관계를 가질 때 사용할 수 있습니다. 계층적 관계란 [메뉴1] - [메뉴1_서브메뉴1] - [메뉴1_서브메뉴1_서브서브메뉴1] 과 같이 서로 관계가 계층적으로 묶여있는 것을 말합니다. 이를 트리 형태라고도 합니다. 위 이미지와 같이 조회/발급, 민원증명, ..., 세무대리인과 같은 대메뉴와 조회/발급 메뉴의 서브 메뉴로 전자세금계산서(서브 메뉴 - 발급,목록조회 등...), 현금영수증, 세금신고납부, 기타 조회 등과 같은 서브메뉴를 계층형 쿼리를 이용해 처리할 수 있습니다. 테이블을 하나 만들어 테스트 데이터를 입력했습니다. 홈텍스 사이트의 조회/발급 메뉴와 민원증명 메뉴를 계층 관계로 나타내보려 합니다. SELECT * FROM TESTTABLE ; 이제..
[Oracle]계층형 쿼리(START WITH ~ CONNECT BY PRIOR) 2019. 11. 21. -
LAG LAG 함수는 데이터의 몇 번째 이전 행의 값을 가져옵니다. 사용법은 다음과 같습니다.(LAG, LEAD 함수가 동일합니다) LAG(Column, N, '') / LEAD(Column, N, '') 첫 번째 인자는 비교할 컬럼 두 번째 인자는 몇 번째 이전(또는 이후) 행의 값을 가져올지. 입력하지 않을 경우, Default = 1 세 번째 인자는 첫 번째(또는 LEAD의 경우 마지막) 행의 값이 Null이 조회될 때 바꿔줄 값 예제를 하나 만들어보겠습니다. 빵 유통기한을 오름차순으로 정렬하고 각각의 빵 유통기한과 해당 빵 이전에 유통기한 날짜를 확인해보겠습니다. WITH TESTDB AS( SELECT 1001 BNUM, '크림빵' BNAME, '20190301' BYMD FROM DUAL UN..
[Oracle]LAG, LEAD 2019. 3. 14.