DataBase
[MSSQL] yyyyMMddHHmmss to yyyy-MM-dd HH:mm:ss
테이블에 varchar 타입으로 날짜를 저장하기 위해 yyyyMMddHHmmss 형식으로 넣는 경우가 있습니다. 사용자에게는 날짜 형식으로 노출 시키기 위해 datetime으로 변환해서 노출 시켰습니다. declare @date varchar(14) = '20240327113500' select CAST(STUFF(STUFF(STUFF(@date, 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime) 실제 사용자는 분까지만 시간을 확인할 수 있게 하면 되었기 때문에 사용자에게 노출하는 화면에서는 한번 더 convert하여 사용했습니다. declare @date varchar(14) = '20240327113500' select CONVERT(VARCHAR(16), CA..
[MSSQL] insert into vs select into
1. INSERT INTO 문 INSERT INTO문은 데이터베이스 테이블에 새로운 레코드(행)을 삽입하는 역할을 합니다. INSERT 문을 사용하여 데이터를 테이블에 추가할 수 있습니다. 기본적인 INSERT INTO 문은 다음과 같습니다. INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...); -- 컬럼 명시하지 않는 경우 INSERT INTO 테이블명 VALUES (값1, 값2, ...); INSERT INTO 문은 삽입하려는 테이블의 구조와 일치하는 컬럼과 값을 지정해야 합니다. 데이터의 유효성을 확인하고 제약 조건을 준수하는 등의 추가적인 작업을 수행할 수도 있습니다. INSERT INTO 문은 자주 사용하는 SQL문이고 사용하면서 특별하게 어려운 점은..
[MSSQL] 커서 (CURSOR) 사용법
커서 (CURSOR) mssql 명령어는 기본적으로 테이블에서 데이터를 처리할 때 집합 단위(Table)로 처리합니다. 하지만 특정 상황에 집합 단위가 아닌 행 단위(Row)로 데이터를 처리해야 하는 경우에 커서(CURSOR)를 이용하여 처리할 수 있습니다. 커서를 사용하면 테이블에서 여러 개의 행을 조회한 후 쿼리의 결과를 while 루프 안에서 한 행씩 처리해줍니다. 보통 DML(select, update, delete, insert)에서 사용됩니다. 커서의 특징 데이터를 집합 단위가 아닌 행 단위로 처리할 수 있어 주로 배치작업을 할 때 사용합니다. 집합 단위가 아닌 행 단위 작업 수행으로 처리 속도가 느리기 때문에 필요한 경우에만 사용하는 것이 좋습니다. 처리할 데이터가 적은 경우에는 문제가 되지..
[MSSQL/MySQL] Delete or Truncate?
안녕하세요 코북입니다. 오늘은 delete와 truncate의 차이점에 대해서 알아보겠습니다. delete와 truncate는 둘 다 테이블에 있는 row(레코드)를 삭제할 때 사용하는 명령어입니다. 저는 처음에 특정 조건으로 row를 삭제할 때 delete를 사용하고, row를 전부 삭제하고 싶을 때는 turncate를 사용하는 줄 알았는데.. 헷ㅎ 먼저 두 명령어는 레코드를 삭제할 때 사용하는 언어로 쓰임이 같지만, 그 종류가 다릅니다. Delete는 DML (Data Manipulation Language), 데이터 조작어로 데이터베이스에 입력된 레코드(row)를 조작하고 가공하는 언어입니다. 조회, 수정, 삭제하는 언어로 select, insert, update, delete가 그 예시입니다. T..
[error/mssql] 개체 'DF__x'은(는) 열 'x'에 종속되어 있습니다. 하나 이상의 개체가 이 열에 엑세스하므로 xx이(가) 실패했습니다.
안녕하세요 코북입니다. 회사 다니면서 블로그 글 쓰는 게 쉽지가 않네요.. 는 사실 핑계고 더 열심히 하면 쓸 수 있을 텐데 요새 조금 나태해진 것 같은 기분입니다. 억지로 힘을 내기보다는 자연스럽게 지내다 보면 다시 예전처럼 힘을 낼 수 있을거라고 생각하고 지내보려고합니다.. ㅎ화이팅 내 자신^^ mssql에서 컬럼을 삭제하려고 하는 경우 제목과 같은 '개체 'DF__x'은(는) 열 'x'에 종속되어 있습니다. 하나 이상의 개체가 이 열에 엑세스하므로 xx이(가) 실패했습니다.' 라는 에러가 발생했습니다. 컬럼 생성 시 default 제약조건을 걸었기 때문인데요. default 제약조건을 먼저 삭제한 후 컬럼을 삭제하면 에러 발생 없이 컬럼을 삭제할 수 있습니다. alter table 테이블명 drop..
[MSSQL/MySQL] 비교 연산자 <>, !=
안녕하세요 코북입니다. 가끔은 아주 기본적인 것들은 놓치곤 하는 것 같습니다. (가끔 아니고 자주일지도..) DB 수정하는데 표현식을 몰라서 당황했네요.. 하하하하하 이제부터 알면 되죠^^! 비교 연산자는 기본적으로 두 식이 동일한지 여부를 테스트합니다. text, ntext, image 데이터 형식의 식을 제외한 모든 식에 사용할 수 있습니다. 그중 , != 는 둘 다 같지 않다는 조건을 줄 때 사용합니다. 둘 다 같은 의미이고 성능의 차이도 없지만 굳이 둘 중 고르자면 를 사용하는 것을 권장하고 있다고 합니다. SQL 기본 문법에서 NOT EQUAL로 를 사용하고 있고 ISO 표준에도 맞기 때문입니다. 연산자 의미 같지 않음 != 같지 않음 (ISO 표준 아님) 예제) 게시판 테이블에서 6 타입이 아..
[MySQL/MSSQL] 프로그래머스 SQL문제 풀이#2
4. NULL 4-1. ★ NULL 처리하기 입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요. MySQL SELECT ANIMAL_TYPE, IFNULL(NAME,"No name") AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID MSSQL SELECT ANIMAL_TYPE, ISNULL(NAME,"No name") AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID ..
[MySQL/MSSQL] 프로그래머스 SQL문제 풀이#1
안녕하세요 코북입니다. 오늘은 프로그래머스에서 SQL 기본 문제들을 풀어봤습니다. 쉬운 문제라도 실제로 생각하고 적으면서 풀어보는 것과 눈으로만 보는 것은 큰 차이가 있는 것 같습니다. 오랜만에 문제 풀면서 재밌고 유익한 시간이었습니다. 너무 쉬운 문제들은 가져오지 않았고, ★이 있는 문제들은 틀렸거나 놓친 부분이 있는 문제들이었습니다. 1. SELECT 1-1. ★ 어린 동물 찾기, NOT IN 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION NOT IN ('Aged') ORDER BY ANIMAL_ID 1..
[MSSQL] 인덱스(INDEX) #1 + 페이지(Page)
안녕하세요 코북입니다. SQL을 공부할 때 INDEX에 대해서 많이 공부해보지 않았고 실제로 프로젝트 참여하면서 INDEX를 사용해 본 경험이 없었습니다. 하지만 실제 현업에서 대량의 데이터를 처리할 때 필수적으로 사용되는 게 바로 INDEX인 것 같습니다. 편식하며 공부했던 것을 반성하며 오늘은 INDEX에 대해 공부해보려고 합니다. Index에 대해 공부하기 전에, 페이지라는 용어에 대해 알고 있어야 합니다. 페이지(Page)? 책이 페이지로 구성되어 있는 것처럼 SQL 서버도 여러 Page로 구성되어 있으며 크기는 8KB입니다. SQL 서버의 가장 기본적인 단위로 실제로 SQL 서버에 데이터의 접근 시에는 Page 단위로 접근합니다. Page는 대부분 Data로 구성되어 있지만 일부 페이지는 인덱스..
[MSSQL] 트랜잭션과 @@TRANCOUNT
트랜잭션 트랜잭션을 왜 사용해야 할까? 데이터 베이스 Update문을 사용할 때 Update문은 굉장히 위험한 명령어이므로 꼭 트랜잭션 안에서만 사용해주셔야 합니다. 특히 Update문에 실수로 Where 절을 쓰지 않고 실행을 하게 되면 테이블에 있는 컬럼이 모두 바뀌게 되는데 이런 큰 실수를 하면 되돌릴 수도 없고 바로 사직서를 써야 하는 상황이 연출될 수도 있다고 합니다.. 그러므로 먼저 Update에 하기에 앞서서 Select문으로 자신이 바꿔야할 데이터를 조회한 뒤 꼭 트랜잭션 안에서 Update를 실행해주도록 하는 것이 좋습니다. 트랜잭션이란? 하나의 처리를 여러 단계로 나누는 기능을 트랜잭션(Transaction)이라 합니다. 하나의 처리를 Commit이라는 명령어를 수행하기 전 마지막으로 ..