교재: SQL 첫걸음, 한빛미디어
3장. 정렬과 연산
9강. 정렬 - ORDER BY
1. ORDER BY로 검색 결과 정렬하기
ORDER BY구로 정렬하고 싶은 열을 지정한다.
--WHERE 구 뒤에 ORDER BY 구를 지정하는 경우
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명
--FROM 구 뒤에 ORDER BY 구를 지정하는 경우
SELECT 열명 FROM 테이블명 ORDER BY 열명
2. ORDER BY DESC로 내림차순 정렬
--내림차순으로 정렬
SELECT 열명 FROM 테이블명 ORDER BY 열명 DESC
--오름차순으로 정렬
SELECT 열명 FROM 테이블명 ORDER BY 열명 ASC
단, 오름차순은 생략 가능
3. 대소관계
수치형 데이터의 대소관계
1<2<10<100
날짜시간형 데이터의 대소관계
1999년<...2013년<2014년
문자열형 데이터의 대소관계: 사전식 순서에 의해 결정
4. ORDER BY는 테이블에 영향을 주지 않는다.
서버에서 클라이언트로 행 순서를 바꾸어 결과를 반환하는 것뿐, 저장장치에 저장된 데이터의 행 순서를 변경하는 것은 아니다.
10강. 복수의 열을 지정해 정렬하기
1. 복수 열로 정렬 지정
--복수 열로 정렬하기
SELECT 열명 FROM 테이블명 ORDER BY 열명1, 열명2...
단, ORDER BY 뒤의 열 지정 순서에 따라 먼저 열 지정 우선순위가 달라진다.
2. 정렬방법 지정하기
--복수 열 정렬
SELECT 열명 FROM 테이블명 ORDER BY 열명1 [ASC\DESC], 열명2 [ASC\DESC]...
단, [ ] 생략가능, 기본값 ASC
3. NULL값의 정렬순서
NULL값은 대소 비교가 불가하기 때문에, ORDER BY에서 지정한 열에서 가장 먼저 표시되거나 가장 나중에 표시된다. MySQL에서는 ASC에서 가장 먼저 표시된다.
11강. 결과 행 제한하기 - LIMIT
1. 행수 제한
--LIMIT구
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수
LIMIT구는 SELECT 명령의 마지막에 지정
-LIMIT를 사용할 수 없는 데이터베이스에서의 행 제한
LIMIT는 표준 SQL이 아니기 때문에 MySQL, PosrgreSQL이외의 데이터베이스에서 사용 불가 ->'TOP 최대행수' 사용
SELECT TOP 3 * FROM sample33;
Oracle에서는 'ROWNUM' 사용하여 행 제한, ROWNUM: 각 행에 할당되는 행 번호
SELECT * FROM sample33 WHERE ROWNUM <= 3;
2. 오프셋 지정
OFFSET: 표시할 행 위치 지정
12강. 수치 연산
1. 사칙연산
연산자 | 연산 |
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 |
% | 나머지 |
우선순위 | 연산자 |
1 | * / $ |
2 | + - |
2. SELECT 구로 연산하기
3. 열의 별명
키워드 AS로 표시하며 생략가능
별명을 한글로 지정하는 경우에는 " "로 둘러싸기 ( DB 객체명: " ", 문자열 상수: ' ' )
데이터베이스 객체명은 '숫자'로 시작해서는 안된다. 하지만 더블쿼트로 사용 가능하긴 하다.
MySQL -> 숫자로 시작하는 객체명ㅇ, 숫자만으로 구성되는 객체명X
Oracle -> 숫자로 시작하는 이름X
4.WHERE 구에서 연산하기
SELECT *, price*quantity AS amount FROM sample34
WHERE amount >= 2000; --ERROR
-- DB 서버 내부에서 WHERE구-> SELECT구의 순서로 처리되기 때문에 WHERE구에 별명 넣기 불가하다
SELECT 구에서 지정한 별명은 WHERE 구 안에서 사용할 수 없다.
5. NULL 값의 연산
NULL로 연산하면 결과는 NULL로 된다.
6. ORDER BY 구에서 연산하기
ORDER BY 구에서는 SELECT 구에서 지정한 별명을 사용할 수 있다.
7. 함수
--함수 표기
함수명(인수1, 인수2...)
MOD함수-MySQL, Oracle 등에서 사용할 수 있는 함수
10 % 3 -> 1
MOD(10, 3) -> 1
-함수는 연산자와 표기 방법이 다를 뿐, 같은 것이다.
8.ROUND 함수
반올림에 사용
DEMICAL형: 소수부의 자릿수 지정
DEMICAL(p, S)
--p = precision (총 자리수), s = scale (소수점 이하 자리수)
-반올림 자릿수 지정
-3 | 100단위 |
-2 | 10단위 |
-1 | 1단위 |
0 | 소수점 첫째 자리 |
1 | 소수점 둘째 자리 |
13강. 문자열 연산
1. 문자열 결합
문자열 결합 연산자
연산자/함수 | 데이터베이스 |
+ | SQL Server |
\\ | Oracle, DB2, PostgreSQL |
CONTACT | MySQL |
2. SUBSTRING 함수
: 문자열 일부 계산해서 반환해주는 함수
-- 앞 4자리(년) 추출
SUBSTRING('20140125001', 1, 4) -> '2014'
-- 5째 자리부터 2자리(월) 추출
SUBSTRING('20140125001', 5, 2) -> '01'
3. TRIM 함수
: 여분의 스페이스가 있을 경우 이를 제거해주는 함수
--TRIM으로 스페이스 제거하기
TRIM('ABC ') -> 'ABC'
4. CHARACTER_LENGTH 함수
CHARACTER_LENGTH 함수: 문자열의 길이 계산해 돌려주는 함수
OCTET_LENGTH 함수: 문자열의 길이를 바이트 단위로 계산해 돌려주는 함수
-문자세트(character set)
인코드 방식(EUC-KR, UTF-8 등)은 RDBMS에서 문자 세트로 부르며, 한 문자가 몇 바이트인지는 쓰이는 문자세트에 따라 다르다.
+)반각문자: 알파벳, 숫자, 기호 등, 전각 문자: 한글
-문자열 데이터의 길이는 문제세트에 따라 다르다.
14강. 날짜 연산
1. SQL에서의 날짜
날짜나 시간 데이터 사칙연산 가능
동일한 날짜 시간 유형의 데이터로 반환, 또는 기간형 데이터(ex. 10일간)로 반환
-시스템 날짜(하드웨어 상의 시계로부터 실시간으로 얻을 수 있는 일시적인 데이터)
CURRENT_TIMESTAMP: 실행 시간 표시, 인수 필요x
-TO_DATE 함수: 문자열 데이터를 날짜형 데이터로 변환
TO_DATE('2014/01/25', 'YYYY/MM//DD')
2.날짜의 덧셈과 뺄셈
1일 후: a + 1 DAY
1일 전: a - 1 DAY
15강. CASE 문으로 데이터 변환하기
1. CASE문
CASE WHEN 조건식1 THEN 식1
[WHEN 조건식2 THEN 식2...]
[ELSE 식3]
END
-COALESCE 함수
SELECT a, COALESCE(a, 0) FROM sample37;
a가 NULL이 아니면 a값을 그대로 출력하고, NULL이면 0 출력
2. 또 하나의 CASE 문
CASE a -- CASE 뒤에는 대상만 적는다
WHEN a=1 THEN '남자' -- WHEN 뒤에는 값만 적는다
WHEN a=2 THEN '여자'
WHEN NULL THEN '데이터 없음' -- WHEN 절에서 NULL 지정
ELSE '미지정'
ELSE 생략 시 ELSE NULL이 된다
IS NULL 함수로 NULL 값 판정할 수 있다.
4장. 데이터의 추가, 삭제, 갱신
16강. 행 추가하기 - INSERT
1. INSERT로 행 추가하기
2. 값을 저장할 열 지정하기
테이블 명 뒤 ( )로 묶어 열을 나열하고, VALUES구에 값을 지정
3. NOT NULL 제약이 되어있는 구는 NULL 지정 시 에러
4. DEFAULT
: 명시적으로 값 지정하지 않았을 경우 사용하는 초깃값
또, 열을 지정하지 않으면 디폴트 값으로 행이 추가된다
17강. 삭제하기 - DELATE
DELATE FROM 테이블명 WHERE 조건식
--WHERE 조건에 일치하는 모든 행 삭제
18강. 데이터 갱신하기 -UPDATE
1. UPDATE로 데이터 갱신하기
-- UPDATE 명령
UPDATE 테이블명 SET 열명=값 WHERE 조건식
2. UPDATE로 갱신할 경우 주의사항
-- UPDATE 명령으로 증가 연산하기
UPDATE sample41 SET no=no + 1;
실행 결과, 모든 행의 no값에 1씩 더해진다
3. 복수열 갱신
-- UPDATE 명령
UPDATE 테이블명 SET 열명1=값1, 열명2=값2, ... WHERE 조건식
4. NULL로 갱신하기
-- NULL 초기화
UPDATE sample41 SET a=NULL;
19강. 물리삭제와 논리삭제
1. 두 종류의 삭제 방법
물리 삭제: SQL의 DELATE 명령을 사용해 직접 데이터를 삭제하자는 사고 방식
논리 삭제: 테이블에 '삭제 플래그'와 같은 열 미리 준비, '삭제 플래그'가 삭제로 설정된 행 제외하는 SELECT 명령 실행
2. 물리 삭제와 논리 삭제는 용도에 맞게 선택한다.
'SQL' 카테고리의 다른 글
SQL 첫걸음 7~8장 (0) | 2025.04.12 |
---|---|
SQL 첫걸음 5~6장 (0) | 2025.04.05 |
SQL 첫걸음 1장~2장 (0) | 2025.03.22 |