혼자 공부하는 SQL(03-1)

Sea Panda·2022년 10월 4일
0

혼자 공부하는 SQL

목록 보기
4/5

한 5일? 정도 쉰 거 같다. 그 사이에 가족들이랑 뮤지컬도 보고, 강원도 여행도 갔다오면서 힐링 제대로 했다. 그리고 이제 부트캠프 개강까지 한 3일 남았는데 개강하고서도 개인적으로 계속 공부할 시간이 난다면 SQL도 최대한 빠른 시간 안에 끝내보도록 하겠다.

일단 오늘 공부한 내용은 한 게시글에는 정리 안할거고, 매 강의마다 올릴 생각이다. 정리하는게 컴터로 하다보니까 사진도 많고 글도 길어져서 나중에 찾아보기 편하게 하기 위함이다.

03-1 기본 중에 기본 SELCET ~ FROM ~ WHERE

  • 핵심 키워드: USE, SELECT ~ TO ~ WHERE, 관계연산자, 논리연산자, LIKE

0. 시작하기 전에

SELECT문은 구축이 완료된 테이블에서 데이터를 추출하는 기능을 한다. 즉, SELECT를 아무리 많이 사용해도 기존의 데이터가 변경되지는 않는다.

SELECT의 가장 기본 형식은 SELECT ~ TO ~ WHERE이다. 이외에도 다양한 조건식이 존재하고, 이를 통하여 데이터베이스에서 원하는 데이터를 뽑아낼 수 있다.

1. 실습용 데이터베이스 구축

1-1. 실습용 데이터베이스 개요

본 책에서는 저자가 작성한 DB인 market_db.sql를 이용하여 진행한다. 파일을 불러오는 방법은 다음과 같다.

❗ 파일 불러오는 법
1. sql 파일을 다운로드 받는다. (파일이 업로드 되어 있을 경우)
2. MySQL Wokrbench를 실행한다.
3. [File] - [Open SQL script]메뉴를 연다.
4. 다운로드한 파일을 선택 후 [열기]를 클릭한다.
5. Executr the selected portion of the script or everything 아이콘을 클릭해서 SQL문을 실행한다.
6. Table의 완성 상태를 확인한다.

위 과정을 끝내면 DB가 생성된다.

1-2. Market_db.sql 파일 내용 살펴보기

Market_db.sql을 열면 SQL문이 작성된 tab이 생성된다. 이 tab의 SQL을 살펴보겠다.

  1. DROP DATABASE는 market_db를 삭제하는 문장이다. 처음 실행할 때는 필요가 없는 문장이지만, 책을 계속 학습함에 있어서 market_db를 다시 실행할 일이 있기 때문에 기존의 DB를 삭제하는 SQL을 작성한 것이다.

  2. CREATE DATABASE는 데이터베이스를 새로 생성한다.

  3. USE는 데이터베이스를 선택하는 문장이다. [SCHEMAS]패널에서 데이터베이스를 더블 클릭해서 선택하는 것과 동일한 효과를 가진다.

  4. CREATE TABLE (name)은 (name)이라는 이름을 가지는 table을 만드는 문장이다. 그 아래에는 각행의 이름과 데이터 형식 등을 작성한다. 이때 VARCHAR가 처음 등장하는데 CHAR와의 차이점이 존재하나 이 장에서는 다루지 않고 일단 동일한 문자열을 입력하는 것으로 생각하고 넘어간다.

  5. buytable을 살펴보면 AUTO_INCREMENT가 처음 등장한다. 이는 자동으로 숫자를 입력해준다는 의미이다. 순번을 직접 입력할 필요 없이 자동으로 증가한다.

  1. INSERT문은 데이터를 입력해주는 문장이다. 구매 테이블(buy)의 첫 번째 열인 순번(num)은 자동으로 입력되므로 그 자리에는 NULL이라고 작성한다. 그러면 알아서 1부터 증가하면서 값이 입력된다.

2. 기본 조회하기: SELECT ~ FROM

2-1. USE문

SELECT문을 실행하려면 먼저 사용할 데이터베이스를 지정해야 한다. 현재 사용하는 데이터베이스를 지정또는 변경하는 형식은 아래와 같다.

이렇게 지정 후 다시 USE문을 사용하거나 다른 DB를 사용하겠다고 명시하지 않으면 앞으로 모든 SQL문은 market_db에서 수행된다.

2-2. SELECT문의 기본 형식

SELCET문은 처음에는 사용하기 간단하지만, 사실 상당히 복잡한 구조를 갖는다. 간단한 형태로 먼저 살펴보면 다음과 같다.


이 장에서는 SELECT ~ FROM ~ WHERE와 같이 기본적이고 핵심적인 형식을 먼저 살펴본다.

2-3. SELCET와 FROM


SELECT: 테이블에서 데이터를 가져올 때 사용하는 예약어이다.
*: 일반적으로 '모든 것'을 의미한다. 그런데 *가 사용된 위치가 열 이름이 나올 곳이므로 모든 열을 의미한다.
FROM: 'FROM'다음에 테이블 이름이 나온다. 테이블에서 내용을 가져온다는 의미이다.
member: 조회할 테이블의 이름이다.

즉, 위의 SQL을 해석하면 member 테이블에서 모든 열의 내용을 가져와라이다.

여기서 원래 테이블의 전체 이름은 데이터베이스_이름.테이블_이름의 형식으로 표현한다. 즉 원칙적으로는 SELCET * FROM market_db.member;로 작성해야한다. 하지만 데이터베이스 이름을 생략하면 USE문으로 지정해둔 DB가 자동으로 선택되기 때문에 두 쿼리가 동일한 것이다.

만일 전체 열이 아닌 필요한 열만 가져오고 싶을 경우에는 SELECT뒤에 가져오고 싶은 열의 이름을 입력하여 주면 된다. 이때 열 이름에 별칭(alias)을 지정할 수 있다. 열 이름 다음에 지정하고 싶은 별칭을 입력하면 되고, 공백이 포함될 경우에는 큰따옴표(")로 묶어둔다.

3. 특정한 조건만 조회하기: SELECT ~ FROM ~ WHERE

3-1. WHERE없이 조회하기

WHERE가 없이 SELECT ~ FROM만으로 테이블을 조회하면 테이블의 모든 행이 출력된다. 행이 적을 때는 문제가 없겠지만 수백만 건 이상이 된다면 데이터를 눈으로 찾아내는 것은 상당히 어려울 뿐 아니라, 고성능의 컴퓨터라도 부담이 될 것이다, 그래서 학습 등을 할 때와 같이 작은 데이터를 조회할 때를 제외한 SELECT문은 WHERE절과 함께 사용한다.

3-2. 기본적인 WHERE절

WHERE절은 조회하는 결과에 특정한 조건을 추가해서 원하는 데이터만 보고 싶을 때 사용한다.

SELCET 열_이름 FROM 테이블_이름 WHERE 조건식;
SELECT 열_이름
	FROM 테이블_이름
    WHERE 조건식;

위와 같이 두가지 형식이 존재하며, 세미콜론(;)이 나오기 전까지는 한 줄로 쓰든, 여러 줄로 쓰든 동일히다. SQL이 길거나 복잡한 경우에는 여러 줄로 나눠 쓰는 것이 좀 더 읽기 편하다.


문자형의 경우는 작은따옴표로 묶어주어야하고, 숫자형의 경우는 작은따옴표가 필요 없다.

3-3. 관계 연산자, 논리 연산자의 사용

숫자로 표현된 데이터는 범위를 지정할 수 있다. 예를 들어 키가 162이하인 회원을 검색하기 위하여 다음과 같은 관계 연산자 <=(작거나 같다)를 사용하여 조회할 수 있다.

만일, 2가지 이상의 조건읠 만족하도록 설정하고 싶다면 논리 연산자 AND를 이용해서 조회할 수 있다.

AND가 두 주건이 모두 만족해야 하는 것이라면, OR를 이용하면 두 조건 중 하나만 만족해도 조회할 수 있다.

3-4. BETWEEN ~ AND

AND를 사용하여 키가 163~165인 회원을 조회하고 싶으면 다음과 같이 SQL문을 작성해야 한다.

그런데 범위에 있는 값을 구하는 경우에는 BETWEEN~AND를 사용해도 된다.

두 출력의 결과가 동일한 것을 확인할 수 있다.

3-5. IN()

숫자로 구성된 데이터는 크다/작다의 범위를 지정할 수 있으므로 BETWEEN ~ AND를 사용할 수 있지만, 주소(addr)와 같은 데이터는 문자로 표현되므로 어느 범위에 들어 있다고 표현할 수 없다. 만약 경기/전남/경남 중 한 곳에 사는 회원을 검색하려면 다음과 같이 OR로 일일이 써줘야 한다.
여기서 IN()을 사용하면 코드를 훨씬 간결하게 작성할 수 있다.

두 SQL문의 결과는 동일하지만 IN()을 사용한 것이 보다 더 깔금한 것을 알 수 있다.

3-6. LIKE

문자열의 일부 글자를 검색하려면 LIKE를 사용해야 한다. 예를 들어 이름의 첫 글자가 '우'로 시작하는 회원은 다음과 같이 검색할 수 있다. 여기서 %는 무엇이든 허용한다는 의미이다. 즉, '우'뒤에 어떤 문자가 오던지 허용한다.

만일 한글자와 매치하고 싶다면 언더바(_)를 사용한다. 다음 SQL은 이름의 앞 두글자는 상관없고 뒤는 '핑그'인 회원을 검색한다.

0개의 댓글