본문 바로가기
DB/MY-SQL

MYSQL 서브쿼리 (IN,EXISTS, ALL/SOME/ANY), ORDER BY 절( DISTINCT, LIKE, LIMIT)

by ahhang0k 2021. 5. 24.

서브쿼리

쿼리문 안에 또 쿼리문이 ㄷㄹ어있는 것

서브쿼리 사용하는 쿼리로 변환 예제

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

댓글