본문 바로가기

SQL

[MYSQL]ORDER BY (정렬),이스케이프 문자, LIMIT, OFFSET, 패턴 매칭

반응형

ORDER BY

ORDER BY는 컬럼을 기준으로 정렬을 할 수 있도록 해주며,

ORDER BY 컬럼명 ASC (오름차순)

ORDER BY 컬럼명 DESC (내림차순) 으로 사용할 수 있다.

ORDER BY 컬럼명 ASC

SELECT Code, Name, Population 
FROM country WHERE Population <> 0
ORDER BY Population ASC;

1. contry 테이블 중 Code, Name, Pop  컬럼정보를 보고 싶은데 ~

2. 대신 Pop값이 0이 아니여야 해

3. 그리고 Pop값 기준으로 오름차순 정렬 해 줘 ~

오~~름차순

ORDER BY 컬럼명 DESC

SELECT Code, Name, Population 
FROM country WHERE Population <> 0
ORDER BY Population DESC;

마찬가지~

1. contry 테이블 중 Code, Name, Pop  컬럼정보를 보고 싶은데 ~

2. 대신 Pop값이 0이 아니여야 해

3. 그리고 Pop값 기준으로 내림차순 정렬 해 줘 ~

 

이스케이프 문자 ``

MYSQL에서는 작은 따옴표는 문자열을 뜻하기때문에 다음과 같은 명령문에서 ORDER BY 다음으로 '인구밀도'라고

입력하게 되면 원하는 결과값을 얻을 수 없다.

SELECT Name, Population, SurfaceArea, round(Population / SurfaceArea, 2) '인구밀도'
FROM country WHERE Population <> 0
ORDER BY `인구밀도` DESC;

여기서 작은 따옴표 대신 `` 이스케이프 문자를 사용하게 된다면 원하는 결과값을 얻을 수 있다.

이스케이프 문자 안에 입력된 정보는 그 정보 이름 자체를 나타내기에 원하는 값을 얻을 수 있게 된다.

 

예시로 

SELECT * FROM my_table WHERE name = 'John''s';

이러한 쿼리문이 있다면 문법 특성상 John과 s가 따로 구분되어 인지할 것이다.

하지만 `John' 's`로 입력하게 된다면 작은 따옴표를 포함한 이름으로 인지하게 된다.

(문자열 양쪽을 이스케이프문으로 감쌋음)

LIMIT, OFFSET

조회결과 범위를 제한해주는 LIMIT문과

조회결과 일정범위를 건너뛰어주는 OFFSET문을 활용한다면

원하는 조회값에 더 손 쉽게 접근할 수 있다.

SELECT 컬럼명 FROM 테이블명 ORDER BY 기준 컬럼명 DESC LIMIT 정수 OFFSET 정수

식으로 사용가능하다.

LIMIT

-- Continent 'Asia' 국가 중 면적이 좁은 탑 10개 국가
SELECT Continent, Name, SurfaceArea FROM country 
WHERE Continent = 'Asia'
ORDER BY SurfaceArea LIMIT 10;

1. country 테이블 중에서 Continent, Name, SurfaceArea 보고 싶은데 ~

2. 대신 Asia 대륙인 정보들만 !

3. 그 정보들 SurfaceArea 기준으로 오름차순 하고(ASC 생략가능) 10개만 보여줘 !

OFFSET

SELECT Name, Population FROM country ORDER BY Population DESC LIMIT 10 OFFSET 20;

1. country 테이블에서 ~ Name, Pop 컬럼 보고싶은데,

2. Pop컬럼 값 기준으로 내림차순 정렬 해 줘~

3. 근데 상위 20개 행은 건너뛴 후 10개 행만 보고싶어~

패턴 매칭

패턴 매칭은 관계연산자와 맥락은 비슷하지만 좀 더 유연하게 정보를 찾아준다.

사용법은 WHERE절 컬럼명 LIKE '%Korea%'; 

이렇게 사용하면 조회값 중 Korea라는 단어가 들어간 모든 값을 조회 해준다.

글자 수를 기준으로 조회도 가능하다.

 

사용법은 WHERE절 컬럼명 LIKE '______'; 

LIKE에 언더바를 원하는 글자 수 개수만큼 입력하면 된다.

나는 언더바 6개를 입력하였고 6글자인 정보들이 조회될 것이다.

-- 패턴 매칭 (비슷한 것을 찾아주는)
SELECT * FROM country WHERE Name LIKE '%Korea%';

-- 국가명이 'K'로 시작하는 국가
SELECT Name FROM country WHERE Name LIKE 'K%';
-- 국가명이 'K'로 끝나는 국가
SELECT Name FROM country WHERE Name LIKE '%K';
-- 국가명이 'K'가 포함되어 있는 국가
SELECT Name FROM country WHERE Name LIKE '%K%';

-- 국가명이 'A'로 시작하고 'A'로 끝나는 국가
SELECT Name FROM country WHERE Name LIKE 'A%A';
-- 국가명이 5글자인 국가
SELECT Name FROM country WHERE Name LIKE '_____';
-- 국가명이 'A'로 시작하고 'A'로 끝나는 국가 (6글자)
SELECT Name FROM country WHERE Name LIKE 'A%A' AND Name LIKE '______';
SELECT Name FROM country WHERE Name LIKE 'A____A';

 

반응형