TIL 데이터베이스 심화 (2-1장)

finelinefe·2020년 10월 24일
0

DATABASE

목록 보기
11/12
post-thumbnail

💡 SELECT 구문

책을 공부하면서 예제로 사용된 주소 테이블을 임시로 만들어보았다.
그러다 책의 예제 중 특정 열의 값이 NULL인 것을 발견했는데, 이부분은 테이블을 생성할 때 NOT NULL을 써주지 않는한 기본값으로 NULL이 삽입 가능하다는것을 알게 됐다.
하지만 공백을 쓴다고 '' 이렇게 쓰게 되는 순간 STRING 형식으로 인지를 하기 때문에 이는 올바른 NULL 값을 입력하는것이 아니다. (아래 사진 참고) 그리고 테이블을 조회하면 아래와 같이 잘못 생성된다. 테이블 상에서 공백으로 나온다 해서 NULL 값인게 아니다. 그렇기 때문에 UPDATE 문을 사용하여 NULL 값으로 수정했다.


❗️SELECT 구문으로 전체 선택 및 FROM 구

SELECT 선택하고 싶은 열1, 열2... FROM [테이블명]


❗️ WHERE 구 = 특정한 조건을 필터링 하는 것과 비슷하다

SELECT 선택하고 싶은 열1, 2.. FROM [테이블명] WHERE [조건]

address_01테이블에서 이름, 주소를 출력하는데 이때 모든 데이터의 이름과 주소를 출력하는게 아니라 인천시에 사는 사람들의 이름과 주소만을 출력하도록 WHERE구에 조건을 추가하였다.

뿐만 아니라 WHERE 구는 다양한 조건이 지정가능하다.

* =  : ~와 같음
* <> : ~와 같지않음
* >= : ~ 이상
* <= : ~ 이하
* > : ~ 보다 큼
* < : ~ 보다 작음

그래서 더 추가적인 조건을 붙여서 출력해보았다.

Q. 주소가 서귀포시에 있으며 나이가 30세 이상인 사람을 출력하기

AND 조건을 추가로 붙여 나이 제한 조건을 충족하는 식을 작성했고 결과는 아래와 같다.


❗️ OR 조건이 많을때 = IN으로 OR 조건을 간단히

예를 들어서 주소가 서울시 이거나 부산시이거나 인천시 일 경우엔 OR 조건으로 작성시 세 번 써야한다는 점이 있다. 그러나 이보다 더 조건이 많아지면 그만큼 OR 조건도 많이 작성해야한다. 이럴때 번거로움을 피하기 위해서 IN을 사용한다.


❗️NULL 값 검색 =/ NULL, == IS NULL

NULL = IS NULL / NOT NULL = IS NOT NULL

NULL 값을 가진 데이터를 검색하는 경우에는 IS NULL을 사용해야 한다. 그 반대인 경우 IS NOT NULL을 사용한다. 일반적으로 NULL 값은 데이터가 없는 상태이므로 이를 숫자 0과 혼동해서는 안된다. 따라서 산술조건 연산이 불가능하다. 그렇기 때문에 IS NULL , IS NOT NULL로 찾는것이 편하다.

❗️ GROUP BY

GROUP BY 그룹은 숫자 관련 집계함수를 통해 사용할 수 있다.

* COUNT - 레코드의 수 계산
* SUM - 숫자를 더함
* AVG - 숫자의 평균
* MAX - 숫자의 최대
* MIN - 숫자의 최소

Q. 주소별로 사람 수 출력


❗️HABING 구 = WHERE 구가 지정한 '레코드' 내에 또다른 '집합' 조건 지정

Q. 한 사람만 있는 주소를 출력

SELECT address, <- 주소를 출력
COUNT() FROM address_01 <- address_01 테이블에서 전체를 카운트
GROUP BY address HAVING COUNT(
) = 1; <- 주소 필드에서 1인것만 그룹화


❗️ ORDER BY 구 = 출력 순서를 명시적으로 지정함

ASC  = 오름차순
DESC = 내림차순

Q. 나이가 적은 순서대로 이름과 나이를 출력

❗️뷰와 서브쿼리

CREATE VIEW [뷰 이름] ([필드 이름1], [필드 이름2]...) AS

뷰 = 테이블과 달리 내부에 데이터를 가지지 않음. 가상 테이블과 같다(= SELECT 구문을 저장만 함). 책의 예를 들어서 주소별로 사람수를 구하는 SELECT 구문을 뷰로 저장하면 아래와 같다.

madeView를 생성하고 조건을 찾을때는 테이블 이름대신 생성한 뷰의 이름을 넣어주면 조회가 가능하다.

하지만 뷰가 테이블과 비교해서 가지는 가장 큰 차이점은, 테이블은 내부에 데이터를 보유하고 있는 실제이지만 뷰는 데이터를 보유하고 있지 않는다는 점이다.

일반적으로 서브쿼리는 FROM구에 직접 지정하는 SELECT 구문을 서브쿼리라고 한다.
우선 서브쿼리 질의를 실습하기 위해 기존에 생성한 address_01 테이블과 다른 address_02 테이블을 생성했고 결과는 아래와 같다.

그 다음으로 이 두 테이블을 이용해 address_01테이블에서 address_02테이블에 있는 사람을 선택하는 것을 내부에서 서브쿼리를 사용하면 다음과 같다.

SELECT name      // 이름선택
FROM address_01  // 테이블 1에서
WHERE name IN(SELECT name FROM address_02);  // 테이블2의 이름 중에 공통이름 출력
profile
Backend Developer

0개의 댓글