Database/mysql tip: 21개의 글
쿼리에서 조건을 걸어 데이터가 return 0 row일때 쿼리에서 "값이 없다" 라는 결과를 리턴값으로 처리하는 방법을 사용해보려한다. 1. 테이블 생성하기 CREATE TABLE `CODE_TABLE` ( `CODE_CD` VARCHAR(10) NOT NULL COLLATE 'utf8_bin', `CODE_NM` VARCHAR(10) NOT NULL COLLATE 'utf8_bin' ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB; 코드테이블이라는 테스트 테이블을 생성한다. 코드테이블은 코드, 코드명 컬럼으로 구성된다. 2. 데이터 넣기 INSERT INTO CODE_TABLE VALUES('10','개발팀'); INSERT INTO CODE_TABLE VALUES('2..
Oracle에서는 CONNECT BY PRIOR, START WITH를 사용하여 자신의 ID와 연결된 부모 ID를 찾아가 계층적으로 쿼리결과를 뽑을 수 있다. 오라클에서만 제공하는 구문이다. -- UPMENU_ID에 연결된 MENU_ID가 계층적으로 표현된다. SELECT MENU_ID , UPMENU_ID FROM SYS_MENUINFO A CONNECT BY PRIOR MENU_ID = UPMENU_ID START WITH UPMENU_ID = '00000' 오라클 쿼리 결과 MySQL에서 위와 같은 계층형 쿼리로 구현하고자 한다면 Oracle에서 제공하는 구문을 사용할 수 없다. 아래는 테스트로 구현할 계층형 형태의 쿼리 결과이다. 동물 ┗말 ┗얼룩말 ┗조랑말 ┗망아지 ┗닭 ┗흰닭 ┗흰병아리 ┗흰달..
1. SQL EXPLAIN 정리 1.1 부서 테이블 select * from dbadev.dept ; 부서테이블에는 4개의 행 ( 4rows returned ) 1.2 직원 테이블 select * from dbadev.emp ; 직원테이블에는 14개의 행 ( 14rows returned ) 1.3 부서와 직원 테이블을 내부조인 SELECT a.deptno , a.dname , a.loc , b.empno , b.ename , b.job FROM dbadev.dept as a INNER JOIN dbadev.emp as b ON a.deptno = b.deptno WHERE a.deptno= '20' ; 1.4 EXPLAIN을 사용한 부서테이블과 직원테이블 내부조인 쿼리 실행결과 EXPLAIN SELECT..
MySQL 에서 JOIN에 대해 알아보도록 하겠습니다. 0. JOIN 개요 SQL JOIN 이라고 검색하면 나오는 유명한(?) 그림 입니다. 일단 이 그림만 보아도 JOIN에 대한 개념을 어느정도 잡을 수 있습니다. 1. 테스트할 데이터 준비 CREATE TABLE IF NOT EXISTS `member` ( `idx` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(50) NOT NULL, `username` varchar(50) NOT NULL, PRIMARY KEY (`idx`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `member` (`idx`, `email`, `username..
MySQL에서 도메인에 값들의 갯수를 세어야 할 때가 있습니다. 그럴 때 사용할 수 있는 것이 SUM과 IF의 조합입니다. 1. 테스트할 데이터 준비 CREATE TABLE IF NOT EXISTS `count_test` ( `id` int(11) NOT NULL, `state` enum('Y','N') NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `count_test` (`id`, `state`) VALUES (1, 'Y'), (2, 'Y'), (3, 'Y'), (4, 'Y'), (5, 'N'), (6, 'Y'), (7, 'N'), (8, 'Y'), (9, 'Y'), (10, 'N'); 2. 갯수 세기(SU..
스키마를 엑셀에 문서화 하고 싶을 때 다음과 같이 쿼리를 생성하여 csv 혹은 엑셀로 export하여 사용하면 된다. SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONCAT(DATA_TYPE,'(',IFNULL(CHARACTER_MAXIMUM_LENGTH,IFNULL(NUMERIC_PRECISION,'')),')') TYPE, COLUMN_KEY, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA NOT IN ('information_schema', 'performance_schema', 'mysql', 'isb_stg', 'isb_prd') ORDER BY TABLE_SCHEMA, TABLE_NAME,..
datetime 필드에서 날짜 혹은 시간만 SELECT 하려면 다음과 같이 하면 된다. SELECT DATE_FORMAT("2016-04-08 11:12:14", '%Y-%m-%d') DATEONLY, DATE_FORMAT("2016-04-08 11:12:14",'%H:%i:%s') TIMEONLY
날짜 별로 행의 갯수를 세야 할 때 다음과 같이 쿼리를 작성하면 된다. SELECT DATE_FORMAT(날짜 필드, '%Y%m%d') AS date, count(*) AS cnt FROM 테이블 이름 GROUP BY DATE_FORMAT(날짜 필드, '%Y%m%d') ORDER BY date DESC;
특정 필드가 업데이트 될 때 트리거를 작동하게 해야 할 때가 있다. 그럴 때는 다음과 같이 트리거를 생성하면 된다. CREATE TRIGGER tg_my_trigger AFTER UPDATE ON tbl_my_table FOR EACH ROW BEGIN if NEW.column1 OLD.column1 begin --작성 end END