Database

주요 SQL 문법 1. 다중 조건문 (CASE문) CASE WHEN [조건1] THEN [조건1가 참일 경우 반환 값] WHEN [조건2] THEN [조건2가 참일 경우 반환 값] ELSE [조건들이 모두 거짓일 경우 반환 값] END2. 특정 문자열 포함 여부 확인 예시에서 검사하는 컬럼은 VARCHAR2 타입으로 간주한다. LIKE를 사용하는 경우 : 특정 컬럼의 값에 주어진 문자열이 속한다면 참을, 그렇지 않다면 거짓을 반환한다. -- WHERE절의 조건문으로 사용 SELECT * FROM ITEMS WHERE ITEM_NAME LIKE '%문자열%'; -- CASE문의 조건문으로 사용 SELECT CASE WHEN ITEM_NAME LIKE '%문자열%' THEN &#..
이번 프로젝트에서 사용되는 DB가 이전에 사용되던 것들과 달리 Oracle 19c로 변경되면서 드라이버를 버전업그레이드하였습니다. 그 직후 톰캣에 war 파일을 배포하려했더니 아래와 같은 메세지와 함께 애플리케이션 배포가 중단되었습니다.... Caused by: java.lang.NoClassDefFoundError: oracle/i18n/util/LocaleMapper ...Stackoverflow 등에서 몇 개의 글을 참고한 결과 oracle ojdbc8.jar에서 발생하는 문제인 것으로 보이고, 함께 다운로드되는 xmlparserv2가 충돌이 나는 것이라는 의견들이 많아 이를 제외하고 받도록 변경하였습니다. gradle에서 오라클 DB와 관련된 의존성은 아래가 다입니다.implementation(e..
-- 현재 사용자가 접근 가능한 모든 메타데이터 조회(OWNER 상관없이 모든 데이터 조회) SELECT * FROM ALL_TAB_TABLES WHERE TABLE_NAME = '[table name]'; // 해당 테이블 존재 여부 조회 SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '[table name][table name]'; // 해당 테이블의 모든 컬럼 조회 SELECT * FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = '[table name]'; // 해당 테이블의 제약조건과 컬럼 조회 SELECT * FROM ALL_CONSTRAINTS WHERE TABLE_NAME = '[table name]'; // 해당 테이블의 제..
주요 SQL 문법 1. 다중 조건문 (CASE문) CASE WHEN [조건1] THEN [조건1가 참일 경우 반환 값] WHEN [조건2] THEN [조건2가 참일 경우 반환 값] ELSE [조건들이 모두 거짓일 경우 반환 값] END2. 특정 문자열 포함 여부 확인 예시에서 검사하는 컬럼은 VARCHAR2 타입으로 간주한다. LIKE를 사용하는 경우 : 특정 컬럼의 값에 주어진 문자열이 속한다면 참을, 그렇지 않다면 거짓을 반환한다. -- WHERE절의 조건문으로 사용 SELECT * FROM ITEMS WHERE ITEM_NAME LIKE '%문자열%'; -- CASE문의 조건문으로 사용 SELECT CASE WHEN ITEM_NAME LIKE '%문자열%' THEN &#..
TIMESTAMP 타입의 컬럼을 생성할 때 Nullable과 Default Value 관련 유의할 사항입니다. TIMESTAMP 타입의 컬럼이 Nullable일 경우 TIMESTAMP 타입의 컬럼이 Nullable일 경우 NOT NULL과 대조되게 NULL을 명시해주어야 합니다. 그렇지 않으면 자동으로 NOT NULL로 생성됩니다. TIMESTAMP 타입의 컬럼의 Defult값이 없는 경우 첫 번째 TIMESTAMP 타입의 컬럼은 자동으로 DEFAULT current_timestamp() on update current_timestamp()의 형태로 생성되게 되고, 그 이후의 TIMESTAMP 타입의 컬럼은 자동으로 DEFAULT '0000-00-00 00:00:00'의 형태로 생성되게 됩니다.
· Database
MariaDB -- 해당 데이터가 존재할 경우 새로운 로우를 삽입하지 않는다. INSERT IGNORE INTO [TABLE NAME](COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...); -- 해당 데이터가 존재할 경우 해당 로우를 업데이트 한다. INSERT INTO [TABLE NAME](COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...) ON DUPLICATE KEY UPDATE COL1 = VAL1, COL2 = VAL2, ... Oracle INSERT INTO [TABLE NAME](COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...) WHERE NOT EXISTS(SELECT * FROM [TAB..
· Database
'SELECT COUNT(*) FROM ... WHERE ...'와 같이 특정 조건의 데이터 여부를 확인할 때 COUNT 함수를 사용하곤 하는데, 이 경우에는 조건에 맞는 데이터를 모두 쿼리한 다음 그 수를 세기 때문에 이럴 경우에는 EXISTS를 사용하는 것이 좋습니다. 'SELECT EXISTS(SELECT * FROM ... WHERE ...)'와 같이 EXISTS 함수를 사용하는 것이 훨씬 좋습니다.(이 경우에는 한 번만 쿼리합니다.) MariaDB SELECT COUNT(*) FROM TABLENAME WHERE VAL_COL1 = ? SELECT EXISTS(SELECT * FROM TABLENAME WHERE VAL_COL1 = ?) Oracle SELECT 1 FROM DUAL WHERE ..
사용자가 생성하지 않아도 DB의 메타 데이터를 가지고 있는 스키마가 있다. 개발을 하다보면 흔하게 마주칠 수 있는 녀석으로, INFORMATION_SCHEMA 스키마이다. 아래에 주로 필요한 경우를 나열하였다. 1. 테이블 정보(테이블명, 테이블이 속한 스키마 등) 조회 SELECT * FROM INFORMATION_SCHEMA.TABLES; 2. 컬럼 정보(컬럼명, 데이터타입과 데이터 크기, 기본값, NOT NULL 여부 등) 조회 SELECT * FROM INFORMATION_SCHEMA.COLUMNS; 3. 테이블 제약조건 조회 SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS; 4. 테이블 인덱스 조회 cf. `TABLE_CONSTRAINTS`와 조인하여 ..
본 게시글은 Datacamp의 Introduction to SQL 코스와 패스트캠퍼스의 SQL/DB 올인원 패키지 강좌를 수강하며 제가 기억할 수 있도록 작성한 것으로, 아주 기초적인 내용으로 구성되어 있습니다. SELF JOIN 동일 테이블 사이의 조인. 즉, 하나의 테이블이 특정 컬럼을 기준으로 자기 자신과 조인하는 것을 말한다. ex. country_code 컬럼을 기준으로 populations 테이블을 셀프 조인하여 각각을 p1, p2라고 명명하고, p1의 country_code, size(두 컬럼의 공통 컬럼으로 size2010, size2015의 두 개의 컬럼으로 표현할 것)을 조회 SELECT p1.country_code, p1.size size2010, p2.size size2015 FRO..
기본적으로 ALTER를 통해서 테이블의 정보를 수정할 수 있다. 테이블명을 수정할 때 역시 ALTER를 사용할 수 있는데, ALTER가 아닌 RENAME을 사용해서 테이블명을 변경할 수도 있다. RENAME TABLE [테이블명] TO [변경될 테이블명]; 그렇다면 RENAME과 ALTER의 가장 큰 차이점은 뭘까? 바로 RENAME을 사용할 경우 한번에 다수의 테이블명을 변경할 수 있으나, ALTER를 사용해서는 단일 테이블명 변경만 가능하다는 것이다. -- ALTER를 사용해 테이블명 변경 ALTER TABLE [테이블명] RENAME [변경될 테이블명]; -- RENAME을 사용해 다수의 테이블명 변경 RENAME TABLE [테이블명1] TO [변경될 테이블명1], [테이블명2] TO [변경될 테..
devYH
'Database' 카테고리의 글 목록