DB

[MySQL] Select ①

웹개발자(진) 2024. 4. 3. 22:02
반응형
잡담

DB 배웠던 내용 정리하는 게 많이 밀렸습니다. 하루만 쉬어야지 했는데 계속 진도를 나가니 정리할게 많아지네요. 프런트앤드 백앤드 전부 한 번에 공부하려니까 양이 많은 거 같습니다. 거기다 정보처리기사 실기까지.. 오늘도 열심히 정리해 보겠습니다. 


 

SELECT

앞서서 SELECT는 DML에 포함되었습니다. 데이터 조작 언어(DML, Data Manipulation Language)는 데이터베이스에서 데이터를 조작, 삽입, 수정, 삭제하는 데 사용되는 언어입니다.

그 중에서 SQL의 SELECT 문은 데이터베이스에서 데이터를 조회하는 데 사용됩니다. 데이터베이스 테이블의 열을 선택하고 필터링하거나 계산된 값을 가져오는 데 사용됩니다.

기본적인 SELECT 문의 구문은 다음과 같습니다:

SELECT column1, column2, ...
FROM table_name;

 

여기서:

  • column1, column2 등은 가져오려는 열의 이름입니다. *를 사용하면 모든 열을 가져올 수 있습니다.
  • table_name은 데이터를 가져올 테이블의 이름입니다.

추가적으로, SELECT 문은 다음과 같은 다양한 기능을 지원합니다:

 


 

SELECT문 기본구조

SELECT 문은 데이터베이스에서 데이터를 조회하는 데 사용됩니다. SELECT 문의 기본 구조는 다음과 같습니다:

조건부 선택:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

WHERE 절 (선택사항): 데이터를 필터링하는 조건을 지정합니다. 해당 조건을 충족하는 행만 선택됩니다.


데이터 정렬:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC/DESC, column2 ASC/DESC, ...;

ORDER BY 절 (선택사항): 결과를 정렬하는 데 사용됩니다. ASC는 오름차순(기본값), DESC는 내림차순을 의미합니다.


그룹화 및 집계 함수:

SELECT column1, AGGREGATE_FUNCTION(column2), ...
FROM table_name
GROUP BY column1;

GROUP BY 절 : 데이터를 그룹화하는 데 사용되며, 주로 집계 함수와 함께 사용됩니다. GROUP BY 절을 사용하면 특정 열(또는 열의 조합)의 값에 따라 행을 그룹으로 묶을 수 있습니다. 각 그룹에 대해 집계 함수를 사용하여 해당 그룹의 통계 또는 요약 정보를 계산할 수 있습니다.


JOIN을 사용한 테이블 간 결합:

SELECT column1, column2, ...
FROM table1
JOIN table2 ON table1.column = table2.column;

 

서브쿼리:

SELECT column1, column2, ...
FROM table_name
WHERE column1 IN (SELECT column1 FROM another_table);

서브쿼리와 JOIN에 관해서는 중요하니 다음에 따로 다루도록 하겠습니다.

이러한 다양한 기능을 통해 SELECT 문은 데이터베이스에서 데이터를 유연하게 조회하고 조작하는 데 사용됩니다.

 


 

SELECT문 기본 예제

앞에서 정리된 내용을 토대로 몇 가지 기본예제를 풀어보겠습니다. 앞 게시글에 MySQL 사용법을 배울 때 CREATE 했던 TABLE과 INSERT 했던 데이터를 가지고 SELECT문을 이용해 보도록 하겠습니다.예제를 따라서 실습해보고 싶으시면 해당 링크로 들어가서 TABLE생성 및 데이터 INSERT를 해주시면 되겠습니다.

2024.03.30 - [DB데이터베이스] - [MySQL] 기본적인 MySQL 사용법 및 기본키/외래키

 

[MySQL] 기본적인 MySQL 사용법, (Table생성, INSERT), 기본키/외래키

잡담 누구에게 설명 가르치고 할 정도의 수준이 아니라 그날 공부한 내용을 정리하는 곳이다 보니까 이상하게 느껴질 수도 있고 틀린 내용일 수 도있습니다. 틀렸다면 틀린 부분에 대해서 댓글

gustjr7532.tistory.com

1. 모든 도서의 이름과 가격을 검색하시오.

select bookname, price
from book;

 


2. 출판사 중복제거

DISTINCT 키워드는 SELECT 문에서 중복된 결과를 제거하는 데 사용됩니다. 이를 통해 결과 집합에서 중복된 행을 제거하여 고유한 값을 가져올 수 있습니다.

select distinct publisher
from book;

 


 

조건 사용 예제

아래는 SQL에서 사용되는 주요 비교 연산자와 논리 연산자입니다:

비교 연산자:

  • =: 등호는 두 값이 서로 같은지 비교합니다.
  • >: 크다 연산자는 왼쪽 값이 오른쪽 값보다 큰지 비교합니다.
  • <: 작다 연산자는 왼쪽 값이 오른쪽 값보다 작은지 비교합니다.
  • <=: 작거나 같다 연산자는 왼쪽 값이 오른쪽 값보다 작거나 같은지 비교합니다.
  • >=: 크거나 같다 연산자는 왼쪽 값이 오른쪽 값보다 크거나 같은지 비교합니다.
  • <> 또는 !=: 부정 연산자는 두 값이 서로 다른지 비교합니다.

범위 연산자:

  • BETWEEN: 값이 지정된 범위 내에 있는지 비교합니다.
  • IN: 값이 지정된 목록에 포함되어 있는지 비교합니다.
  • NOT IN: 값이 지정된 목록에 포함되어 있지 않은지 비교합니다.

패턴 일치 연산자:

  • LIKE: 패턴과 일치하는 문자열을 검색합니다. %는 0개 이상의 문자를 나타내며, _는 하나의 문자를 나타냅니다.
  • IS NULL: 값이 NULL인지 확인합니다.
  • IS NOT NULL: 값이 NULL이 아닌지 확인합니다.

논리 연산자:

  • AND: 두 조건이 모두 참일 때 참을 반환합니다.
  • OR: 두 조건 중 하나 이상이 참일 때 참을 반환합니다.
  • NOT: 조건을 부정하여 거짓인 경우 참을 반환합니다.

이러한 연산자들을 조합하여 복잡한 조건을 만들어 SQL 문을 작성할 수 있습니다. 예를 들어, AND, OR, NOT 연산자를 사용하여 여러 조건을 결합하고, BETWEEN, IN, LIKE 등을 사용하여 조건을 필터링할 수 있습니다.

 1. 1만 이상 2만 이하 값을 가지는 책

BETWEEN: 값이 지정된 범위 내에 있는지 비교합니다.

select *
from book
where price between 10000 and 20000;
/*where price >= 10000 and price <= 20000;*/

 

 


2. 출판사가 '굿스포츠'이거나 '대한미디어'인 책

select *
from book
where publisher in ('굿스포츠', '대한미디어');
/*where publisher = '굿스포츠' or publisher = '대한미디어';*/

 


3. 축구에 관한 도서 중 가격이 2만 이상인 도서를 검색

LIKE: 패턴과 일치하는 문자열을 검색합니다. %는 0개 이상의 문자를 나타내며, _는 하나의 문자를 나타냅니다.

select*
from book
where bookname Like '%축구%' and price >= 20000;

 


4. 가격을 내림차순으로 정렬, 출판사 오름차순 정렬

 ASC는 오름차순(기본값), DESC는 내림차순을 의미합니다.

select *
from book 
order by price desc, publisher asc;


 

집계 함수 예제

SQL에서는 다양한 집계 함수를 제공합니다. 주요 집계 함수로는 SUM, AVG, MAX, MIN, COUNT 등이 있습니다.

  1. SUM: 지정된 열의 모든 값을 합산합니다.
  2. AVG: 지정된 열의 모든 값을 평균화합니다.
  3. MAX: 지정된 열의 모든 값 중에서 최대 값을 반환합니다.
  4. MIN: 지정된 열의 모든 값 중에서 최소 값을 반환합니다.
  5. COUNT: 지정된 열의 값의 개수를 세어 반환합니다.

1. 고객이 주문한 도서의 총판매액, 평균값, 최고가, 최저가를 구하시오

select sum(saleprice) as total,
		avg(saleprice) as avgerage,
        max(saleprice) as Maximum,
        min(saleprice) as Minimum,
        count(saleprice) as Count
from orders;

 

 


2. 고객별로 주문한 도서의 총수량과 총 판매액 구하시오

select custID, count(*) as  도서수량, sum(saleprice) as 총액
from orders
group by custId;


 

그밖에 다양한 예제

1. 가격이 8천원 이상인 도서를 구매한 고객에 대해 고객별 주문 도서의 총수량 (단, 두 권 이상 구매한 고객만 구하시오.)

select custID, count(*) as "총 수량"
from orders
where saleprice >= 8000
group by custId
having count(*) >= 2;


2. 고객의 이름과 고객이 주문한 도서의 판매가격을 검색하시오

select name, sum(saleprice)
from customer, orders
where customer.custid = orders.custid
group by customer.name
order by customer.name;

SELECT 문에서 WHERE 절은 특정 조건을 충족하는 행만을 선택하는 데 사용됩니다.

위의 쿼리는 customer 테이블과 orders 테이블을 조인하여 custID 열이 서로 일치하는 행만을 선택합니다. 이 쿼리는 두 테이블 간의 관계를 설정하고, customer 테이블에서 name 열과 orders 테이블에서 saleprice 열을 선택합니다.

WHERE 절의 조건인 customer.custID = orders.custID는 customer 테이블과 orders 테이블 간의 관계를 설정합니다. 이 조건은 두 테이블 간의 공통 열인 custID를 기반으로 두 테이블을 조인하여 일치하는 행만을 선택합니다.

 


3. 가격이 2만인  도서를 주문한 고객의 이름과 도서의 이름을 구하시오

select customer.name as 고객명, 
		book.bookName as 도서명, 
		orders.saleprice as 금액
from customer,orders,book
where customer.custID = orders.custID 
and orders.bookID = book.bookID 
and orders.saleprice = 20000


 

글을 마치며

오늘은 SQL에 SELECT문에 대해 알아보고 예제를 풀어봤습니다. 위에서 언급했다시피 JOIN과 SUBQuery는 다음번에 자세하게 하도록 하겠습니다. 다음 시간에는 SELECT문을 이용한 예제를 한 번 더 같이 풀어보도록 하겠습니다. DB에서 SELECT문이 정말 중요하기 때문에 기본기를 탄탄하게 하고 가는 게 좋을 거 같습니다. 감사합니다.

반응형