최근에 SQL을 초심자의 마음으로 다시 공부하고 있습니다.
서브쿼리의 결과가 두 개 이상일 경우에 아래 SQL를 실행하면 오류가 납니다.
SELECT name, height FROM usertbl
WHERE height >= (SELECT height FROM usertbl WHERE addr = '경남');
이 때 서브쿼리 앞에 ANY/SOME/ALL을 사용하면 제대로 실행됩니다.
SELECT name, height FROM usertbl
WHERE height >= ANY (SELECT height FROM usertbl WHERE addr = '경남');
| 문법 | 내용 |
|---|---|
| ANY | 서브쿼리 여러 결과 중 한 가지만 만족 |
| SOME | ANY와 동일한 의미 |
| ALL | 서브쿼리의 여러 결과를 모두 만족 |
상위의 N개만 출력하려면 'LIMIT N' 구문을 끝에 붙이면 됩니다.
SELECT emp_no from employees
LIMIT 5;
시작하는 위치(Offset)을 지정할 수도 있다. 아래 예시는 0부터 시작하여 5개를 시작합니다.
SELECT emp_no from employees
LIMIT 0, 5;
삭제할 때도 마찬가지로 LIMIT를 붙여 상위 몇 건만 삭제할 수 있습니다.
DELETE FROM testTbl4 WHERE Fname = 'Aamer'
LIMIT 5;
SUM 같은 집계 함수는 WHERE 절에 나타날 수 없는데, 조건을 제한하고 싶을 때 HAVING을 씁니다. 순서가 중요한데, 꼭 GROUP BY 절 다음에 나와야 합니다.
SELECT userID, SUM(price*amount)
FROM buytbl
GROUP BY userID
HAVING SUM(price*aount) > 1000;
DELETE는 DML문이라 트랜잭션 로그를 기록하는 작업 때문에 삭제가 오래 걸립니다. 이에 비해 DROP/TRUNCATE는 DDL문이라 트랜잭션 로그를 기록하지 않아서 속도가 무척 빠릅니다. DROP은 테이블 전체 삭제, TRUNCATE는 테이블 구조는 남겨놓고 내용만 삭제합니다.
DELETE FROM bigTbl1;
DROP TABLE bigTbl2;
TRUNCATE TABLE bigTbl3;