728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 SQL을 보고 학습한 자료를 남깁니다.

SELECT문

SELECT문은 SELECT~FROM~WHERE 절로 사용되는 것이 가장 보편화된 방법이다.

무엇을 선택하라는 이야기잖아요.

테이블들을 가져와서 조회를 하는 것이 바로 SELECT문이다.

테이블들을 변경을 하는 것은 아니다.

읽기만 한다.

이 그림을 갖고 같이 공부를 해볼 것이다.

회원은 10건 그리고 구매는 12건이 있다.

샘플 데이터베이스가 MySQL에도 있고, 다른 데이터베이스도 샘플 데이터베이스를 제공을 해주는데 문제는 영문으로 제공을 해준다. 그래서 초보자 분들께서 사용을 하실 때 감이 안오는 경우가 많다.

인터넷 쇼핑몰이라고 보시면 되겠다.

인터넷 쇼핑몰을 가정해서 회원을 관리한다.

회원이 10명 있다. 이 회원이 물건을 구매한게 12건 있다.

이렇게 두 가지 테이블을 가지고 실습을 진행을 하겠다.

market_db 라고 데이터베이스 이름을 줄 것이다.

member 그리고 buy 이 두 가지 테이블이 있다.

회원 테이블과 구매 테이블은 1:N의 관계이다.

 

실습

File > Open SQL Script 를 클릭하면 

다음과 같이 SQL Script를 열 수 있다.

어떠한 SQL문도 드래그를 하지 않고 위의 번개 표시를 클릭을 하면

SQL Script가 실행된 것을 볼 수 있다.

만일 데이터에 문제가 생긴다면

다시 이와 같은 스크립트 파일을 실행을 하면 

DB를 DROP하고 다시 데이터 베이스를 만들고 DB를 적용하고 테이블들을 만들고, 데이터를 입력하고 마지막으로 SELECT문으로 테스트까지 한다.

_를 사용을 해서 컬럼명을 알아보기 쉽게 만든다.

-- 를 통해서 주석을 달아 각 컬럼에 대한 설명을 적을 수 있다.

핸드폰 번호의 경우 숫자이지만 계산을 하거나 하는 용도가 아니면 010처럼 숫자와 다른 형식도 들어가므로 문자열로 타입을 설정한다.

키는 SMALLINT로 작은 정수로 데이터 타입을 명시한다.

전화번호가 없는 회원이 있을 수 있다.

그래서 스크립트를 실행을 하면 항상 초기화가 된다.

다운로드를 하여서 저장해 놓는다.

SCHEMAS 창에서 우클릭을 하고 'Refresh All' 버튼을 클릭을 하면

SCHEMAS 창이 새로고침이 된다. 

그러면 market_db가 생성된 것을 볼 수가 있다.

모든 쿼리문의 끝은 ;(세미콜론)으로 끝난다.

*를 통해서 member 테이블의 모든 열들을 조회할 수 있다.

SELECT문을 실행을 하면 result창에 결과가 조회된다.

조회된 결과는 목록으로 나오며, 차례가 다를 수 있다.

알파벳 순으로 정렬이 된 것이다.

USE를 잘못 사용을 하면 다른 데이터베이스를 사용하게 될 수 있다.

USE문을 사용하면 다시 USE문을 사용할 필요는 없다.

하지만 USE문을 여러번 사용을 했다고 해서 문제가 생기는 것은 아니다. 그냥 다시 실행될 뿐이다.

실제로 데이터가 정말 많다면, WHERE 조건문을 사용해서 일부 내용만 파악을 해야 한다.

주로 SELECT문은 WHERE 조건절과 같이 세트로 사용이 된다.

이렇게 Enter를 쳐서 절을 나누어도 무방하다.

테이블은 market_db 데이터베이스 안에 있는 테이블을 실질적으로 조회를 하는 것이다.

따라서 위의 USE market_db문이 없더라도 market_db 데이터베이스 안에 있는 테이블을 조회가 가능하다.

예제에서는 market_db를 USE문을 사용하였으므로 SELECT문으로 조회할 시 market_db를 테이블 명 앞에 명시해줄 필요는 없다.

USE sys; 문을 사용을 하였다.

market_db를 테이블 명 앞에 명시를 해주었으므로 SELECT문을 조회를 하면 다시 market_db 안에 있는 member 테이블에서 데이터가 조회가 된다.

하지만, 여러 데이터베이스를 오가면서 데이터를 조회할 일은 거의 없다.

만일 오류가 발생하면 Output창에 조회가 발생한다.

초록색은 정상적으로 쿼리가 실행된 것이고,

만일 오류가 발생을 하면

이와 같이 빨간색으로 오류가 발생한 것을 볼 수 있다.

sys 데이터베이스에 member 테이블이 없다는 의미이다.

특정 테이블 컬럼을 조회해야 할 때는 먼저 SELECT * 구문을 사용하여 모든 테이블을 result 창에서 조회를 한 다음

필요한 컬럼만 다시 조회해서 SELECT문을 만들면 된다.

이렇게 특정 컬럼만을 하여 조회를 한 것을 볼 수 있다.

하지만 컬럼명이 영어로 되어있기 때문에 우리는 어떤 컬럼에서 정보를 가지고 왔는지 그리고 어떤 데이터를 가지고 왔는지 파악하기가 한눈에 어려울 수 있다.

이런 경우 Alias를 사용한다.

키 처럼 띄어쓰기가 없는 경우 Alias를 그냥 입력해도 되고,

데뷔 일자 처럼 띄어쓰기가 있는 경우 ""(쌍따옴표)로 묶어주어야 한다.

result에 조회된 결과는 컬럼명이 실제로 한글로 표기가 되었지만, 이는 참조일 뿐이며, height 또는 debut_date 컬럼명으로 결과가 조회된 것이다.

별명을 줄 수 있다.

다음과 같이 여러 WHERE 절을 이용한 구문들이 가능하다.

WHERE height <= 162 는 회원 테이블에서 평균 키가 162 이하인 그룹들을 조회하는 것이다.

만일 WHERE height >= 165 AND mem_number > 6 라면 두 조건을 모두 만족하는 그룹들이 조회가 될 것이다.

WHERE height >= 165 OR mem_number > 6 이라면 두 조건 중 하나라도 만족을 하는 그룹들이 조회가 될 것이다.

WHERE height >= 163 AND height <= 165 라면 평균키가 163이상이며 165이하인 그룹을 결과로 조회한다.

이는 WHERE height BETWEEN 163 AND 165와 완전히 일치하다.

WHERE addr = '경기' OR addr = '전남' OR addr = '경남' 은 AND로 엮는 것이 말이 안된다. 왜냐하면 한 멤버가 주소가 경기에서 살거나 전남에서 살거나 경남에서 사는 것은 말이 안되기 때문이다. 그래서 OR로 묶어주어야 경기에서 사는 멤버, 전남에서 사는 멤버 그리고 경남에서 사는 멤버가 모두 조회가 된다.

WHERE addr IN('경기', '전남', '경남'); 숫자가 아니라 문자 같이 띄어져 있는 것 떨어져 있는 것은 IN을 사용하면 됩니다.

LIKE의 경우 문자를 비교하는 것이다.

WHERE mem_name LIKE '우%' 자가 들어간다.

'우' 자가 들어가고 뒤에는 무엇이든지 관계가 없어요. =(이퀄)을 사용을 하면 결과가 조회가 안된다. 

한 개의 글자는 _(언더바)이다.

 

감사합니다.

https://www.youtube.com/watch?v=_JURyg_KzHE&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=7

 

728x90
반응형
LIST

+ Recent posts