본문 바로가기

SQL

SQL 첫걸음 3장~4장

교재:  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 열명

sample31
age열로 정렬
address열로 정렬

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 뒤의 열 지정 순서에 따라 먼저 열 지정 우선순위가 달라진다.

a열과 b열로 정렬하기
b열과 a열로 정렬하기

2. 정렬방법 지정하기

--복수 열 정렬
SELECT 열명 FROM 테이블명 ORDER BY 열명1 [ASC\DESC], 열명2 [ASC\DESC]...

단, [ ] 생략가능, 기본값 ASC

a열은 오름차순, b열은 내림차순으로 정렬

3. NULL값의 정렬순서

NULL값은 대소 비교가 불가하기 때문에, ORDER BY에서 지정한 열에서 가장 먼저 표시되거나 가장 나중에 표시된다. MySQL에서는 ASC에서 가장 먼저 표시된다.

 

 

11강. 결과 행 제한하기 - LIMIT

1. 행수 제한

--LIMIT구
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수

LIMIT구는 SELECT 명령의 마지막에 지정

 

lIMIT 3으로 상위 3건만 취득하기
정렬 후 lIMIT 3으로 상위 3건만 취득하기

-LIMIT를 사용할 수 없는 데이터베이스에서의 행 제한

LIMIT는 표준 SQL이 아니기 때문에 MySQL, PosrgreSQL이외의 데이터베이스에서 사용 불가 ->'TOP 최대행수' 사용

SELECT TOP 3 * FROM sample33;

 

Oracle에서는 'ROWNUM' 사용하여 행 제한, ROWNUM: 각 행에 할당되는 행 번호

SELECT * FROM sample33 WHERE ROWNUM <= 3;

 

2. 오프셋 지정

 OFFSET: 표시할 행 위치 지정

OFFSET 0으로 첫 번째 페이지 표시
OFFSET 3으로 두 번째 페이지 표시

 

12강. 수치 연산

 

1. 사칙연산

연산자 연산
+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지

 

우선순위 연산자
1 * / $
2 + -

 

 

2. SELECT 구로 연산하기

SELECT 구로 금액 계산하기

 

3. 열의 별명

키워드 AS로 표시하며 생략가능

SELECT 구에서 식의 별명 붙이기

별명을 한글로 지정하는 경우에는 " "로 둘러싸기 ( DB 객체명: " ", 문자열 상수: ' ' )

데이터베이스 객체명은 '숫자'로 시작해서는 안된다. 하지만 더블쿼트로 사용 가능하긴 하다.

MySQL -> 숫자로 시작하는 객체명ㅇ, 숫자만으로 구성되는 객체명X

Oracle -> 숫자로 시작하는 이름X

 

4.WHERE 구에서 연산하기 

WHERE 구에서 금액을 계산하고 2000원 이상인 행 검색하기

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 구에서 금액을 계산하고 내림차순으로 정렬하기

 

ORDER BY구에서 별명을 사용해 정렬하기

ORDER BY 구에서는 SELECT 구에서 지정한 별명을 사용할 수 있다.

 

7. 함수

--함수 표기
함수명(인수1, 인수2...)

 

MOD함수-MySQL, Oracle 등에서 사용할 수 있는 함수

10 % 3 -> 1

MOD(10, 3) -> 1

-함수는 연산자와 표기 방법이 다를 뿐, 같은 것이다.

 

8.ROUND 함수 

반올림에 사용

ROUND로 반올림

DEMICAL형: 소수부의 자릿수 지정 

DEMICAL(p, S)
--p = precision (총 자리수), s = scale (소수점 이하 자리수)

 

 

-반올림 자릿수 지정

소수점 둘째 자리 반올림

 

-3 100단위
-2 10단위
-1 1단위
0 소수점 첫째 자리
1 소수점 둘째 자리

ROUND 함수의 두 번째 인수를 지정해 10단위를 반올림

 

 

13강. 문자열 연산

 

1. 문자열 결합

문자열 결합 연산자

연산자/함수 데이터베이스
+ SQL Server
\\ Oracle, DB2, PostgreSQL
CONTACT MySQL

CONCAT함수를 이용해 두 열 결합

 

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

CURRENT_TIMESTAMP

 

-TO_DATE 함수: 문자열 데이터를 날짜형 데이터로 변환

TO_DATE('2014/01/25', 'YYYY/MM//DD')

 

2.날짜의 덧셈과 뺄셈

시스템 날짜의 1일 후 검색

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로 행 추가하기

sample35

 

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