서브쿼리
쿼리문 안에 또 쿼리문이 ㄷㄹ어있는 것
서브쿼리 사용하는 쿼리로 변환 예제
ex) 김경호보다 키가 크거나 같은 사람의 이름과 키 출력
SELECT name, height FROM usertbl WHERE height > 177;
▼
SELECT name, height FROM usertbl WHERE height > (SELECT height FROM usertbl WHERE name = 'kimKH');
ex) 지역이 경남인 사람의 키보다 크거나 같은 사람을 추출
서브쿼리의 결과가 둘 이상의 되면 에러 발생
ANY/ALL/SOME
ANY 하나만 만족해도된다. // 최소값
ALL 모두 만족해야 / / 최대값
IN()
()안에 특정값이나 서브쿼리의 결과값이 포함되는지를 체크
EXISTS()
()안에 오른쪽이 ()왼쪽에 존재하는지 유무만 확인
ORDER BY절
원하는 순서대로 정렬하여 출력
오름차순 (ASC) - 기본 디폴트값
내림차순(DESC)
ex) 가입한 순서대로 회원을 출력해보자
ex) 키가 큰 순서대로 정렬하되 만약 키가 같을 경우 이름 순으로 정렬하자.
ex) 회원 테이블에서 회원들의 거주지역이 몇 군데인지 출력하고 거주지를 오름차순으로 정렬하여 출력하자.
조건절에서 사용하는 LIKE에서 특수문자를 실제 문자로 인식하도록 적용시켜보자
조건절 LIKE를 사용해서 문자열에 '%' 가 포함된 데이터를 찾으려고 한다.
내가 조회하고자하는 데이터는 '손%꽁쥐' 이 데이터다.
하지만 LIKE '%'로 조회한다면?
WITH TEST_A (NAME) AS ( SELECT '손%꽁쥐' UNION ALL SELECT '손꽁쥐' UNION ALL SELECT '손_꽁쥐' ) SELECT * FROM TEST_A WHERE NAME LIKE '%'
결과 데이터
결과는 다음과 같이 모든 데이터가 출력된다.
LIKE 문에서 %는 실제 문자가 아닌 검색 기능에 해당하는 문자로 쓰이기 때문이다.
그렇다면, %를 실제 문자로 인식시켜보자
방법1.
LIKE '%문자 실제문자로인식시킬문자%' ESCAPE '문자'
방법은 위와 같고, 이것을 실제로 적용시켜보자.
WITH TEST_A (NAME) AS ( SELECT '손%꽁쥐' UNION ALL SELECT '손꽁쥐' UNION ALL SELECT '손_꽁쥐' ) SELECT * FROM TEST_A WHERE NAME LIKE '%#%%' ESCAPE '#'
결과 데이터
여기서 '#'는 임의대로 아무 문자나 사용한 것이고, 이외에도 \, &, a 등 아무 문자나 사용해도 상관없다.
방법2.
LIKE '%[검색할문자]%'
WITH TEST_A (NAME) AS ( SELECT '손%꽁쥐' UNION ALL SELECT '손꽁쥐' UNION ALL SELECT '손_꽁쥐' ) SELECT * FROM TEST_A WHERE NAME LIKE '%[%]%'
결과는 위의 예제와 마찬가지로 동일하다.
결과 데이터
DISTINCT
중복된 것은 하나만 남기는 DISTICT
LIMIT
출력개수를 제한
만약 LIMIT A , B 라면 A번쨰부터 B개 (0번부터 시작)
'DB > MY-SQL' 카테고리의 다른 글
MYSQL - GROUP BY , HAVING (0) | 2021.05.25 |
---|---|
MYSQL - 집계함수 COUNT()와 CREATE TABLE..SELECT (0) | 2021.05.25 |
MYSQL select 구문 (0) | 2021.05.24 |
MYSQL 릴레이션 (0) | 2021.05.24 |
MYSQL - 데이터베이스의 개념 (0) | 2021.05.24 |
댓글