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;
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;
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;
SELECT 열명 FROM 테이블명 LIMIT 행수 OFFSET 위치
OFFSET은 표시하고자 하는 위치를 지정해준다.(첫번째 표시는 0으로 시작)
정렬 후 OFFSET으로 2번째에 있는 행 부터 3건만 표시
SELECT * FROM sample33 ORDER BY no LIMIT 3 OFFSET 1;
산술연산
+ - * / % MOD
테스트를 위해 데이터를 불러와주자
SELECT * FROM sample34;
SELECT 구로 연산하기
SELECT 식1,식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 + 1 = NULL
- 1 + NULL = NULL
- 1 + 2 * NULL = NULL
- 1 / NULL = NULL
10 % 3 -> 1
MOD(10,3) -> 1
숫자의 반올림을
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 = 소수점 둘째자리
문자열 결합 연산자
1.문자열 결합
SELECT * FROM sample35;
SELECT CONCAT(quantity,unit) FROM sample35;
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');
CASE WHEN 조건식1 THEN 식1 [WHEN 조건식2 THEN 식2...] [ELSE 식3] 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 열의 값을 반환 합니다.
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;