3장 – 정렬 및 조작

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 Server GETDATE 함수를 사용할 수 있지만 표준화 이전에 구현되었으므로 더 이상 사용되지 않습니다.

날짜 형식은 국가마다 다르며 대부분의 데이터베이스 제품은 날짜 형식을 임의로 지정하는 기능을 지원합니다.


오라클을 위해 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은 NVLSQL 서버는 ISNULL 기능이 있지만 특정 데이터베이스에만 해당됩니다.

NULL값을 반환할 때 표준 SQL은 다음을 규정합니다.

COALESCE 기능 사용