[SQL첫걸음 ] 3장 정렬과 연산

2025. 3. 30. 15:30·도서 공부(정리)/SQL첫걸음

9강 정렬 - ORDER BY

ORDER BY구: 검색 결과의 행 순서를 바꿈 (열 오름차순으로 정렬)

MySQL 설치 포트 오류 해결방법 PID kill로
https://dana-study-log.tistory.com/entry/MySQL-MySQL-%EC%84%A4%EC%B9%98-3306-Port-%EC%98%A4%EB%A5%98

SELECT 열명 FROM 테이블명  (WHERE 조건식) ORDER BY 열명

검색조건 필요없는 경우 where 구 생략 가능

SELECT 열명 FROM 테이블명 ORDERBY 열명 DESC

DESC 붙이면 내림차순으로 정렬 descendant

ASC 붙이면 오름차순 정렬(생락가능, 기본값!) ascendant

 

문자열형 데이터의 대소관계는 사전식 순서에 의해 결정됨 (작음) ㄱ<ㄴ (큼)

주의: 문자열형 데이터 (VARCHAR), 수치형(INTEGER)는 대소관계가 다름! 

이는 테이블의 데이터를 참조한 것 뿐, 저장장치에 저장된 데이터의 행 순서를 변경하는 것이 아님

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

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

이때 정렬의 우선순위는 열명1부터 순서대로! []는 생략 가능함. NULL 값은 MySQL경우 가장 작은값으로 취급

 

11강 결과 행 제한하기 - LIMIT (표준SQL x, MySQL/PostgreSQL)

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

결과 행을 제한한다.

사용 예) 블로그 표시할 때, 10건 한번에 표시 x 한페이지에 3건씩 표시 등

최대행수이므로, 만일 최대행수보다 작은 행을 가지면 적게출력 ㅇㅇ

LIMIT 3 = WHERE no <=3 같은결과 출력 

차이점: 

LIMIT 반환할 행수 제한
WHERE WHERE구로 검색한 후 ORDER BY로 정렬된 뒤 최종처리

SQL Server 에서 유사 기능 "TOP"

Oracle "ROWNUM"

OFFSET 지정에 위치에 올 값 : 시작할 행 -1

SELECT 열명 FROM테이블명 LIMIT 행수 OFFSET 위치
ex)
SELECT * FROM sample33 LIMIT3 OFFSET 3;

결과 : 

no
4
5
6

:4행부터 3건의 데이터 표시 (offset의 경우 4행-1 해서3 입력한 것)

12강 수치 연산

+

-

*

/

% = MOD

SELECT 식1, 식2 FROM 테이블명
SELECT *, 식1 AS 열별명 FROM 테이블명

이처럼 입력시, 테이블에 오른쪽에 식에 따른 결과열이 추가됨. 해당 열의 별명은 AS를 사용. 해당 AS는 생략 가능하다.

다음은 예시이다.

SELECT *,price*quantity (AS) amount FROM sample34;
SELECT *,price*quantity "금액" FROM sample34;

별명을 한글로 지정하는 경우에는 더블쿼트로 둘러싸서 지정(MySQL에서는 백쿼트로 지정) ASCII 이외 문자이기때문~

더블쿼트(" ")로 둘러싸면 데이터베이스 객체 이름으로 간주

싱글쿼트(' ' )로 둘러싸면 문자열 상수

 

예약어와 같은 이름은 지정 불가능하나, 더블쿼트로 둘러싸서 지정하면 사용 가능.

SELECT *,price*quantity AS SELECT FROM sample34; // 불가능
SELECT *,price*quantity "SELECT" FROM sample34;  //가능

이름을 붙일 때 숫자로 시작 불가능 = 변수선언이랑 비슷하죵?

MySQL에서는 숫자로 시작 가능, 단 숫자만으로 구성하는 객체명 불가능

 

서버내부 처리순서 1)WHERE구 2)SELECT구 3) ORDER BY구 순서로 처리. 별칭 선언시 주의

SELECT구에서 지정 별명은 WHERE 구 안에서 사용 불가능.

SQL에서는 NULL != 0;, 즉 NULL + 1 = NULL 임. 모든 연산결과는 NULL

단. SELECT구에서 지정 별명은  ORDER BY구에서 사용 가능. 

나중에 처리되기 때문이다!

 

함수 사용법 : 함수(인수1, 인수2) 메소드선언방법이랑 유사

 

ROUND 함수 : 반올림해줌  사용예) ROUND(열이름)

DECIMAL 형 : 정수부, 소수부 자릿수 지정 가능 = 소수점 포함하는 수치 저장

 

반올림 자릿수 지정 : 

ROUND일반적으로 소숫점 아래 첫째자리에서 반올림,  ROUND(열명,1) = 둘째자리에서 반올림.-1 입력시 1단위, -2 입력시 10단위 지정.

TRUNCATE : 버림!

 

13강 문자열연산

MySQL에서는 CONCAT으로 결합.

SELECT CONCAT(열1, 열2) FROM 테이블명

 

SUBSTRING 함수

: 문자열 일부분 계산하여 반환

SUBSTRING('20140125001',5,2)

결과: '01'

5째자리부터 2자리 추출

 

TRIM 함수

: 문자열의 앞 뒤로 여분의 스페이스가 있을 경우, 이를 제거함 (단, 문자열 도중에 존재하는 스페이스는 제거 x)

TRIM('ABC    ')

결과 : 'ABC'

 

CHARACTER_LENGTH 함수

:문자열의 길이를 문자 단위로 계산해 돌려주는 함수

VARCHAR 형의 문자열은 가변 길이이므로 길이가 서로 다름.

문자열의 길이를 수치로 계산 가능하다!

줄여서, CHAR_LENGTH로 사용 가능

OCTET_LENGTH 함수

문자열의 길이를 바이트 단위로 계산해 돌려주는 함수

(단, 인코드하는 방식에 따라 필요한 저장공간의 크기가 달라진다. 바이트 경우

한 문자가 몇 바이트인가는 쓰이는 문자세트에 따라 다름.)

 

*문자 세트(character set)

반각문자 : 알파벳, 숫자, 기호 = ASCII문자

전각문자 : 한글 'EUC-KR', 'UTF-8' 등의 인코드 방식 사용 => 바이트 크기 달라짐.

 

문자세트 문자 수 바이트 수 ASCII =1바이트 동일
EUC-KR 12 19 한글 2바이트
UTF-8 12 26 한글 3바이트

 

14강 - 날짜연산

CURRENT_TIMESTAMP SURRENT_DATE INTERVAL

  

CURRENT_DATE = 오늘의 시스템 날짜

 

날짜시간형 : 날짜,시간 초단위로 저장

날짜/시간 데이터는 사칙연산 가능. 연산 시 날짜시간유형 데이터 반환 or 기간(간격) 차를 나타내는 기간형(interval) 데이터 반환

 

SELECT CURRENT_TIMESTAMP; <<표준 SQL, 인수 필요없음

 

(FROM생략 가능)

날짜 데이터는 서식을 지정 가능하다. 국가별로 다름.  Oracle의 경우 TO_DATE 사용

 

시스템날짜의 1일 후를 계산하기

SELECT CURRENT_TIMESTAMP + INTERCAL 1 DAY; // 전이라면 - 사용!

 

DATADIFF (mySQL에서만 사용)

: 두 날짜 사이에 차이가 얼마나 발생하는가를 알 수 있다., 날짜형 간의 뺄셈

 

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

1) 검색 CASE

CASE WHEN 조건식1 THEN 식1
[ WHEN 조건식2 THEN 식2 ]
    [ ELSE 식3]
END

 

COALESCE 함수

: 여러 개의 인수 지정, 주어진 인수 가운데  NULL이 아닌 값에 대해서는 가장 먼저 지정된 인수의 값 반환

 COALESCE(a,0)

a가 NULL이면 0출력

 

코드  => 문자(디코드)

코드 <= 문자 (인코드)

 

2) 단순 CASE

    WHEN 식 THEN 식 ...END (이때의 식은 조건식이 아님)

WHEN a = 1 THEN '남자'
WHEN a = 2 THEN '여자'
//CASE 문에는 두개의 구문이 있다.

 

 

주의) ELSE를 생략하면  ELSE NULL이 된다.

생략하지 말고 항상 지정하자.

 

단순 CASE문으로는 NULL값을 비교 불가능하다. (조건식못써주므로)

 

 

 

'도서 공부(정리) > SQL첫걸음' 카테고리의 다른 글

[SQL 첫걸음] 6장 데이터베이스 객체 작성과 삭제  (0) 2025.04.06
[SQL 첫걸음] 5장 집계와 서브 쿼리  (0) 2025.03.31
[SQL첫걸음] 4장 데이터의 추가, 삭제, 갱신  (0) 2025.03.30
[SQL 첫걸음] 2장 테이블에서 데이터 검색  (0) 2025.03.23
[SQL첫걸음] 1장 데이터베이스와 SQL/ 2장 테이블에서 데이터 검색  (0) 2025.03.23
'도서 공부(정리)/SQL첫걸음' 카테고리의 다른 글
  • [SQL 첫걸음] 5장 집계와 서브 쿼리
  • [SQL첫걸음] 4장 데이터의 추가, 삭제, 갱신
  • [SQL 첫걸음] 2장 테이블에서 데이터 검색
  • [SQL첫걸음] 1장 데이터베이스와 SQL/ 2장 테이블에서 데이터 검색
sihyes
sihyes
24학번 컴퓨터공학과
  • sihyes
    시혜적으로개발
    sihyes
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 단순 설정 (10)
      • 백엔드 공부(BE, AWS) (8)
        • 로그인&회원가입 (3)
        • 파일업로드&GPT (2)
      • 컴퓨터공학과 (51)
        • 운영체제 (0)
        • Artificial Intelligence (0)
        • Java 1 & 2 (23)
        • 컴퓨터네트워크 (3)
        • 모앱JavaScript (0)
        • Data structures (9)
        • 소프트웨어공학 (5)
        • 오픈SW플랫폼 제출용 (5)
        • Python - 문해프 (1)
      • 개인 프로젝트 (2)
        • 알바솔로몬 (1)
        • PLACO 프로젝트 (0)
      • 도서 공부(정리) (20)
        • 알고리즘 코딩 테스트 자바 편 (1)
        • SQL첫걸음 (8)
        • 코딩 자율학습 스프링 부트 3 자바 백엔드 개발 .. (6)
        • Do it! 지옥에서 온 문서 관리자 깃&깃허브 .. (5)
      • 개인공부정리페이지 (12)
        • 백준 & 프로그래머스 (3)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ㅇ
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
sihyes
[SQL첫걸음 ] 3장 정렬과 연산
상단으로

티스토리툴바