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 |