관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

SQL 기본 문법 2 - 기본 중의 기본 SELECT ~ FROM ~ WHERE 2 : SELECT 기본 조회 및 특정 조건만 조회하기 본문

알고리즘 및 자료 관리/SQL

SQL 기본 문법 2 - 기본 중의 기본 SELECT ~ FROM ~ WHERE 2 : SELECT 기본 조회 및 특정 조건만 조회하기

huenuri 2024. 10. 12. 22:10

SELECT 문으로 기본 조회와 특정 조건을 조회하는 방법을 학습해 볼 것이다. 엘리스도 이 부분을 모두 공부해서 알고 있지만 MySQL은 처음이나 기본부터 차근차근 공부해 보자.


 

 

 

 

기본 조회하기 : SELECT ~ FROM

이제 본격적으로 '인터넷 DB 구성도'를 활용해서 SELECT 문을 배워보겠다.

 

USE 문

SELECT 문을 실행하려면 먼저 사용할 데이터베이스를 지정해야 한다. USE 문은 사용하려는 데이터베이스가 한 개가 아니라는 뜻이다.

 

 

USE 문을 쓰는데 market_db가 패널창에서 보이지 않으면 Refresh All을 클릭해서 새로고침을 한다.

 

 

 

이제 market_db가 잘 보인다.


 

 

 

SELECT 문의 기본 형식

SELECT 문은 처음에는 사용하기 간단하지만, 사실 상당히 복잡한 구조를 갖는다. 

 

좀 더 알아보기 쉽게 핵심만 표현해서 다시 살펴보겠다.

 

 

 

이 중에서 우리는 SELECT와 FROM, WHERE에 관해서 실습해 볼 것이다.


 

 

 

 

SELECT와 FROM

다시 USE 문으로 market_db를 선택하고 SELECT 문으로 회원 테이블(member)을 조회해 보겠다.

 

1) 전체 열 가져오기

 

 

SELECT는 테이블에서 데이터를 가져올 때 사용하는 예약어이다. *을 찍으면 일반적으로 모든 것을 의미한다. *가 사용된 위치가 열 이름이 나올 곳이므로 모든 열을 의미한다. 여기서는 member 테이블의 8개 열 모두이다. FROM 다음에 테이블 이름이 나온다. 테이블에서 내용을 가져온다는 의미이다.

 

원래 테이블의 전체 이름은 데이터베이스_이름.테이블_이름 형식으로 표현한다. 지금 사용하고 있는 이 테이블의 전체 이름은 market_db.member이다. 그러기 때문에 원칙적으로는 다음과 같이 사용해야 한다.

 

하지만 데이터베이스 이름을 생략하면 USE 문으로 지정해 놓은 데이터베이스가 자동으로 선택된다. 현재 선택된 데이터베이스가 market_db이므로 이처럼 생략하여 쓸 수 있다. 일반적으로는 이처럼 .member를 지정하는 경우는 거의 없다. DB를 동시에 사용하는 경우는 많지 않기 때문이다. 어쨌든 한번 USE 문을 사용하면 SQL 파일을 닫지 않는 이상 계속해서 사용할 수 있다.

 

USE를 잘못 사용한 예시

 

하지만 이 SQL을 실행하면 오류가 발생한다. 그 이유는 현재 선택된 sys 데이터베이스에는 member라는 테이블이 없기 때문에 발생한다. 여기서는 sys가 아닌 market_db를 선택해야 한다.


 

 

 

 

2) 특정 열만 가져오기

이번에는 해당 테이블에서 전체 열이 아닌 필요한 열만 가져오겠다. 다음과 같이 회원 테이블의 이름 열만 가져올 것이다.

 

 

 

3) 여러 개의 열 가져오기

여러 개의 열을 가져오고 싶으면 콤마로 구분하면 된다. 열 이름의 순서는 원래 테이블을 만들 때 순서에 맞출 필요는 없다.

 

 

 

 

4) 열 이름의 별칭 지정하기

열 이름에 별칭을 지정할 수 있다. 열 이름 다음에 지정하고 싶은 별칭을 입력하면 된다. 별칭에 공백이 있으면 큰따옴표로 묶어준다.

 

 

이렇게 '데뷔 일자'가 한글 이름으로 지정되었다. 하지만 이 이름은 표 안에서만 나타나는 것이므로 실제로 테이블 명이 변경된 것은 아니다.


 

 

 

 

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

SELECT ~ FROM은 대부분 WHERE과 함께 사용한다. WHERE는 필요한 것들만 골라서 결과를 보는 효과를 갖는다. WHERE 없이 조회하면 모든 데이터가 출력되어 불필요한 검색을 하게 된다. 

 

기본적인 WHERE 절

WHERE 절은 조회하는 결과에 특정한 조건을 추가해서 원하는 데이터만 보고 싶을 때 사용한다. 사실 이 부분은 엘리스에서 모두 학습했던 거라 지금 보니 너무 쉽다. 그냥 빠르게 결과만 확인하고 넘어가려고 한다. 

 

 

이름으로 검색할 수 있고 이처럼 인원수를 숫자형으로 조회할 수도 있다.

 

 

앞에서는 블랙핑크 이름이 검색되었고 이번에는 mem_number가 4인 것이 모두 조회되었다.


 

 

 

관계 연산자, 논리 연산자의 사용

숫자로 표현된 데이터는 범위를 지정할 수 있다. 예를 들어 평균 키가 162 이하인 회원을 검색하려면 다음과 같이 관계 연산자를 사용해서 조회할 수 있다.

 

1) 관계 연산자 사용

 

 

 

2) 논리 연산자 사용

2가지 이상의 조건을 만족하도록 하려면 논리 연산자를 이용하면 된다. 평균 키가 165 이상이면서 인원도 6명 초과인 인원을 다음과 같이 조회했다.

 

 

이번에는 OR 연산자를 사용해서 평균 키가 165 이상이거나 인원이 6명 초과인 인원을 검색해 보겠다.


 

 

 

 

BETWEEN ~ AND

이번에는 AND를 사용해서 평균 키가 163 ~165인 회원을 조회해 보겠다.

 

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

 


 

 

 

 

IN()

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

 

이때 IN()을 사용하면 코드를 훨씬 간결하게 작성할 수 있다.


 

 

 

 

LIKE

문자열의 일부 글자를 검색하려면 LIKE를 사용한다. 예를 들어 이름(mem_name)의 첫 글자가 '우'로 시작하는 회원을 다음과 같이 검색할 수 있다. 이 조건은 제일 앞 글자가 '우'이고 그 뒤는 무엇이든(%) 허용한다는 의미이다.

 

 

한 글자와 매치하기 위해서는 언더바(_)를 사용한다. 다음 sql은 이름의 앞 글자는 상관없고 뒤는 '핑크'인 회원을 검색한다.

 

여기서는 언더바를 2개 썼으므로 두 글자가 된다.


 

 

 

 

서브 쿼리

SELECT 안에는 또 다른 SELECT가 들어갈 수 있다. 이것을 서브 쿼리 또는 하위 쿼리라고 부른다. 여기서는 이름이 '에어핑크'인 회원의 평균 키보다 큰 회원을 검색하고 싶다고 가정해 보겠다.

먼저 에어핑크의 키를 알아내야 한다. 에어핑크의 평균 키가 164인 것을 조회한다.

 

 

 

 

이제 164보다 키가 큰 회원을 조회하면 된다.

 

 

하지만 이 두 개의 SQL을 하나로 만들 수는 없을까? 두 번째 SQL의 164 위치에 평균 키를 조회하는 SQL을 대신 써주면 된다.

 

두 번에 걸쳐 작성했던 결과가 한 번에 출력되었다.


 

 

 

단원 마무리하기

 

 

 

 

 

 

 

 

많이 틀렸을 줄 알았는데 하나만 틀렸다. 4번은 서울과 경기 모두 들어가는 게 아니라 둘 중에 하나만 들어가면 된다. 만약 주소가 서울인 동시에 경기라면 이상한 주소가 되기 때문이다.

 


 

 

 

학습을 마치고

중간에 공부하다가 너무 졸려서 방송을 틀어놓고 했다. 신기하게도 내가 좋아하는 방송이나 영상을 틀어놓고 공부를 하면 잠이 좀 달아난다. 오늘은 무슨 일이 있어도 3장과 4장의 첫 번째 소단원까지는 마치고 취침하려고 한다. 내일 엘리스로 다시 조인부터 공부하려면 지금까지 공부한 부분은 모두 학습하려고 한다.

원래 10월에 공부하려던 학습일정이 많이 미뤄졌다. 늦어도 화요일 새벽까지는 SQL을 다 마치고 프로그래밍 언어 공부를 들어가려고 한다. 8월부터 달 별로 공부 흐름을 잡고 있다. 9월에는 파이썬으로 게임을 만들겠다는 일념으로 정말 지루하고 너무도 재미없었던 데이터 분석과 머신러닝, 딥러닝을 공부했다. 10월에는 자바 스크립트도 하고, C 언어, 자바의 고급 과정, 그리고 JSP 지난번에 공부하다만 부분부터 이어서 하려고 한다.

 

할 게 정말 많다. 사실 딥러닝으로 만들고 싶은 모델이 생겨서 이 부분도 공부할 게 많이 남아있다. 어쨌든 오늘은 SQL 기본은 잡을 생각이다.