9. 정렬 – ORDER BY
SELECT
주문하다 ORDER BY
구문을 사용하여 검색 결과의 행 순서를 변경할 수 있습니다.SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명
사용 형식
검색 조건이 필요하지 않은 경우 WHERE
문구는 생략가능
ORDER BY 열명
또는ORDER BY 열명 ASC
형식에서 사용하는 경우 열을 오름차순으로 정렬합니다.ORDER BY 열명 DESC
형식에서 사용하는 경우 열을 내림차순으로 정렬합니다.
숫자의 크기를 결정하여 정렬된 숫자 데이터/날짜/시간 데이터
문자열 데이터는 사전순으로 결정됩니다.
문자열 타입의 열에 숫자를 저장할 때 문자로 인식하므로 정렬 및 비교 연산을 사용할 때 주의가 필요하다.ORDER BY
출력 결과에서만 정렬된 상태로 참조되며 스토리지에 저장된 데이터의 행 순서 자체는 변경되지 않습니다.
10. 다중 열 정렬 지정
ORDER BY
사용하지 않을 경우 같은 값을 가진 행의 출력 순서는 당시 데이터베이스 서버의 상황에 따라 달라지며 일정하지 않게 된다.
그래서 항상 같은 결과를 얻고 싶다면 ORDER BY
구를 지정해야 합니다.
ORDER BY 다중 사양
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명1 ASC, 열명2 DESC ...;
위 형식 ,
다음을 통해 나열하여 다중 열 정렬을 지정합니다.ASC
의 경우 기본값이므로 생략 가능하나 기본값은 데이터베이스 제품에 따라 다를 수 있으며 가독성이 떨어집니다.
NULL
값이 있는 행은 정렬 시 맨 앞이나 맨 뒤에 표시되는데, 표준 SQL에는 규정이 없기 때문에 데이터베이스 제품마다 기준이 다르다.
mysql의 경우 NULL
값을 최소값으로 처리하여 ASC
/에서 처음으로 DESC
마지막으로 표시된 날짜
11. 결과 행 수 제한 – LIMIT
SELECT
명령의 결과로 반환되는 행을 제한하는 데 사용됩니다.
MySQL 및 PostgreSQL에서 사용 가능한 비표준 SQL 구문
한계
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수
위의 형식에서 최대 행 수를 숫자로 지정하여 사용합니다.WHERE
조건식 ORDER BY
모든 종류의 최종 처리 후
SELECT 열명 FROM 테이블명 WHERE 조건식 LIMIT 행수 OFFSET 위치
형태 LIMIT
다음 결과에서 오프셋 데이터를 출력할 수 있습니다.
OFFSET이 생략되면 기본값은 0입니다.
OFFSET은 페이지 매김에 사용할 수 있습니다.
LIMIT를 사용할 수 없는 경우
SQL 서버의 경우 LIMIT
대신에 SELECT TOP 행수 * FROM 테이블명;
형태 TOP
사용
오라클에서 SELECT * FROM 테이블명 WHERE ROWNUM <= 행수
형태 ROWNUM
사용
하지만 WHERE
에 따라 다르기 때문에 LIMIT
다를 수 있는 결과
12. 수치 연산
SQL에는 기본적으로 계산 함수가 포함됩니다.
산술 연산자 +
, -
, *
, /
, %
쓸 수 있는
NULL
모든 계산 결과는 NULL
~처럼 대하다
SELECT 절을 사용하는 작업
SELECT 식1, 식2... FROM 테이블명
다음과 같이 계산할 수 있습니다.
연산자와 피연산자 사이에는 공백이 필요하지 않습니다.
작업으로 지정된 식은 열 이름으로 지정됩니다.SELECT 식 AS 별명 FROM 테이블명
형태 AS
열 이름은 예약어를 사용하여 이름을 바꿀 수 있습니다.AS
한글의 별칭처럼 생략할 수 있습니다.
ASCII
텍스트 이외의 것을 지정하고 싶은 경우 "(더블쿼트)
또는 \(백쿼트)
데이터베이스 개체의 이름으로 간주되어야 합니다.
- 데이터베이스 개체의 이름으로 간주되는 경우 예약어를 사용할 수 있으며 숫자로 시작할 수 있습니다.
- 그렇지 않으면 예약어 및 숫자로 시작하는 숫자는 금지됩니다.
WHERE 절의 작업
WHERE 조건식
수치 계산을 포함한 계산은 조건식에서 수행할 수 있습니다.
그러나 데이터베이스 서버 내부 WHERE
문구 -> SELECT
구순으로 처리가 되기 때문에 SELECT
별명 WHERE
없는
ORDER BY 절의 연산
ORDER BY
커뮤니티에서도 ORDER BY 식
계산은 다음 형식으로 처리할 수 있습니다.ORDER BY
구문이 마지막으로 처리되기 때문에 SELECT
구문에 지정된 별칭을 사용할 수 있습니다.
기능
연산자 이외의 함수를 사용하여 연산을 수행할 수도 있습니다.
ROUND
기능: 반올림 함수, 반올림할 열을 첫 번째 매개변수로 취하고 두 번째 매개변수로 반올림할 자릿수를 지정합니다.
두 번째 인수가 없으면 기본값 0이 가정되고 소수 첫째 자리에서 반올림됩니다.
- 게다가
TRUNCATE
,SIN
,COS
,SQRT
,LOG
많은 기능 제공
13. 문자열 조작
+
/ ||
/ CONCAT
/ SUBSTRING
/ TRIM
/ CHARACTER_LENGTH
와 같은 명령이 있습니다.
문자열 연결
다른 데이터베이스 제품은 다른 방언을 사용합니다.
- 데이터베이스 서버
+
사용,문자열 + 문자열
형태 - 오라클, DB2, PostgreSQL
||
사용,문자열 || 문자열
형태 - 데이터 베이스
CONCAT
사용,CONCAT(문자열, 문자열)
형태
숫자 데이터도 연결할 수 있지만 연결 결과는 문자열 유형이 됩니다.
SUBSTRING 함수
문자열의 일부를 계산하고 반환합니다.
함수 이름은 데이터베이스에 따라 다릅니다.
SUBSTR
일부 경우에SUBSTRING(문자열, a, b)
서식을 지정하려면 a에서 b까지의 문자를 추출합니다.
트림 기능
문자열 앞과 뒤에 여분의 공백이 있으면 제거하십시오.
문자열 중간에 있는 공백은 제거되지 않습니다.CHAR
유형 문자열과 같이 문자열의 길이가 고정된 경우 공백을 채우기 위해 공백을 제거하는 데 사용할 수 있습니다.TRIM(문자열)
공백 및 공백 이외의 문자는 매개 변수를 사용할 때 제거할 수 있습니다.
CHARACTER_LENGTH 함수
문자열의 길이를 문자로 계산하고 반환하는 함수CHAR_LENGHT
함수 이름은 다음과 같이 축약될 수 있습니다.OCTET_LENGTH
의 경우 바이트 단위로 계산되어 반환됩니다.
- 그러나 문자당 바이트 수가 문자 세트마다 다르기 때문에 이 시점에서 주의해야 합니다.
14 라운드 날짜 계산
CURRENT_TIMESTAMP
/ CURRENT_DATE
/ INTERVAL
와 같은 명령이 있습니다.
날짜 및 시간 데이터를 저장하는 방법은 데이터베이스 제품에 따라 다릅니다.
- 날짜 및 시간을 저장할 수 있는 데이터 유형 지원
- 날짜는
DATE
형제 시간TIME
형제, 날짜 및 시간DATETIEM
협동 단체
SQL의 날짜
날짜 및 시간 데이터에 대해 4개의 산술 연산을 수행할 수 있습니다.
어떤 경우에는 동일한 datetime 타입의 데이터가 결과 값으로 반환되고, 다른 경우에는 interval 데이터가 반환됩니다.
시스템 날짜: 하드웨어의 시계에서 실시간으로 얻은 임시 데이터입니다.
- RDBMS는 또한 시스템 날짜 및 시간을 확인하는 기능을 제공합니다.
- 표준 SQL에서
CURRENT_TIMESTAMP
함수 실행 시간에 상대적인 시간 표시CURRENT_TIMESTAMP
인수를 받지 않고 괄호를 사용하지 않는 특수 함수입니다.
- 오라클에서
SYSDATE
함수, SQL ServerGETDATE
함수를 사용할 수 있지만 표준화 이전에 구현되었으므로 더 이상 사용되지 않습니다.
날짜 형식은 국가마다 다르며 대부분의 데이터베이스 제품은 날짜 형식을 임의로 지정하는 기능을 지원합니다.
오라클을 위해 TO_DATE
기능 사용 TO_DATE('2022/07/20', 'YYYY/MM/DD')
형식의 문자열 데이터를 원하는 형식의 날짜 데이터로 변환할 수 있습니다.
날짜의 덧셈과 뺄셈
기간형 수치 데이터로 날짜/시간형 데이터 가감산 가능CURRENT_DATE
: 시스템 날짜만 확인하는 기능INTERVAL N DAY
: N일 후를 나타내는 주기 상수
- 그러나 각 데이터베이스는 주기적 상수를 다르게 기술하고 있으며 상세한 정규화가 수행되지 않았습니다.
두 개의 datetime 데이터를 빼서 날짜 차이를 얻을 수 있습니다.
MySQL에서 DATEDIFF('2022-08-30', '2022-08-01')
다음과 같이 계산할 수 있습니다.
CASE 문을 사용하여 데이터 변환
CASE 문
간단한 경우 사용자 정의 함수를 작성하는 대신 CASE
도어 가공 가능
CASE WHEN 조건식1 THEN 조건식2
( WHEN 조건식2 THEN 식2 ... )
( ELSE 식3 )
END
WHEN
참일 경우 참과 거짓을 반환하는 절의 조건식 THEN
처리 섹션에 설명된 표현
거짓이면 WHEN
절의 조건식을 차례로 평가하여 조건식이 만족되지 않는 경우 ELSE
섹션에 설명된 표현식을 사용합니다.ELSE
생략 가능, 생략 가능 ELSE NULL
로 간주됩니다
다른 CASE 문
디코딩: 디지털 데이터를 정보로 변환
인코딩: 정보를 디지털 데이터로 변환
디코딩 CASE
도어 가공 가능
--검색 CASE
SELECT a AS "코드",
CASE
WHEN a = 1 THEN '남자'
WHEN a = 2 THEN '여자'
ELSE '미지정'
END AS "성별" FROM sample37;
--단순 CASE
SELECT a AS "코드",
CASE a
WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
ELSE '미지정'
END AS "성별" FROM sample37;
찾다 CASE
: 위의 형태로 CASE
문
단순한 CASE
: CASE
비교할 항목을 지정하여 WHEN
비교할 값만 설명할 수 있음
CASE 사용시 주의사항
CASE
달은 SELECT
분야뿐만 아니라 WHERE
아홉, ORDER BY
어디서나 사용할 수 있습니다ELSE
생략하는 경우 ELSE NULL
따라서 생략하지 않는 것이 좋습니다.
단순한 CASE
존재하다 WHEN
도착하다 NULL
당신이 지정하는 경우 NULL
비교 연산자와 비교할 수 없기 때문에 어떤 경우에도 참이 아닙니다.
그러므로 NULL
가치를 결정하다 IS NULL
사용해야합니다
오라클에서 디코딩 DECODE
내장 함수NULL
값을 반환하는 함수의 경우 Oracle은 NVL
SQL 서버는 ISNULL
기능이 있지만 특정 데이터베이스에만 해당됩니다.
NULL
값을 반환할 때 표준 SQL은 다음을 규정합니다.
COALESCE
기능 사용