목록DB (33)
썩구노트
DISTINCT는 주로 UNIQUE한 컬럼이나 튜플(레코드)을 조회하는 경우 사용되며, GROUP BY는 데이터를 그룹핑해서 그 결과를 가져오는 경우 사용되는 쿼리 형태이다. 하지만 두 작업은 조금만 생각해보면 동일한 형태의 작업이라는 것을 쉽게 알 수 있으며, 일부 작업의 경우 DISTINCT로 동시에 GROUP BY로도 처리될 수 있는 쿼리들이 있다. 그래서 DISTINCT를 사용해야 할지, GROUP BY를 사용해서 데이터를 조회하는 것이 좋을지 고민되는 경우들이 가끔 있다. 간단하게 아래 예를 살펴 보자 1. SELECT DISTINCT fd1 FROM tab; 2. SELECT DISTINCT fd1, fd2 FROM tab; 위의 두개 쿼리는 간단히 GROUP BY로 바꿔서 실행할 수 있다. ..
Overview안정적인 서비스 유지를 위해서는 쿼리 작성이 상당히 중요합니다. 잘못된 쿼리 하나가 전체적인 퍼포먼스를 크게 저해하기도 하고 최악의 경우 장애 상황까지 치닫기 때문이죠단일 코어에서 Nested Loop Join으로 데이터를 처리하는 MySQL 특성 상 쿼리 구문에 큰 영향을 받습니다. (반드시 알아야할 MySQL 특징 세 가지 참고)그래서 오늘은 쿼리 작성 시 기피해야 하는 사항 세 가지정도 골라봅니다.Case 1SELECT @RNUM:=@RNUM+1 AS RNUM, ROW.* FROM (SELECT @RNUM:=0) R, ( SELECT M.MASTER_NO, M.TITLE, MI.PATH, M.REGDATE, CM.TYPE FROM MAIN AS M LEFT OUTER JOIN TAB0..
MySql에서 Oracle에서 처럼 ROWNUM을 구하기 위한 방법을 찾다가 세션변수를 이용한 방법을 찾게 되었습니다. @rownum 을 사용하는 방법인데, 어떻게 활용하는지 알아보겠습니다. ▶ 사용법 1 SET 구문을 사용하여 초기화 ▶ 사용법 2 FROM절에서 초기화 ▶ 사용법 3 WHERE절에서 초기화 ▶ 사용예제 ▶ 초기화 구문이 없을 경우 ▶ JOIN문이 포함된 경우 SELECT 구문에 ROW번호를 구하기 위한 수식을 추가합니다. @rownum:=@rownum+1 ▶ 사용법 1 SET 구문을 사용하여 초기화 SET 구문을 사용하여 조회하기 전에 rownum을 초기화 하고, 데이터를 조회합니다. SET @rownum:=0; SELECT @rownum:=@rownum+1 FROM 테이블명; ▶ 사용..
출처 - http://cjbox.tistory.com/39where절에 if문처럼 and조건 사용하기where절 AND (((30 = A.QRY_RNG ) AND (A.REQ_DEPT LIKE '%'||''||'%')) OR ((10 = A.QRY_RNG ) and (A.RE...cjbox.tistory.com where절AND (((30 = A.QRY_RNG ) AND (A.REQ_DEPT LIKE '%'||''||'%')) OR ((10 = A.QRY_RNG ) and (A.REQ_DEPT LIKE '%'||?||'%'))) 위 구문을 풀이해보면 if (30 == A.QRY_RNG) { A.REQ_DEPT_LIKE '%'||''||'%'}else if ( 10 == A.QRY_RNG) { A.REQ_..
다음은 테이블(purchaseT) 정보이다. 이 테이블은 날짜와시간대 별로 각 회원의 구매물품을 저장한다. 다음은 테이블을 생성하기 위한 DDL문이다. 주석은 '--' 다음에 반드시 한칸(' ')을 띄어쓰기하고 기술해주어야 한다.create table purchaseT ( idx int not null primary key auto_increment, -- 구매정보idx member_id int not null, -- 회원id product_id int not null, -- 상품id buydate datetime not null -- 거래일자 ); idxmember_id product_id buydate 1gildong orange 2011-01-30 01:34:37 2mildongapple 2011-..
mysql 한달전 where reg_date >= date_add(now(), interval -1 month) 하루전 where reg_date >= date_add(now(), interval -1 day) 한시간전 where reg_date >= date_add(now(), interval -1 hour) +이면 후가 되겠죠! 기타 날짜 조건 select date_format(D_time,"%Y-%m-%d") from 테이블명 select date_format(D_time,"%H:%i::%s") from 테이블명 D_time 오늘인거 가져오기 select D_time from 테이블명 where date_format(D_time,"%Y-%m-%d") = current_date; 등록된지 24시간이 ..
SELECT COUNT(COLUMN NAME) FORM TABLE NAME COUNT 함수를 사용해서 갯수를 카운트 할 수 있습니다. 11341개의 카운트가 있고 중복을 제외하고 카운트를 하면, SELECT COUNT (DISTINCT COLUMN NAME) FROM TABLE NAME 을 사용하여 갯수를 카운트 할 수 있습니다. DISTINCT는 중복을 제거하기 위해서 사용합니다.
- UNIX_TIMESTAMP()함수 사용해서 long 타입의 날짜 뽑기 select UNIX_TIMESTAMP(필드명) from 테이블명 - DATETIME은 한 테이블에 여러개 존재 가능 vs TIMESTAMP 는 한 테이블에 하나만 가능 - DATETIME은 직접 insert 가능 vs TIMESTAMP 는 한 개의 Row 생성 시 자동 생성 됨. ---------------------------------------------------------------------------------------------------------- MySQL 날짜/시간 데이타형 time type(23:01:01등의 시간:분:초를 저장 컬럼-3바이트) date type(1000-01-01부터 9999-12-31 ..
MySQL은 시간을 나타내는 타입을 여러 형태로 제공한다 날짜와 시간 타입은 함께 혹은 조합을 이루어 사용될 수 있다. 특별히 타임스탬프 타입이 있는데, 이것은 어떤 레코드가 변경될 때 자동으로 갱신되고, 완전한 날짜가 필요한 것이 아니라면, 연 단위의 기간을 저장하는데 사용되기도 한다. 날짜 포맷에서 CC,YY,MM 그리고 DD라고 표기되는 항목은 각각 세기, 연, 월 그리고 일을 나타낸다. 시간 포맷에서 bb,mm 그리고 ss는 각각 시,분, 그리고 초를 나타낸다. DATE 의미 : 'CCYY-MM-DD'포맷으로 된 날의 값 허용되는 속성들 : 전역 속성 외에는 없다. 범위 : '1000-01-01' 부터 '9999-12-31' 영값 : '0000-00-00' 디폴트 값 : 칼럼이 NULL이 가능하면..
/* 테이블 생성 */ create table [테이블명](id int,name varchar(20)); /* 컬럼 추가 */ alter table [테이블명] add [컬럼명] [타입] [옵션]; ex) alter table [테이블명] add [컬럼명] varchar(100) not null default '0'; /* 컬럼 삭제 */ alter table [테이블명] drop [컬럼명]; /* 컬럼명 변경 및 타입 변경 */ alter table [테이블명] change [컬럼명] [변경할컬럼명] varchar(12); /* 컬럼 타입 수정 */ alter table [테이블명] modify [컬럼명] varchar(14); /* 테이블명 수정 */ alter table [테이블명] rename [..