반응형

SQL 13

[SQL] NOT NULL과 DEFAULT의 차이 (중복 사용?)

[SQL] NOT NULL과 DEFAULT의 차이 (중복 사용?) NOT NULL과 DEFAULT 를 둘 다 선언할 필요가 있을까? 이에 대한 정답은, YES이다. NOT NULL과 DEFAULT는 엄연히 구분되는 것으로 NOT NULL만 선언한 경우, DEFAULT만 선언한 경우, NOT NULL과 DEFAULT 둘 다 선언한 경우 위 세 경우는 모두 다른 경우이다. 1. NOT NULL만 선언한 경우 (a) 해당 컬럼을 아예 insert 하지 않았을 때 → NOT NULL 동작 (b) 해당 컬럼에 NULL값을 넣어서 insert 했을 때 → NOT NULL 동작 위 두 가지 경우 모두 에러가 난다. 2. DEFAULT만 선언한 경우 (a) 해당 컬럼을 아예 insert 하지 않았을 때 → DEFAUL..

SQL 2022.08.24

[SQL] 에러해결 (ERROR: cannot insert a non-DEFAULT value into column "col1"Detail: Column "col1" is a generated column.)

[SQL] 에러해결 (ERROR: cannot insert a non-DEFAULT value into column "col1"Detail: Column "col1" is a generated column.) [에러 발생] INSERT 쿼리 작성 시 아래와 같은 에러가 떴다. ERROR: cannot insert a non-DEFAULT value into column "col1" Detail: Column "col1" is a generated column. [에러 원인] 확인해보니 테이블 생성시 컬럼 col1에 CASE WHEN문을 집어넣어 default 값을 만들어 놨었다. CREATE TABLE 스키마명.테이블명 ( --생략 , col1 VARCHAR (5) DEFAULT CASE WHEN (le..

SQL 2022.08.17

[SQL] "BETWEEN 날짜 AND 날짜" 경계값 조회 안 되는 경우 (MyBatis)

[SQL] "BETWEEN 날짜 AND 날짜" 경계값 조회 안 되는 경우 (MyBatis) Mybatis로 if문을 걸어서 sql 조회시 BETWEEN 조건으로 날짜 검색을 하는 경우 경곗값이 검색되지 않았다. AND date BETWEEN #{startDate} AND #{endDdate} startDate에 2022년 1월 1일을 넣고, endDate에 2022년 1월 31일을 넣는 경우 1월 1일 데이터와, 1월 31일 데이터는 검색되지 않았다. 2022년 1월 1일부터 2022년 1월 1일까지 검색하는 경우라면 1월 1일 데이터가 나오길 기대했지만 아무 것도 검색되지 않았다. AND date BETWEEN TO_DATE(#{startDate}) AND TO_DATE(#{endDdate}) 이는 엔..

SQL 2022.08.10

[PostgreSQL] insert시 seq 최댓값 + 1로 자동증가 입력 (MAX값 +1)

[PostgreSQL] insert시 seq 최댓값 + 1로 자동증가 입력 (MAX값 +1) PostgreSQL EDB는 Oracle과 호환되는 문법이 많다. PostgreSQL에서 insert시 seq 값을 최댓값 + 1로 자동증가 되게끔 입력하고 싶다면 아래 쿼리를 이용하면 된다. INSERT INTO 스키마명.테이블명 ( 컬럼명 ) VALUES ( (SELECT NVL(MAX(컬럼명), 10000000000) + 1 AS 컬럼명 FROM 스키마명.테이블명) ) 문법은 오라클 문법과 동일한데, 이는 PostgreSQL EDB에서는 동작한다. 위의 경우 insert되는 컬럼 값이 백억(10,000,000,000)이 넘을 가능성이 없기 때문에 충분히 큰 수인 백억으로 설정해둔 것이다. 이 경우 백억부터 ..

SQL 2022.07.13

[PostgreSQL] ::bpchar, ::character varying 의미

[PostgreSQL] ::bpchar, ::character varying 의미 postgresql에서 테이블 생성시 create 쿼리문에 아래와 같이 ::bpchar, ::character varying 이 자동으로 추가될 때가 있다. 이것은 무엇을 의미하는 걸까? CREATE TABLE t1 ( id NUMERIC (11) NOT NULL , mmbr_status CHARACTER (2) NOT NULL DEFAULT 'S' , country_code VARCHAR (8) NOT NULL DEFAULT '82' ) 위와 같이 테이블 생성 쿼리를 날린 후 생성된 테이블의 속성 값을 보면 아래처럼 뜬다. CREATE TABLE t1 ( id NUMERIC (11) NOT NULL , mmbr_statu..

SQL 2022.06.29

[SQL] Expected one result (or null) to be returned by selectOne(), but found: 2 해결 방법

Java에서 MyBatis를 이용해 SQL를 날릴 때 다음과 같은 에러 메시지가 떴다. Expected one result (or null) to be returned by selectOne(), but found: 2 에러 메시지는 참 정직하다. 위 에러 메시지가 무슨 의미인지 해석할 필요도 없이 영어를 한국어로 번역할 수만 있으면 해석 가능하다. 결과값이 1개 또는 null이 나와야 하는데, 실제 실행 결과 2개가 나왔다는 뜻이다. [해결 방법] 이런 경우에는 조회 쿼리를 날렸을 때 실제 조회되는 데이터를 확인해봐야 한다. select 쿼리를 날렸다면 조회된 데이터가 콘솔에 뜰 것이다. 이를 직접 확인해보고 데이터가 몇 개가 나왔는지 확인해보자. 우선, 나는 페이징 처리를 하기 위해 데이터의 총 co..

SQL 2022.06.22

[SQL] LIKE 검색, NULL 함수, GROUP BY - HAVING (간단한 설명)

[SQL] LIKE 검색, NULL 함수, GROUP BY - HAVING (간단한 설명) LIKE 검색 정확한 키워드를 모를 경우 일부만으로 검색하는 방법 와일드카드(%, _)를 사용하여 패턴 매칭 %: 0~n 글자 _: 한 글자 SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE 패턴 LIKE 검색은 매칭하기 위해 DBMS에 부담이 많으므로 LIKE에 OR과 같은 논리조건자를 중복해서 사용하지 않는 것이 좋음 --바람직하지 않은 예 SELECT * FROM 테이블명 WHERE LIKE 컬럼명1 LIKE ... OR 컬럼명2 LIKE ... ; NULL 값 NULL이랑 해당 컬럼의 값이 없다는 의미 (해당 컬럼이 NULL값을 허용하는 경우) NULL값을 가지고 있는 컬럼을 검색하려면 IS ..

SQL 2022.04.14

[SQL] JOIN 개념 및 종류, VIEW(뷰), SELECT INTO, INSERT INTO SELECT, CASE ... WHEN ... END

[SQL] JOIN 개념 및 종류, VIEW(뷰), SELECT INTO, INSERT INTO SELECT, CASE ... WHEN ... END JOIN의 개념 서로 다른 테이블을 공통 컬럼을 기준으로 합치는(결합하는) 테이블 단위 연산이다. 조인의 결과 테이블은 이전 테이블의 컬럼 수의 합과 같다. 조인시 서로 다른 테이블에 같은 컬럼명이 존재하면 구분을 위해 테이블명.컬럼명으로 사용해서 표시한다. SELECT * FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼명 = 테이블2.컬럼명 ... JOIN의 종류 조인 시 NULL값을 허용 여부에 따라 내부조인(불가)와 외부조인(허용)으로 구분한다. INNER JOIN 조인 시 NULL값을 허용하지 않음 (NULL값을 가진 레코드는 조인 결과에서 ..

SQL 2022.04.11

[SQL] SQL, CRUD 기초 (간단한 설명)

[SQL] SQL, CRUD 기초 (간단한 설명) SQL (Structured Query Language) 데이터베이스에 있는 필요한 정보를 사용할 수 있도록 도와주는 언어 사용방법이나 문법이 다른 언어(Java, C, C#, VB 등)보다 단순하다. 하나를 배워두면 모든 DBMS에서 사용 가능하다. 인터프리터 방식이다. 대소문자를 구별하지 않는다. (Case Insensitive) - 단, 데이터 내용은 대소문자를 구별한다. (Case Sensitive) SQL의 종류 DML (Data Manipulation Language, 데이터 조작 언어) 테이블의 데이터를 조작하는 기능 테이블의 레코드를 CRUD INSERT (데이터베이스 객체에 데이터를 입력한다.) DELETE (데이터베이스 객체에 데이터를 ..

SQL 2022.04.07

[SQL] DBMS, SQL 기초 (간단한 설명)

[SQL] DBMS, SQL 기초 (간단한 설명) DBMS란? DBMS는 Data Base Management System의 약자로, 데이터베이스(DB)를 관리하는(Managemenet) 시스템(System)을 의미한다. 이때 DB(Database)는 테이블들이 모여 이루는 데이터 단위이다. 데이터를 저장하고 유지보수(수정, 삭제, 추가)하고 이를 검색하는 시스템이다. - CRUD(Create, Retrieve 또는 Read, Update, Delete) 대량의 데이터를 처리하는 시스템이다. 다양한 자료구조와 검색구조(정렬, 인덱싱 등)를 사용해 빠른 검색이 가능하다. 대부분의 시스템은 R(검색)의 빈도 수가 CUD(업데이트)보다 압도적으로 많다. RDBMS는 검색(R)에 최적화된 시스템이다. - 쓰기(..

SQL 2022.03.31
반응형