[SQL첫걸음] 3장

전수현·2021년 9월 15일
0

SQL

목록 보기
2/2

9강 정렬-ORDER BY

ORDER BY를 이용해 행 순서를 바꿀 수 있지만, 저장장치에 저장된 데이터의 행 순서를 변경하는 것은 아니므로 영향을 주지않는다고 기억하자!

SELECT * FROM sample.sample31;

age 열을 이용하여 정렬하기

SELECT * FROM sample31 ORDER BY age;

age 열을 이용하여 내림차순 정렬하기

SELECT * FROM sample31 ORDER BY age DESC;

age 열을 이용하여 오름차순 정렬하기
(ORDER BY는 정렬에 대해 지정하지 않으면 기본적으로 오름차순 정렬이다.)

SELECT * FROM sample31 ORDER BY age ASC;

10강 복수의 열을 지정해 정렬하기

SELECT 열명 FROM 테이블명 WHERE 조건식 
ORDER BY 열명1[ASC|DESC], 열명2[ASC|DESC]...

테스트를 위해 데이터를 불러오자

SELECT * FROM sample32;

a열과 b열을 같이 정렬해보자

SELECT * FROM sample32 ORDER BY a,b;

a열은 오름차순, b열은 내림차순으로 정렬해보자

SELECT * FROM sample32 ORDER BY a ASC, b DESC;

11강 결과 행 제한하기 - LIMIT

SELECT 열명 FROM 테이블명 LIMIT 행수 [OFFSET 시작행]

테스트를 위해 데이터를 불러오자

SELECT * FROM sample.sample33;

LIMIT를 이용해서 표시하고자 하는 행 수를 지정할 수 있다.

SELECT * FROM sample33 LIMIT 3;

정렬 후 LIMIT 3으로 상위 3건만 취득하기

SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;

OFFSET

SELECT 열명 FROM 테이블명 LIMIT 행수 OFFSET 위치

OFFSET은 표시하고자 하는 위치를 지정해준다.(첫번째 표시는 0으로 시작)

정렬 후 OFFSET으로 2번째에 있는 행 부터 3건만 표시

SELECT * FROM sample33 ORDER BY no LIMIT 3 OFFSET 1;

12강 수치 연산

산술연산

+ - * / % MOD

테스트를 위해 데이터를 불러와주자

SELECT * FROM sample34;

SELECT 구로 연산하기

SELECT1,2...FROM 테이블명

가격 x 수량으로 금액 계산하기

SELECT * , price * quantity FROM sample34;

price * quantity 식에 amount라는 별명 붙이기

SELECT * , price * quantity AS amount FROM sample34;

AS amount 에서 AS 는 생략이 가능하며 한글을 사용할 경우 더블쿼트 혹은 백쿼트로 감싸준다.

WHERE 구에서 연산하기

WHERE 구에서 금액을 계산하고 2000원 이상인 행 검색하기

SELECT *,price * quantity amount FROM sample34 WHERE price * quantity >= 2000 ;

위 식을 보게되면 WHERE구에서 amount라는 별명 대신 price * quantity 를 사용하는 것을 볼 수 있다. 위 식을 실행하게 되면 데이터는 뒤에았는 WHERE -> SELECT 순으로 데이터를 읽게 되는데 SELECT에서 지정한 amount 라는 임의의 열은 WHERE구를 읽을때는 발생하지 않은 상태이기 때문에 읽어들일 수 가 없기때문에 price * quantity를 사용해준다.

ORDER BY 구에서의 연산

ORDER BY 구에서 금액을 계산하고 오름차순으로 정렬하기

SELECT *,price * quantity amount FROM sample34 ORDER BY amount ASC; 

ORDER BY 뒤에는 SELECT 구에서 지정한 별명(amount)으로 정렬이 가능하다.
이는 서버 내부처리 순서가 WHERE -> SELECT -> ORDER BY 순이기 때문에 SELECT를 지날때 생기는 별명이 ORDER BY에서 적용가능하게 되는 것이다.

NULL 값의 연산

NULL값은 어떻게 계산하더라도 NULL값으로 나오게 된다.

  • NULL + 1 = NULL
  • 1 + NULL = NULL
  • 1 + 2 * NULL = NULL
  • 1 / NULL = NULL

함수

MOD함수

10 % 3 -> 1
MOD(10,3) -> 1

ROUND 함수

숫자의 반올림을

SELECT *, ROUND(,자릿수) FROM 테이블명

테스트를 위해 데이터를 불러오자

SELECT * FROM sample.sample341;

ROUND(column,자릿수) 자릿수에 아무것도 넣지않으면 소수점 첫번째 자리에서 반올림된다.

SELECT *,ROUND(amount) FROM sample341;

자릿수에 1을 넣으면 소수점 두번째 자리에서 반올림된다.

SELECT *,ROUND(amount,1) FROM sample341;

자릿수에 음수를 넣게 되면 정수 자리위치에 반올림 실시

SELECT *,ROUND(amount,-2) FROM sample341;

자릿수 숫자별 위치

-3 = 100단위
-2 = 10단위
-1 = 1단위
0 = 소수점 첫째자리
1 = 소수점 둘째자리

13강 문자열 연산

문자열 결합 연산자

1.문자열 결합

SELECT * FROM sample35;

SELECT CONCAT(quantity,unit) FROM sample35;

14강 날짜 연산

CURRENT_TIMESTAMP / CURRENT_DATE INTERVAL

SQL에서의 현재 날짜 불러오기

SELECT current_timestamp()

날짜의 덧셈과 뺄셈(현재날짜 + 1일)

SELECT CURRENT_DATE+INTERVAL 1 DAY ;

날짜형 간의 뺄셈
MySQL에서는 날짜형 간의 덧셈,뺄셈에서 DATEDIFF함수를 사용한다.

SELECT DATEDIFF('2021-08-27','2021-06-07');

15강 CASE 문으로 데이터 변환하기

CASE WHEN 조건식1 THEN1
	[WHEN 조건식2 THEN2...]
    [ELSE3]
END

WHEN 절에는 참과 거짓을 반환하는 조건식을 기술합니다.
해당 조건을 만족하여 이 되는 경우 THEN 절에 기술한 식이 처리됩니다.
WHEN 절의 조건식을 차례로 평가해 나가다가 가장 먼저 조건을 만족한 WHEN 절과 대응하는 THEN 절 식의 처리결과를 CASE 문의 결괏값으로 반환합니다.
그 어떤 조건식도 만족하지 못한 경우에는 ELSE 절에 기술한 식이 채택됩니다.
ELSE는 생략 가능하며 생략했을 경우 'ELSE NULL'로 간주됩니다.

SELECT * FROM sample.sample37;

a열에 있는 NULL값을 0으로 변환하는 CASE식

SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample37;


a열 값이 NULL일 때 WHEN a IS NULL 은 참이되므로 THEN 절의 '0'을 반환합니다. NULL이 아닌 경우에는 ELSE 절의 'a', 즉 a 열의 값을 반환 합니다.

COALESCE

NULL값을 변환하는 함수

SELECT a, COALESCE(a,0) FROM sample37;


주어진 인수 가운데 NULL이 아닌값에 대해서는 가장 먼저 지정된 인수의 값을 반환합니다. a가 NULL이 아니면 a값을 그대로 출력하고, NULL이면 0으로 출력합니다.

a열의 값이 1 = '남자'로 변환 2 = '여자', NULL = '미지정'으로 변환하는 식

SELECT a, CASE WHEN a=1 THEN '남자' WHEN a=2 THEN '여자' ELSE '미지정' END AS "성별" FROM sample37; 

profile
안녕하세요 :)

0개의 댓글