[Data Base] MySQL ORDER BY,LIMIT,연산

HOHO·2023년 3월 14일

#MYSQL

목록 보기
6/17

ORDER BY를 이용한 정렬(sort)

use sample;
select *
from sample31
order by age; #나이를 기준으로 정렬
select * from sample31;
#ORDER BY age ASC - 오름차순 
#RDER BY age DESC - 내림차순

DESC -> Descendant(하강)
ASC -> Ascendant(상승)

  • ORDER BY는 따로 언급이 없으면 기본 오름차순 정렬이 된다(ASC)
  • ORDER BY는 테이블에 영향을 주지않는다

날짜시간형 대소관계

1999년 < 2014년 < 2023년
수치형과 같다

문자열형 데이터의 대소관계

a,b,c/ㄱ,ㄴ,ㄷ순으로 비교
(유니코드로 비교?)
사전식 순서에 의해 결정된다
알파벳 - 가나다 순


a column은 varchar타입을 갖고있다
ORDER BY로 오름차순 정렬 시행

  • 문자열형은 수치비교가아닌 사전식 순서로 비교했기 때문에 생기는 현상.

복수열 정렬

select * from sample311 order by a,b;
# a기준으로 먼저 정렬, 그다음에b정렬
select * from sample311 order by b,a;
#b먼저 정렬하고 a정렬
select * from sample311 order by a DESC,b DESC;
#정렬방법 지정해주기

NULL값 정렬

NULL값은 값자체가 없는 상태이므로 DBMS에 따라 기준이 다르다고한다
MYSQL에서는 NULL값을 가장 작은값으로 취급해서 정렬한다


결과행 제한 - LIMIT

페이징에 사용할수있다

MYSQL등에서 사용하며 표준SQL이 아니다
오라클에서는 ROWNUM을 사용한다고함.
-> DBMS에따라 제한이 있을수있다.

select * from sample311 order by a limit 제한할 행수

OFFSET지정

select * from sample311 order by a limit 3
offset 0
#3개의 행을 보여주고 오프셋은 0부터


차례대로 1,2,3번
테이블에 저장된 데이터 -> 1번
limit 3 오프셋 0 -> 2번
limit 3 오프셋 3 -> 3번


수치 연산

  • 계산결과를 위한 column은 따로 만들지않는다.
  • 곱셈은 애스터리스크(*) 를 사용한다
#select절 연산
select price*quantity from sample34;
#결과 행 이름지어주기
select price*quantity 
AS amount from sample34;
#AS는 생략가능
  • 아스키코드가 기준이므로 영어나 숫자이외에 한글로 AS (별명)을 만들경우 (" ")double quote를 감싸준다 -> AS "금액"
  • SQL은 double quote(" ")를 분석할때 데이터베이스 객체이름이라고 간주한다.
  • single quote(' ')는 문자열상수이다.

내부처리순서

#where절에서 연산/검색조건
select price*quantity 
AS amount from sample34;
where price*quantity >= 2000;

연산결과 행인 amount는 실제 존재하지않는 가상테이블이기 때문에

where amount >= 2000;

이 문장은 성립될수없다

MYSQL의 내부처리순서는
where -> select이므로 where절을 처리할때에는 amount라는 별칭이 아직 생성되기 전이다

하지만 ORDER BY는 가능함

select price*quantity 
AS amount from sample34;
ORDER BY amount

ORDER BY는 내부처리 순서에의해 제일 나중에 처리되기 때문에 별칭(amount)가 생성되고 난 이후 결과값 정렬이 가능하다

대략적인 내부처리 순서
조회테이블 확인(FROM) -> 데이터추출조건 확인(WHERE) -> 그룹핑(GROUP BY) ->그룹핑한 뒤 조건(HAVING) -> 데이터 추출(SELECT) -> 데이터 정렬(ORDER BY)


NULL연산

NULL + 1 * 3;
NULL/8;
4 - NULL
#전부 NULL. 
profile
기계 그잡채가 되고싶다

0개의 댓글