본문 바로가기

책 내용 정리/SQL 첫걸음

책 - SQL첫걸음

ORM 기술을 공부하다보니 복잡한 쿼리나 동적 쿼리의 경우 한계가 느껴졌다. 역시 SQL에 대해 자세히 알아야 됨을 깨닫고 이 책을 읽기 시작하게되었다. 자주 상기시키기 위해 챕터별로 정리하였다.

테이블 메타데이터 보기 : DESC 테이블명;

# 1-3.
많은 RDBMS가 클라이언트/서버 모델을 채택한다.
로컬에 Mysql 패키지를 설치하면 클라이언트/서버 모두 사용할 수 있다.

# 2-4.
SQL 명령 입력 후 ; 를 붙인다.
예약어와 데이터베이스 객체명(view) 는 대소문자를 구별하지 않는다.
열은 하나의 자료형만 가질 수 있다.
문자열상수는 ' ' 로 감싼다.
NULL 값 검색은 IS NULL을 사용한다. (ex. SELECT * FROM sample WHERE num IS NULL;)

# 2-7.
여러 조건식을 사용할 때는 AND, OR, NOT 사용가능. 우선순위는 AND 가 OR보다 높다.

# 2-8. 패턴 매칭에 의한 검색
LIKE 술어를 사용하면 문자열의 일부분을 비교하는 '부분 검색'을 할 수 있다.
이 때 메타문자 % _ 를 사용할 수 있다. (% 는 여러문자, _는 한 문자)
ex. word% 하면 word로 시작하는 행만 조회, %word% 면 word가 들어간 모든 행 조회

# 2-9. 정렬 - ORDER BY
수치형 데이터는 숫자 크기로 판별
문자열형 데이터는 사전순.
ex. 문자열형 칼럼 11, 10, 1, 2 가 있으면 1, 10, 11, 2 순으로 정렬 되는 것 주의
복수 열 지정해 정렬 : 정렬순서별로 지정 (ex. SELECT * FROM sample ORDER BY a, b;)

# 3-12. 수치 연산
no, price, quantity 가 있는 테이블에서 price*quantity를 계산한 값을 amount 칼럼으로 조회
SELECT *, price*quantity AS amount FROM sample;

ex. SELECT *, price*quantity AS amount FROM sample WHERE amount>2000; 를 실행하면
amount라는 칼럼이 존재하지 않는다는 에러가 발생한다.
-> WHERE 구와 SELECT 구의 내부처리 순서
-> WHERE 구에서의 행 선택, SELECT 구에서의 열 선택은 데이터베이스 서버 내부에서 WHERE구 -> SELECT구 의 순서로 처리된다. WHERE구로 행이 조건에 일치하는지 아닌지를 먼저 조사한 후에 SELECT 구에 지정된 열을 선택해 결과를 반환한다.
-> 결론 : SELECT에서 지정한 별명은 WHERE 구안에서 사용할 수 없다.

NULL 값을 연산하면 모두 NULL이다. ex. NULL +1 ,2*NULL 모두 NULL이다.
반면 ORDER BY 구 에서는 SELECT 구에서 지정한 별명을 사용 할 수 있다.
왜냐하면 서버에서 내부처리가 WHERE -> SELECT -> ORDER BY 순으로 처리되기 때문이다.

# 3-13. 문자열 연산

||, CONCAT, SUBSTRING, TRIM, CHARACTER_LENGTH

1) 문자열 결합
방언마다 다르지만 문자열 결합 : +, ||, CONCAT 등이 있다.
ex. 문자열 칼럼인 quantity, unit 에서 각각 10, 24, 1 과 개, 캔, 장 이 있을 때
SELECT CONCAT(quantity, unit) FROM sample;
하면 CONCAT(quantity,unit) 칼럼에 10개, 24캔, 1장 으로 조회 된다.

2) 문자열 추출
SUBSTRING('20140125001', 1, 4) -> '2014' 가된다. (앞 4자리 추출)

3) 그 외
TRIM : 문자열 앞뒤의 여분의 스페이스를 제거
CHARACTER_LENGTH : 문자열의 길이를 계산해 반환하는 함수

# 3-14. 날짜 연산

SELECT CURRENT_TIMESTAMP; (FROM 을 생략하였는데 ORACLE같은 전통적 DB는 FROM 생략 불가)
를 통해 현재 시스템 날짜 확인.
2014-10-23 10:12:11 로 출력.



# 4-16. INSERT
1. DESC 테이블명으로 칼럼의 타입을 본다.
2. INSERT INTO 테이블명 VALUES(각각 타입파라미터);
-> 이때 INSERT 는 데이터 추가 후 반환값은 없다. -> SELECT로 확인

데이터 추가할 열 지정하기 

INSERT INTO 테이블명(필드명, 필드명) VALUES(각각 타입파라미터);

-> 지정하지 않은 열은 NULL이 들어간다.

-> 이때 NOT NULL 제약이 걸려있는 열은 NULL 삽입 시 에러가 난다.

(-> NULL 확인은 IS NULL)

 

열을 지정하지 않으면 디폴트값으로 행이 추가된다. (각 열의 default 는 DESC로 확인 가능)

 

 

 

# 4-17. DELETE

DELETE : 테이블의 행을 삭제

DELETE FROM 테이블명 WHERE 조건식

WHERE 생략 시 모든 행 삭제

DELETE num FROM sample; 같이 열을 지정하여 그 열만 삭제할 수는 없다.

WHERE 조건식은 SELECT의 WHERE 같이 AND, OR 같은 연산자도 사용가능

 

# 4-18. UPDATE

UPDATE 테이블명 SET 열명=값 WHERE 조건식

DELETE와 달리 UPDATE는 셀 단위로 데이터를 갱신할 수 있다.(WHERE 생략 시 모든 행이 갱신된다.)

여기서 = 연산자는 비교 연산자가아닌 대입 연산자이다.

SET에 여러행을 지정하면 동시에 UPDATE 가능하다.

 

# 4-17. 물리삭제, 논리삭제

물리삭제 : 해당 레코드를 진짜 삭제(DELETE)

논리삭제 : 예를 들어 삭제플래그열의 값을 0->1로 변환(UPDATE)

-> SQL보다는 시스템 설계분야에 관함. -> 용도에 맞게 설계하자.

 

 

 

 

 

 

 

 

Recent Posts
Popular Posts
Recent Comments