DB 74

여러 행 컬럼 합치기 STUFF

SQL Server에서 여러 행(Row)의 컬럼 값을 하나로 합치기 위해서는 STUFF 함수와 FOR XML PATH 구문을 사용한다. 오라클에서 XMLAGG, WM_CONCAT, LISTAGG 함수와 비슷한 기능을 수행한다. SQL Server 2017 이상 버전을 사용한다면 STRING_AGG 함수를 사용하면 된다. SELECT a.job , STUFF((SELECT ',' + ename FROM emp WHERE job = a.job FOR XML PATH('') ), 1, 1, '') AS enames FROM emp AS a GROUP BY a.job STUFF() 함수는 문자열을 자리수 만큼 특정문자로 치환하고 문자열로 리턴한다. XML로 리턴된 결과의 첫번재 문자 ','을 빈문자로 치환하고 ..

DB/MSSQL 2023.01.12

MSSQL 한글 깨짐

MSSQL의 테이블 데이터가 한글일 경우에는 컬럼의 DataType을 nvarchar로 해야된다고 한다. varchar 와 nvarchar를 비교하자면 varchar 는 영문데이터와 테이블에 설정된 기본 언어 타입을 사용. nvarchar는 유니코드를 지원을 위한 데이터 형이란다...(단점은 varchar보다 동일한 데이터 저장시 2배의 공간을 사용함.) 1. 한글이 포함되는 필드의 dateType 확인 (nvarchar) 2. insert 혹은 select 시에 nvarchar 형의 값은 다음과 같이 사용 insert into [테이블](칼럼) values (N'한글') select * from [테이블] where [칼럼] LIKE N'%한글%' 3. 기본 언어 확인 select @@LANGUAGE ..

DB/MSSQL 2022.10.13

datetime, datetime2 차이점

datetime 날짜와 시간 표시 1953년 1월 1일부터 가능. [년-월-일 시:분:초.123] // [2019-04-26 09:00:00.007] 8Byte 1953년 이전의 날짜를 저장하지 못하며(에러 발생), 초 이하의 정확도가 떨어짐. .000, .003 또는 .007초 단위로 반올림 SQL표준에 맞지 않고, 정확도가 떨어져서 공식문서에서는 비권장 datetime2 [년-월-일 시:분:초[.100ns]], [YYYY-MM-DD hh:mm:ss[.소수자릿수 초]] // [2019-04-26 09:00:00.1234567] 자릿수가 3보다 작은 경우 6Byte 자릿수가 3 또는 4인 경우 7Byte 기타 8Byte SQL Server 2008부터 지원

DB/MSSQL 2022.09.02

몽고DB 18강. aggregate $lookup 조인

몽고디비는 조인을 하기위해 사용하는 데이터베이스가 아닌데 몽고디비에서 조인을 지원해준다. 더미 데이터를 insertMany로 저장해주자. 나중에 크롤링할때도 for문 돌면서 save하면 너무 오래걸리기 때문에 벌크 컬렉터 saveAll 해야한다. 1. 더미데이터 use("cosdb"); var users = [ { "_id" : ObjectId("60986fbe93843236060071d2"), "username" : "ssar", "password" : "1234", "phone" : "0102222" }, { "_id" : ObjectId("6098700293843236060071d5"), "username" : "cos", "password" : "1234", "phone" : "0103333" }..

DB/MongoDB 2022.05.20

몽고DB 17강. aggregate 배열 표현식

배열 전개 표현식 use("cosdb"); var persons1 = { _id: 1, username : "ssar", posts : [ {id:1, title:"제목1", content:"내용1"}, {id:2, title:"제목2", content:"내용2"}, {id:3, title:"제목3", content:"내용3"}, ] } var persons2 = { _id: 2, username : "cos", posts : [ {id:1, title:"제목1", content:"내용1"}, {id:2, title:"제목2", content:"내용2"}, {id:3, title:"제목3", content:"내용3"}, ] } db.persons.insertOne(persons1); db.persons...

DB/MongoDB 2022.05.19

몽고DB 16강. aggregate

더미 데이터 넣기 use('cosdb'); for(let i=1; i < 21; i++) { db.users.insertOne({"i" : i, "username" : "user" + i, "age" : 12}); } db.users.find(); SELECT 연습을 할 건데 기본적인 CRUD는 스프링 부트에서 지원해주지만 복잡한 쿼리(고급 SELECT)를 수행하기 위해서는 쿼리를 직접 짜야한다. 이때 aggregate(집계 함수)를 사용해준다. 집계 함수의 포인트 : 파이프 라인 SELECT 한 결과를 가지고 다시 SELECT를 거치며 내가 원하는 결과를 도출할 수 있다. 몽고에서 파이프 라인을 도큐먼트 스트림이라고 부른다 1. match 일치 (RDB : WHERE) : 행을 추리기 2. projec..

DB/MongoDB 2022.05.16

몽고DB 15강. 스프링 연결

몽고 DB와 RDB의 차이 자바 세상에서 RDB로 값을 넣을 때는 DB에 오브젝트를 저장할 수 없었다. 자바는 오브젝트 안에 오브젝트를 넣을 수 있지만, DB는 테이블안에 테이블을 넣을 수 없기 때문이다. 이런 점이 상이했다. 그래서 ORM을 사용했다. JPA가 ORM이 아니라 ORM을 가지고 있는 것이다. 몽고 DB는 오브젝트 안에 오브젝트를 저장할 수 있다. 자바와 똑같이 오브젝트 안에 오브젝트를 넣을 수 있어서 DB에 그대로 넣을 수 있고 그대로 받아올 수 있다. 그래서 JPA가 필요 없다. 프로젝트를 생성하고 몽고 DB를 연결하자. 매우 간단하다. spring: data: mongodb: host: localhost port: 27017 database: greendb 나중에 샤딩을 구축하고 나서..

DB/MongoDB 2022.05.11

몽고DB 14강. 샤드키 설정

https://blog.naver.com/getinthere/222361419686 몽고DB 19강 - 샤딩 고급 1. 샤딩 키 선정 방법 - 샤딩 키는 직접 지정할 수 있는데 이때는 무조건 인덱스가 필요하다. 찾을때는 좋... blog.naver.com 1. 해시 (순차적인 단순 번호) Key base Shading 들어오는 데이터가 1부터 9일 때 순서대로 들어오는 번호 데이터를 잘 저장할 수 있다. _id:1 ~ 100 ~ 1000 샤드키 : _id 1 -> 해시 function -> asdf3n2jvasdv 변환 알아서 밸런스 맞춰서 샤드에 저장된다. 몽고DB에 데이터를 INSERT 하면 오브젝트 아이디가 생성되는데 timestamp 현재 시간을 기준으로 만들어진다. timestamp + rand..

DB/MongoDB 2022.05.09