SQL 서브쿼리는 쿼리 내부에 중첩된 또 다른 쿼리입니다. 서브쿼리는 외부 쿼리와 함께 실행되며, 특정 조건을 만족하는 데이터를 조회하거나 값을 계산하는 데 사용됩니다. 이 글에서는 SQL 서브쿼리의 개념과 활용 방법을 살펴보겠습니다.


1. 서브쿼리 개념

  • 서브쿼리(Subquery)는 SQL 쿼리 내부에서 실행되는 쿼리입니다.

서브쿼리는 외부 쿼리(메인 쿼리)의 입력으로 사용되며, SELECT, FROM, WHERE 절 등 다양한 위치에서 활용할 수 있습니다.

기본 문법

SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = (서브쿼리);

예제

  • 가장 비싼 트랙의 가격 조회
SELECT MAX(UnitPrice) AS MaxPrice
FROM Track;

  • 가장 비싼 트랙의 가격과 동일한 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
WHERE UnitPrice = (SELECT MAX(UnitPrice) FROM Track);


2. 단일 행 서브쿼리

단일 행 서브쿼리는 하나의 값만 반환합니다. 보통 = 연산자와 함께 사용됩니다.

예제

  • 가장 비싼 트랙의 이름 조회
SELECT Name 
FROM Track 
WHERE UnitPrice = (SELECT MAX(UnitPrice) FROM Track);

  • 가장 최근에 등록된 고객의 이름 조회
SELECT FirstName, LastName
FROM Customer
WHERE CustomerId = (SELECT MAX(CustomerId) FROM Customer);


3. 다중 행 서브쿼리

다중 행 서브쿼리는 여러 개의 값을 반환합니다. 주로 IN, ANY, ALL 등의 연산자와 함께 사용됩니다.

예제

  • 특정 가격($1.99, $2.99) 이상의 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
WHERE UnitPrice IN (SELECT DISTINCT UnitPrice FROM Track WHERE UnitPrice >= 1.99);

  • 모든 트랙보다 비싼 가격의 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
WHERE UnitPrice > ALL (SELECT UnitPrice FROM Track);

  • 어떤 트랙보다 비싼 가격을 가진 트랙 조회
SELECT Name, UnitPrice
FROM Track
WHERE UnitPrice > ANY (SELECT UnitPrice FROM Track WHERE GenreId = 1);


4. EXISTS와 NOT EXISTS

EXISTS는 서브쿼리의 조건에 맞는 데이터가 존재하는지 확인하며, NOT EXISTS는 데이터가 존재하지 않을 경우를 확인합니다.

기본 문법

SELECT 컬럼명
FROM 테이블명
WHERE EXISTS (서브쿼리);

예제

  • 청구서가 있는 고객 조회
SELECT FirstName, LastName 
FROM Customer 
WHERE EXISTS (SELECT 1 FROM Invoice WHERE Customer.CustomerId = Invoice.CustomerId);

  • 청구서가 없는 고객 조회
SELECT FirstName, LastName 
FROM Customer 
WHERE NOT EXISTS (SELECT 1 FROM Invoice WHERE Customer.CustomerId = Invoice.CustomerId);


서브쿼리 사용 위치

1. SELECT 절에서 서브쿼리

서브쿼리를 SELECT 절에서 사용하여 계산된 값을 출력할 수 있습니다.

예제

  • 각 트랙의 가격이 가장 비싼 트랙의 몇 퍼센트인지 계산:
SELECT Name,
	   UnitPrice,
       (UnitPrice / (SELECT MAX(UnitPrice) FROM Track)) * 100 AS PricePercentage 
FROM Track;


2. FROM 절에서 서브쿼리

서브쿼리를 FROM 절에서 사용하여 임시 테이블처럼 활용할 수 있습니다.

예제

  • 장르별 평균 가격 계산:
SELECT GenreId, AVG(UnitPrice) AS AvgPrice 
FROM (SELECT GenreId, UnitPrice FROM Track) AS Subquery 
GROUP BY GenreId;


3. WHERE 절에서 서브쿼리

서브쿼리를 WHERE 절에서 사용하여 특정 조건에 맞는 데이터를 필터링합니다.

예제

  • 가장 높은 평균 가격을 가진 장르의 트랙 조회:
SELECT Name 
FROM Track 
WHERE GenreId = (SELECT GenreId FROM Track GROUP BY GenreId ORDER BY AVG(UnitPrice) DESC LIMIT 1);


요약

  • 단일 행 서브쿼리: 하나의 값을 반환하며, = 연산자와 함께 사용.
  • 다중 행 서브쿼리: 여러 값을 반환하며, IN, ANY, ALL과 함께 사용.
  • EXISTS와 NOT EXISTS: 조건 존재 여부를 확인하여 데이터를 필터링.
  • 사용 위치: SELECT, FROM, WHERE 절 등 다양한 위치에서 활용 가능.

서브쿼리는 데이터 조회를 보다 정교하게 수행할 수 있도록 도와줍니다. 다음 글에서는 SQL 복합 쿼리를 통해 여러 쿼리를 조합하는 방법을 학습하겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 트랜잭션과 롤백  (1) 2024.12.15
SQL 복합 쿼리  (0) 2024.12.14
SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09

문제 링크

🔗 Programmers - 동물 보호소 데이터 조회 문제


문제 요약

  • 요구사항
    동물 보호소에 들어온 모든 동물의 이름보호 시작일을 조회합니다.
    결과는 ANIMAL_ID를 기준으로 내림차순(역순)으로 정렬되어야 합니다.
  • 출력 컬럼
    NAME, DATETIME

문제 내용

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요.
결과는 ANIMAL_ID의 역순으로 정렬되어야 합니다.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 이름과 보호 시작일이 저장된 테이블.
  2. 정렬 기준:
    • ANIMAL_ID를 기준으로 내림차순(ORDER BY ANIMAL_ID DESC).
  3. 필요한 컬럼:
    • NAME, DATETIME.

SQL 코드

SELECT NAME, DATETIME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID DESC;​

 

문제 링크

🔗 Programmers - 동물 보호소 이름 정렬 문제


문제 요약

  • 요구사항
    동물 보호소에 들어온 모든 동물의 아이디, 이름, 보호 시작일을 이름 순으로 정렬하여 조회합니다.
    이름이 같은 동물이 있을 경우, 보호를 나중에 시작한 동물이 먼저 나오도록 설정해야 합니다.
  • 출력 컬럼
    ANIMAL_ID, NAME, DATETIME

문제 내용

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해 주세요.
단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 아이디, 이름, 보호 시작일이 저장된 테이블.
  2. 정렬 기준:
    • 이름 순으로 오름차순(ORDER BY NAME ASC).
    • 같은 이름일 경우, 보호 시작일을 기준으로 내림차순(ORDER BY DATETIME DESC).
  3. 필요한 컬럼:
    • ANIMAL_ID, NAME, DATETIME.

SQL 코드

SELECT ANIMAL_ID, NAME, DATETIME 
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;

 

SQL 개념 정리

  • ORDER BY: 정렬을 수행하는 SQL 명령어.
    • ASC: 오름차순 정렬.
    • DESC: 내림차순 정렬.

SQL의 Join은 여러 테이블 간의 관계를 결합하여 데이터를 조회할 때 사용됩니다. Join을 통해 서로 다른 테이블의 데이터를 결합해 원하는 결과를 얻을 수 있습니다. 이번 글에서는 INNER JOIN, LEFT JOIN 등 주요 Join의 개념과 활용 방법을 살펴보겠습니다.


1. JOIN의 기본 개념

Join은 테이블 간의 공통된 컬럼을 기준으로 데이터를 결합하는 기능입니다. 예를 들어, 고객 테이블과 주문 테이블이 있다고 가정했을 때, 고객 ID(CustomerId)를 기준으로 결합하여 고객별 주문 내역을 조회할 수 있습니다.

기본 문법

SELECT 컬럼명 
FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼명 = 테이블2.컬럼명;

2. INNER JOIN

INNER JOIN은 두 테이블 간의 교집합 데이터를 반환합니다. 즉, 조건에 일치하는 데이터만 결합됩니다.

예제

  • 고객(Customer) 테이블과 청구서(Invoice) 테이블 결합
     
    고객의 이름과 청구서 금액을 결합하여 조회합니다.
SELECT Customer.FirstName, Customer.LastName, Invoice.Total
FROM Customer INNER JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId;

 


3. LEFT JOIN

LEFT JOIN왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에 매칭되지 않는 데이터는 NULL로 채워집니다.

예제

  • 고객 테이블과 청구서 테이블 결합 (청구서 없는 고객 포함)
     
     
    모든 고객을 조회하며, 청구서가 없는 고객은 NULL 값으로 표시됩니다.
SELECT Customer.FirstName, Customer.LastName, Invoice.Total 
FROM Customer LEFT JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId;

 


4. JOIN 조건

Join을 사용할 때 조건을 명확히 지정해야 데이터가 올바르게 결합됩니다. SQL에서는 ON 절과 USING 절을 통해 Join 조건을 설정할 수 있습니다.

ON 절

ON 절은 두 테이블의 결합 기준이 되는 컬럼을 명시적으로 지정합니다.

예제

  • ON 절 사용
     
     
    앨범 제목과 아티스트 이름을 결합하여 조회합니다.
SELECT Album.Title, Artist.Name 
FROM Album INNER JOIN Artist ON Album.ArtistId = Artist.ArtistId;


USING 절

USING 절은 양쪽 테이블에 동일한 이름의 컬럼이 있을 때 사용합니다. 간결한 문법으로 결합 조건을 지정할 수 있습니다.

예제

  • USING 절 사용
SELECT Album.Title, Artist.Name 
FROM Album INNER JOIN Artist USING (ArtistId);


JOIN 비교

Join 유형설명예제 활용

INNER JOIN 두 테이블 간 공통된 데이터를 결합 고객과 청구서 데이터
LEFT JOIN 왼쪽 테이블의 모든 데이터와 매칭되지 않은 데이터 포함 고객과 청구서 데이터
RIGHT JOIN 오른쪽 테이블의 모든 데이터와 매칭되지 않은 데이터 포함 거의 사용되지 않음
FULL OUTER JOIN 양쪽 테이블의 모든 데이터를 결합, 매칭되지 않는 데이터 포함 MySQL 기본 미지원

JOIN 예제 활용

1. 특정 국가의 고객과 주문 내역 조회

SELECT Customer.FirstName, Customer.LastName, Invoice.Total 
FROM Customer INNER JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId 
WHERE Customer.Country = 'USA';

2. 주문이 없는 고객 목록 조회

SELECT Customer.FirstName, Customer.LastName
FROM Customer LEFT JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId
WHERE Invoice.CustomerId IS NULL;

요약

  • INNER JOIN: 두 테이블 간 공통된 데이터를 결합합니다.
  • LEFT JOIN: 왼쪽 테이블의 모든 데이터와 매칭되지 않은 데이터를 포함합니다.
  • ON 절: 결합 조건을 명시적으로 지정합니다.
  • USING 절: 동일한 이름의 컬럼을 기준으로 결합합니다.

SQL Join은 데이터 간의 관계를 이해하고 활용할 때 필수적인 도구입니다. 이를 통해 여러 테이블의 데이터를 효과적으로 결합하여 다양한 분석을 수행할 수 있습니다. 다음 글에서는 SQL 서브쿼리를 다뤄보겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 복합 쿼리  (0) 2024.12.14
SQL 서브쿼리  (0) 2024.12.12
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09
SQL 기본 문법 1  (0) 2024.12.09

SQL 집계 함수는 데이터를 요약하고 통계 정보를 도출할 때 사용됩니다. 예를 들어, 총합, 평균, 최댓값, 최솟값 등을 계산하거나 데이터를 그룹화하여 분석할 수 있습니다. 이 글에서는 SQL 집계 함수와 그룹화(Grouping), 집계 조건 필터링(HAVING)을 다루어 보겠습니다.

 


1. 집계 함수의 종류

SQL 집계 함수는 데이터를 요약하여 하나의 결과값으로 반환합니다. 주로 데이터의 수를 세거나 합계, 평균, 최댓값, 최솟값을 계산할 때 사용됩니다.

주요 집계 함수

함수 설명

COUNT 행(Row)의 개수를 반환
SUM 값(Value)의 합계를 반환
AVG 값(Value)의 평균을 반환
MAX 값(Value) 중 최대값을 반환
MIN 값(Value) 중 최소값을 반환

예제

  • 트랙의 총 개수 조회
SELECT COUNT(*) AS TotalTracks 
FROM Track;

  • 총 가격 합계 계산
SELECT SUM(UnitPrice) AS TotalPrice
FROM Track;

  • 평균 가격 계산
SELECT AVG(UnitPrice) AS AveragePrice 
FROM Track;

  • 최대 및 최소 가격 조회
SELECT MAX(UnitPrice) AS MaxPrice, MIN(UnitPrice)
AS MinPrice FROM Track;


2. GROUP BY

GROUP BY 절은 데이터를 특정 기준으로 그룹화하여 집계 함수와 함께 사용합니다. 예를 들어, 트랙을 장르별로 그룹화하여 각 장르의 총 트랙 수를 계산할 수 있습니다.

기본 문법

SELECT 컬럼명, 집계함수
FROM 테이블명
GROUP BY 그룹화할 컬럼명;

예제

  • 장르별 트랙 수 계산
SELECT GenreId, COUNT(*) AS TrackCount
FROM Track 
GROUP BY GenreId;

  • 트랙별 평균 가격 계산
SELECT TrackId, AVG(UnitPrice) AS AveragePrice 
FROM Track
GROUP BY TrackId;


GROUP BY와 NULL 처리

  • GROUP BY에서 NULL 값은 하나의 그룹으로 처리됩니다.
  • 예를 들어, 특정 컬럼에 NULL 값이 포함된 경우 해당 그룹도 집계에 포함됩니다.

예제

  • NULL 값이 포함된 그룹 집계
SELECT Composer, COUNT(*) AS TrackCount 
FROM Track 
GROUP BY Composer;


3. HAVING

HAVING 절은 GROUP BY 결과에 조건을 추가할 때 사용됩니다. WHERE 절은 그룹화 이전의 데이터를 필터링하고, HAVING 절은 그룹화 이후의 데이터를 필터링합니다.

기본 문법

SELECT 컬럼명, 집계함수
FROM 테이블명
GROUP BY 그룹화할 컬럼명
HAVING 조건;

예제

장르별 트랙 수가 10개 이상인 데이터 조회

SELECT GenreId, COUNT(*) AS TrackCount 
FROM Track 
GROUP BY GenreId 
HAVING COUNT(*) >= 10;

트랙별 평균 가격이 $1.50 이상인 데이터 조회

SELECT ArtistId, AVG(UnitPrice) AS AveragePrice 
FROM Track 
GROUP BY ArtistId 
HAVING AVG(UnitPrice) >= 1.50;


HAVING과 WHERE의 차이

조건절 사용 위치 적용 범위

WHERE 그룹화 이전에 조건을 적용 개별 행(Row)에 대한 필터링
HAVING 그룹화 이후에 조건을 적용 그룹(Group)에 대한 필터링

예제 비교

WHERE 사용 (그룹화 이전)

가격이 $1.00 이상인 트랙만 그룹화하여 장르별 트랙 수를 계산합니다.

SELECT GenreId, COUNT(*) AS TrackCount 
FROM Track 
WHERE UnitPrice > 1.00
GROUP BY GenreId;

HAVING 사용 (그룹화 이후)

그룹화된 장르 중에서 트랙 수가 10개를 초과하는 데이터만 조회합니다.

SELECT GenreId, COUNT(*) AS TrackCount 
FROM Track 
GROUP BY GenreId 
HAVING COUNT(*) > 10;


요약

집계 함수: 데이터를 요약하여 통계를 도출합니다.

  • 주요 함수: COUNT, SUM, AVG, MAX, MIN.

GROUP BY: 데이터를 특정 컬럼 기준으로 그룹화하여 집계합니다.

  • NULL 값도 그룹화의 일부로 포함됩니다.

HAVING: 그룹화된 데이터에 조건을 추가하여 필터링합니다.

  • WHERE는 그룹화 이전, HAVING은 그룹화 이후 조건 적용.

이 문법들을 활용하면 SQL을 통해 데이터를 효과적으로 요약하고, 원하는 통계 정보를 추출할 수 있습니다. 다음 글에서는 SQL Join을 통해 여러 테이블을 결합하여 데이터를 조회하는 방법을 학습하겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 서브쿼리  (0) 2024.12.12
SQL Join  (0) 2024.12.11
SQL 기본 문법 2  (0) 2024.12.09
SQL 기본 문법 1  (0) 2024.12.09
데이터베이스 및 SQL 기본 개념 정리  (1) 2024.12.09
  • 데이터를 제한하여 필요한 부분만 조회하는 방법을 학습합니다.
  • SQL의 연산 기능과 다양한 함수 활용법을 익힙니다.
  • 데이터를 보기 좋게 표현하기 위해 별칭(Alias)을 사용하는 방법을 배웁니다.

1. LIMIT와 OFFSET

LIMIT와 OFFSET은 데이터를 조회할 때 출력 개수를 제한하거나 특정 위치에서 시작하도록 합니다.

기본 문법

SELECT 컬럼명
FROM 테이블명
LIMIT 개수 OFFSET 시작위치;
  • LIMIT: 반환할 행(Row)의 최대 개수를 지정합니다.
  • OFFSET: 데이터를 조회할 때 시작 위치를 지정합니다.

예제

  • 상위 5개의 트랙 조회
SELECT Name, UnitPrice 
FROM Track LIMIT 5;

  • 5번째부터 10번째까지 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
LIMIT 5 OFFSET 5;

TIP: MySQL에서는 LIMIT 5, 5 형태로 OFFSET을 생략하고 사용 가능 (LIMIT {시작위치}, {개수}).


2. 기본 연산

SQL에서 기본 산술 연산과 문자열 연산을 사용할 수 있습니다.

1) 산술 연산

연산자 설명

+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈

예제

  • 가격에 세금을 추가하여 계산트랙 가격(UnitPrice)에 10% 세금을 추가하여 새로운 컬럼 TaxedPrice로 출력합니다.
SELECT Name, UnitPrice, UnitPrice * 1.1 AS TaxedPrice
FROM Track;

  • 두 값의 합계 계산가격에 재생 시간(초 단위)을 더한 값을 계산합니다.
SELECT UnitPrice + Milliseconds / 1000 AS AdjustedPrice
FROM Track 
WHERE UnitPrice > 1.00;


2) 문자열 연산

  • 문자열을 연결하거나 변환하는 데 사용할 수 있습니다.

주요 연산자와 함수

함수/연산자 설명

CONCAT 문자열 연결
`  
LENGTH 문자열 길이 반환
UPPER 문자열을 대문자로 변환
LOWER 문자열을 소문자로 변환

예제

  • 이름과 가격 연결트랙 이름과 가격을 결합하여 TrackInfo로 출력합니다.
SELECT CONCAT(Name, ' - $', UnitPrice) AS TrackInfo
FROM Track;

  • 문자열 길이 확인이름이 10자 이상인 트랙과 그 길이를 출력합니다.
SELECT Name, LENGTH(Name) AS NameLength 
FROM Track 
WHERE LENGTH(Name) > 10;


3. Alias (별칭)

Alias는 테이블이나 컬럼의 이름을 임시로 변경하여 가독성을 높이고, 결과 데이터를 명확히 표현할 때 유용합니다.

기본 문법

SELECT 컬럼명 AS 별칭
FROM 테이블명;
  • AS는 별칭을 지정하기 위한 키워드이며 생략 가능.

예제

  • 컬럼 이름에 별칭 지정
SELECT Name AS TrackName, UnitPrice AS Price
FROM Track;

  • 테이블 이름에 별칭 지정
SELECT T.Name, T.UnitPrice 
FROM Track AS T;


4. 기본 함수

SQL은 데이터를 변형하거나 분석하기 위해 다양한 내장 함수를 제공합니다.

1) 문자열 함수

함수 설명

LENGTH 문자열 길이를 반환
UPPER 문자열을 대문자로 변환
LOWER 문자열을 소문자로 변환
TRIM 문자열의 앞뒤 공백 제거

예제

  • 대문자로 변환
SELECT UPPER(Name) AS UpperName 
FROM Track;

  • 공백 제거
SELECT TRIM(Name) AS TrimmedName 
FROM Track 
WHERE Name LIKE ' %';


2) 수학 함수

함수 설명

ROUND 숫자를 반올림
CEIL 숫자를 올림
FLOOR 숫자를 내림

예제

  • 가격을 소수점 첫째 자리에서 반올림
SELECT Name, ROUND(UnitPrice, 1) AS RoundedPrice
FROM Track;

  • 가격을 올림
SELECT Name, CEIL(UnitPrice) AS CeilPrice 
FROM Track;

  • 가격을 내림
SELECT Name, FLOOR(UnitPrice) AS FloorPrice 
FROM Track;


요약

  • LIMIT와 OFFSET: 출력 데이터의 개수를 제한하거나 특정 위치에서 시작.
  • 산술 연산과 문자열 연산: 데이터를 계산하거나 연결.
  • Alias (별칭): 컬럼이나 테이블의 이름을 명확히 표현.
  • 기본 함수: 데이터를 분석하거나 변형하기 위한 내장 함수.

이 문법들을 활용하면 SQL을 사용하여 데이터를 더 유연하게 처리하고, 보기 좋은 형태로 출력할 수 있습니다. 다음 글에서는 SQL 집계 함수를 통해 데이터를 그룹화하고 집계하는 방법을 다뤄보겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 1  (0) 2024.12.09
데이터베이스 및 SQL 기본 개념 정리  (1) 2024.12.09
실습 데이터 정하기  (0) 2024.12.09

1. SELECT 기본 문법

SQL의 데이터 조회는 SELECT 문법을 사용하여 이루어집니다. 기본 구조는 다음과 같습니다.

SELECT 컬럼명
FROM 테이블명;

예제

  • 모든 컬럼 조회Track 테이블의 모든 데이터를 조회합니다.
SELECT * 
FROM Track;

 

  • 특정 컬럼만 조회트랙의 이름(Name)과 가격(UnitPrice)만 조회합니다.
SELECT Name, UnitPrice
FROM Track;


2. WHERE로 데이터 필터링

WHERE 절을 사용하여 특정 조건에 맞는 데이터를 필터링할 수 있습니다.

조건 연산자

연산자 설명

= 값이 같음
!= 값이 같지 않음
> 값이 큼
< 값이 작음
>= 값이 크거나 같음
<= 값이 작거나 같음

논리 연산자

연산자 설명

AND 여러 조건을 모두 만족
OR 여러 조건 중 하나라도 만족
NOT 조건의 반대

예제

  • 특정 조건 조회가격이 $1.00 이상인 트랙을 조회합니다.
SELECT Name, UnitPrice
FROM Track
WHERE UnitPrice > 1.00;

  • 여러 조건 필터링가격이 $1.00 이상이고 재생 시간이 5분(300,000 밀리초) 이상인 트랙을 조회합니다.
SELECT Name, UnitPrice 
FROM Track
WHERE UnitPrice > 1.00 AND Milliseconds > 300000;


3. DISTINCT로 중복 제거

DISTINCT 키워드는 중복된 데이터를 제거하고 고유한 값을 반환합니다.

예제

  • 작곡가 목록 조회트랙 테이블에서 중복되지 않은 작곡가 목록을 조회합니다.
SELECT DISTINCT Composer
FROM Track;

  • 국가 목록 조회고객 테이블에서 중복되지 않은 국가 이름을 조회합니다.
SELECT DISTINCT Country
FROM Customer;


4. ORDER BY

ORDER BY 절은 데이터를 정렬할 때 사용합니다. 기본값은 오름차순(ASC)이며, 내림차순은 DESC 키워드를 사용합니다.

예제

  • 가격 오름차순 정렬가격을 기준으로 낮은 순서대로 정렬합니다.
SELECT Name, UnitPrice 
FROM Track
ORDER BY UnitPrice ASC;

  • 가격 내림차순 정렬가격을 기준으로 높은 순서대로 정렬합니다.
SELECT Name, UnitPrice
FROM Track 
ORDER BY UnitPrice DESC;

  • 여러 컬럼 정렬가격을 기준으로 내림차순 정렬하고, 같은 가격인 경우 재생 시간을 기준으로 오름차순 정렬합니다.
SELECT Name, UnitPrice, Milliseconds 
FROM Track
ORDER BY UnitPrice DESC, Milliseconds ASC;


5. 특수 조건

1) BETWEEN

BETWEEN을 사용하여 특정 범위 내의 데이터를 조회할 수 있습니다.

  • 예제재생 시간이 200,000에서 400,000 밀리초 사이인 트랙을 조회합니다.
SELECT Name, Milliseconds
FROM Track
WHERE Milliseconds BETWEEN 200000 AND 400000;

2) LIKE

LIKE는 특정 패턴과 일치하는 데이터를 조회합니다.

와일드카드 설명

% 0개 이상의 문자
_ 단일 문자
  • 예제이름에 "Love"가 포함된 트랙을 조회합니다.
SELECT Name 
FROM Track
WHERE Name LIKE '%Love%';

3) IN

IN은 여러 값 중 하나와 일치하는 데이터를 조회합니다.

  • 예제가격이 $0.99, $1.99, $2.99 중 하나인 트랙을 조회합니다.
SELECT Name, UnitPrice
FROM Track
WHERE UnitPrice IN (0.99, 1.99, 2.99);

 


요약

  • SELECT: 데이터를 조회하는 기본 명령어입니다.
  • WHERE: 조건을 통해 데이터를 필터링합니다.
  • DISTINCT: 중복된 데이터를 제거합니다.
  • ORDER BY: 데이터를 정렬합니다.
  • BETWEEN, LIKE, IN: 특정 조건에 맞는 데이터를 조회하는 데 사용됩니다.

이 문법들을 활용하면 SQL의 기본적인 데이터 조회와 필터링 작업을 수행할 수 있습니다. 다음 글에서는 SQL 기본 문법 2로 한 단계 더 나아간 기능을 학습하겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09
데이터베이스 및 SQL 기본 개념 정리  (1) 2024.12.09
실습 데이터 정하기  (0) 2024.12.09

1. 데이터베이스 및 SQL 기본 개념

  • 데이터베이스와 RDBMS:
    • 주요 특징: 데이터 중복 감소, 무결성 유지, 데이터 접근 속도 향상.
  • 데이터를 효율적으로 저장, 관리, 검색하는 시스템. 관계형 데이터베이스(RDBMS)는 데이터를 테이블 형식으로 저장하며, 테이블 간 관계를 설정할 수 있음.
  • 기본 용어:
    • 테이블(Table): 데이터를 행(Row)과 열(Column)로 구성해 저장.
    • 컬럼(Column): 테이블의 속성을 정의하는 필드.
    • 행(Row): 데이터의 한 레코드.
  • 데이터베이스 스키마(Schema):
  • 데이터베이스 구조를 정의하는 설계도. 테이블, 뷰, 인덱스, 트리거 등을 포함.
  • 데이터베이스의 장단점:
    • 장점: 데이터 중복 최소화, 무결성 유지, 다중 사용자 지원.
    • 단점: 초기 설계 복잡성, 시스템 유지 관리 비용.

2. SQL(Structured Query Language)

  • DDL (Data Definition Language):
    • 예: CREATE (생성), ALTER (수정), DROP (삭제).
  • 데이터베이스 구조를 정의하거나 수정하는 데 사용.
  • DML (Data Manipulation Language):
    • CRUD 작업: SELECT, INSERT, UPDATE, DELETE.
  • 데이터를 조회하거나 조작하는 데 사용.
  • DCL (Data Control Language):
    • 예: CREATE USER, GRANT, REVOKE.
  • 데이터베이스 사용자와 권한을 관리.

'SQL > 학습정리' 카테고리의 다른 글

SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09
SQL 기본 문법 1  (0) 2024.12.09
실습 데이터 정하기  (0) 2024.12.09

실습 데이터베이스: Chinook DB

Chinook DB는 음악 판매점을 모델링한 샘플 데이터베이스로, 실제 비즈니스 시나리오와 유사한 데이터를 제공합니다. 이를 통해 SQL 문법과 데이터베이스 개념을 효과적으로 학습할 수 있습니다.

  • 주요 테이블:
    • artists: 아티스트 정보
    • albums: 앨범 정보
    • tracks: 곡 정보
    • customers: 고객 정보
    • invoices: 송장 및 주문 정보
    • invoice_items: 송장 상세 내역

Chinook DB 다운로드 및 설치 방법

  1. Chinook DB 다운로드
  2. MySQL용 스크립트 변환
  3. Chinook DB는 기본적으로 SQLite 형식이므로, MySQL에서 사용하기 위해 스크립트를 변환해야 합니다. 이미 변환된 MySQL용 스크립트를 다운로드할 수 있습니다.


저는 그냥 여기서 복사해서 바로 붙여 넣기 했습니다.

 

show tables 를 입력하면 전체 테이블을 확인할 수 있습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09
SQL 기본 문법 1  (0) 2024.12.09
데이터베이스 및 SQL 기본 개념 정리  (1) 2024.12.09

+ Recent posts