정리 노트

SELECT문 본문

개념 정리/데이터베이스

SELECT문

꿈만 꾸는 학부생 2024. 2. 8. 22:42
728x90

DML 문을 연습할 데이터 베이스는 아래의 사이트에서 스크립트를 다운로드하여 실행해 생성했습니다.

 

MySQL Sample Database

This page provides you with a MySQL sample database that helps you to practice with MySQL effectively and quickly.

www.mysqltutorial.org

위 사이트에서 crow's foot 표기법을 사용해 테이블 간의 관계를 표현하므로 이 표기법에 대해 알고 싶으신 분들은 아래 사이트를 참고 바랍니다.

 

Crow's Foot Notation – Relationship Symbols And How to Read Diagrams

Entity relationship diagrams (ERD) help us understand the connection between various "entities" that make up a system. In software development, ERDs are mostly used in database design. This lets us create graphical representations of the entities that make

www.freecodecamp.org


기본적인 문법

가장 기본적인 SELECT문은 아래의 요청(query)과 같이 이루어집니다.

SELECT city, country, addressLine1 FROM offices;

SELECT 옆에 조회할 열의 이름들을 쉼표로 구분해 작성합니다. 열의 이름들 대신 '*'(와일드카드) 표시를 작성하면 모든 열을 조회할 수 있습니다.

그다음 FROM 절을 작성해 조회할 테이블의 이름들을 작성합니다. 위의 명령어를 실행하면 아래와 같은 결과를 얻습니다.

이렇게 표의 형태로 결과가 출력되는 쿼리를 table query라 합니다.

기본 SELECT문 결과 이미지

현재 제가 쓰고 있는 MySQL의 경우 FROM절도 생략할 수 있습니다. 표준 SQL에서는 이를 생략할 수 없으므로 다른 곳(Oracle 등)에서 FROM절을 생략했다가 에러를 겪지 말기를 바랍니다.

아래 명령어는 'length'라는 문자열 길이를 반환하는 함수를 사용하는 쿼리입니다.

SELECT length('Data Analysis') AS LEN;

FROM 생략 결과

결과를 보면 단일 값만 출력이 되는데 이렇게 단일 결과가 나오도록 하는 쿼리를 scalar query라 합니다.

SELECT [ALL | DISTINCT]

SELECT 뒤에 ALL 또는 DISTINCT를 작성할 수 있는데 이는 중복되는 행들의 포함 여부를 결정합니다.

  • ALL: 중복된 행들을 모두 포함(기본 값)
  • DISTINCT: 중복된 행들은 하나만 남기고 나머지는 포함 안 함
-- 아래의 쿼리들은 사실 결과가 잘 보이게 하기 위해 뒤에 ORDER BY 절이 있으나
-- 여기서는 SELECT ~ FROM ~; 까지만 설명하므로 생략함
SELECT productCode, orderLineNumber FROM orderdetails;
SELECT DISTINCT productCode, orderLineNumber FROM orderdetails;

왼쪽이 ALL, 오른쪽이 DISTINCT가 적용된 결과입니다. 왼쪽을 보면 중복되는 행들이 다수 등장했고, 오른쪽에서는 중복되는 행이 없음을 볼 수 있습니다. 만약 NULL 값이 존재했다면 NULL 값도 포함해 결과에 출력됩니다.

AS

SELECT 절에서 작성한 열의 이름 옆에 AS를 써서 열이 출력될 때의 이름을 변경할 수 있습니다. 데이터베이스에 저장된 열의 이름을 변경하는 것이 아닙니다. AS는 생략이 가능합니다.

SELECT productCode AS '상품코드', orderLineNumber '주문라인번호' FROM orderdetails;

AS를 통해 열의 이름 변경

SELECT절과 산술 연산자

SELECT 절에서는 열뿐만 아니라 산술 연산자를 작성할 수 있습니다.

SELECT orderNumber, quantityOrdered, priceEach,
quantityOrdered * priceEach AS '결과' FROM orderdetails;

산술 연산자 사용 그림

합성 연산자(CONCAT)

열과 열, 또는 열과 문자열을 같이 연결해 새로운 열을 만들어낼 수 있습니다. MySQL에서는 CONCAT 함수를 사용해 합성을 할 수 있습니다.

SELECT CONCAT('주문번호 ', orderNumber, '에서 ', quantityOrdered, '개 주문') AS alert
FROM orderdetails;

CONCAT을 사용해 새 열 생성

이렇게 단일 열이 나오도록 하는 쿼리를 column query라 합니다.

SELECT문의 전체 실행 순서

SELECT문에서 작성할 수 있는 모든 절과 순서를 작성하면 아래와 같습니다.

5. SELECT        : 선택된 행들 중에서 작성한 열들만을 출력(순수 관계 연산자 PROJECT와 동일)
1. FROM            : 명령어 실행 대상의 테이블 참조
2. WHERE         : 작성한 조건에 맞는 행(tuple)들만 선택(순수 관계 연산자 SELECT(위의 SELECT 아님)와 동일)
3. GROUP BY    : 주어진 열의 이름을 기준으로 행들을 그룹화
4. HAVING         : 그룹 별로 조건에 맞는 그룹만 선택
6. ORDER BY    : 행들을 주어진 기준에 따라 정렬
;

위에서 봤던 AS 표현은 SELECT, ORDER BY 절에서 작성할 수 있지만 출력에 직접적인 관련이 없는 WHERE, GROUP BY 절에는 사용할 수 없습니다. 즉 SELECT 절에서 AS를 통해 지정한 열의 이름을 WHERE 절 같은 곳에서 사용할 수 없습니다.

 

이들에 대한 추가적인 내용은 앞으로 포스트를 계속 써가며 정리할 예정입니다.

728x90