본문 바로가기

개발하자/DB&SQL

(4)
인덱스 스캔과 테이블 풀스캔 * union을 사용 SELECT key, name, date_1, flg_1, date_2, flg_2, date_3, flg_3 FROM ThreeElements WHERE date_1 = '2013-11-01' AND flg_1 = 'T' UNION SELECT key, name, date_1, flg_1, date_2, flg_2, date_3, flg_3 FROM ThreeElements WHERE date_2 = '2013-11-01' AND flg_2 = 'T' UNION SELECT key, name, date_1, flg_1, date_2, flg_2, date_3, flg_3 FROM ThreeElements WHERE date_3 = '2013-11-01' AND flg_3 = 'T'..
윈도우 함수 RANK() , DENSE_RANK() *윈도우 함수로 순위 구하기 SELECT name, age, RANK() OVER(ORDER BY age DESC) AS rnk FROM Address; 실행결과 name | age | rnk --------+------+---- 하린 | 55 | 1 준 | 45 | 2 기주 | 32 | 3 민 | 32 | 3 인성 | 30 | 5 RANK 함수는 숫자가 같으면 같은 순위를 표시하고 다음 순위는 건너뛰게 된다. 건너뛰는 작업 없이 순위를 구하고 싶을 때는 DENSE_RANK함수를 사용한다. SELECT name, age, DENSE_RANK() OVER(ORDER BY age DESC) AS rnk FROM Address; 실행결과 name | age | rnk --------+------+---- 하린..
윈도우 함수로 카운트하기 *GROUP BY로 주소별 사람수를 계산하는 SQL SELECT address, COUNT(*) FROM Address GROUP BY address; 실행결과 address | count ----------+--------- 서울시 | 3 인천시 | 2 부산시 | 2 속초시 | 1 서귀포시 | 1 ====================== *윈도우 함수로 주소별 사람수를 계산하는 SQL SELECT address, COUNT(*) OVER(PARTITION BY address) FROM Address; 실행결과 address | count ----------+--------- 속초시 | 1 인천시 | 2 인천시 | 2 서울시 | 3 서울시 | 3 서울시 | 3 부산시 | 2 부산시 | 2 서귀포시 | 1..
mysql ALIAS_FOR_SUBQUERY SQL 오류 (1093): Table 테이블명 is specified twice, both as a target for 'INSERT' and as a separate source for data 와 같은 오류가 발생한다면 INSERT INTO 테이블명( ID, NAME, ORDER_NO ) VALUES ( 1, '테스트', ( SELECT IFNULL(MAX(ORDER_NO), 0) + 1 FROM 테이블명 ALIAS_FOR_SUBQUERY ) ) 테이블명 뒤에 ALIAS_FOR_SUBQUERY 와같이 서브쿼리 대상 테이블에 별명(alias)을 주면 해결된다.