3장 : SQL 기본 문법
3-1 기본 중에 기본 SELECT ~ FROM ~ WHERE
1. 기본 조회하기 : SELECT ~ FROM
1. USE 문
SELECT문을 실행하려면 먼저 사용해야할 데이터베이스를 지정해야합니다. 현재 사용하는 데이터베이스를 지정 또는 변경하는 형식은 다음과 같습니다.
USE 데이터베이스_이름;
2. SELECT문의 기본형식
SELCT문은 처음에는 사용하기 간단하지만, 사실 상당히 복잡한 구조를 갖습니다. MYSQL 메뉴열에 나온 것은 너무 복잡해서 여기서는 간단한 형태로 먼저 살펴보겠습니다.
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
여기서는 다음과 같이 기본적이고 핵심적인 형식을 먼저 살펴보겠습니다.
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
3. SELECT문과 FROM
SELECT 문과 FROM 절은 SQL에서 데이터베이스로부터 데이터를 조회하는 데 사용되는 중요한 구문입니다.
SELECT 문
SELECT 문은 데이터베이스에서 데이터를 조회하고 선택할 때 사용됩니다. 일반적인 형식은 다음과 같습니다.
SELECT 열1, 열2, ... FROM 테이블명;
- 열1, 열2, ...: 조회할 열의 이름을 나열합니다. '*'를 사용하면 모든 열을 선택할 수 있습니다.
- 테이블명: 데이터를 조회할 테이블의 이름입니다.
예를 들어, "members" 테이블에서 이름과 나이 열을 조회하는 경우
SELECT name, age FROM members;
위의 예제는 "members" 테이블의 "name"과 "age" 열을 선택하여 조회합니다.
FROM 절
FROM 절은 SELECT 문에서 데이터를 가져올 테이블을 지정하는 데 사용됩니다. 일반적인 형식은 다음과 같습니다
SELECT 열1, 열2, ... FROM 테이블명;
- 열1, 열2, ...: 조회할 열의 이름을 나열합니다. '*'를 사용하면 모든 열을 선택할 수 있습니다.
- 테이블명: 데이터를 조회할 테이블의 이름입니다.
예를 들어, "members" 테이블에서 이름과 나이 열을 조회하는 경우
SELECT name, age FROM members;
위의 예제는 "members" 테이블의 "name"과 "age" 열을 선택하여 조회합니다.
SELECT 문과 FROM 절은 데이터베이스에서 필요한 데이터를 선택하고 가져오는 데 사용되는 핵심적인 구문입니다. 이를 통해 특정 열이나 전체 열을 선택하여 원하는 데이터를 조회할 수 있습니다.
2. 특정한 조건만 조회하기 : SELECT~FROM~WHERE
SELECT~FROM은 대부분 WHERE와 함께 사용합니다. WHERE는 필요한 것들만 골라서 결과를 보는 효과를 갖습니다.
1. WHERE없이 조회하기
WHERE가 없이 SELECT~FROM만으로 테이블을 조회하면 테이블의 모든 행이 출력됩니다.
데이터의 건수가 적은 경우에는 별 문제가 없지만, 실체 쿠팡/마켓컬리/지마켓/옥션 등과 같이 회원이 수백만 명 이상이 되는 인터넷 쇼핑물에서 회원테이블(member)을 다음과 같이 검색하면 어떨까요?
SELECT * FROM 쿠팡_회원_테이블(member);
결과가 엄청 많이 나오겠죠? 출력된 수백만 건 이상의 결과에서 필요한 데이터를 눈으로 찾아내는 것은 상당히 어려울 뿐 아니라, 이렇게 많은 데이터를 출력하면 아무리 고성능의 컴퓨터라도 부담이 될 수밖에 없습니다. 그래서 학습 등을 할 때와 같이 작은 데이터를 조회할 때를 제외한 SELECT문은 WHERE 절과 함께 사용합니다.
2. 기본적인 WHERE 절
WHERE절은 조회하는 결과에 특정한 조건을 추가해서 원하는 데이터만 보고 싶을 때 사용합니다.
SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;
또는
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
+ 이 형식에서 세미콜론(;)이 나오기 전까지는 한 줄로 쓰든, 여러 줄로 쓰든 동일합니다. SQL이 길거나 복잡한 경우에는 여러 줄로 나눠 쓰는 것이 좀 더 읽기 편합니다.
지금 찾는 이름(mem_name)이 '블랙핑크'라면 다음과 같은 조건식을 사용하면 됩니다. 열_이름 = 값은 열의 값에 해당하는 결과만 출력해줍니다.
SELECT * FROM member WHERE mem_name = '블랙핑크';
지금은 이름(mem_name)이 블랙핑크인 결과만 출력했습니다. 이름(mem_name)열은 문자형 (CHAR)이므로 작은 따옴표로 묶어줬습니다.
3. 관계 연산자, 논리 연산자의 사용
숫자로 표현된 데이터는 범위를 지정할 수 있습니다. 예를 들어 평균 키(height)가 162이하인 회원을 검색하려면 다음과 같이 관계연산자를 사용해서 조회할 수 있습니다.
SELECT mem_id, mem_name
FROM member
Where height <= 162;
2가지 이상의 조건을 만족하도록 할 수도 있습니다. 평균 키(height)가 165 이상이면서 인원(mem_number)도 6명 초과인 회원은 다음과 같인 논리 연산자 AND/OR를 이용해서 조회할 수 있습니다.
SELECT mem_id, mem_name
FROM member
Where height >= 165 AND mem_number > 6;
4. BETWEEN ~ AND
BETWEEN ~ AND는 SQL에서 사용되는 연산자로, 특정 범위 내에 있는 값을 비교하거나 선택하는 데 사용됩니다. BETWEEN 절은 일반적으로 WHERE 절과 함께 사용됩니다.
BETWEEN ~ AND의 일반적인 형식은 다음과 같습니다
column_name BETWEEN value1 AND value2
- column_name: 비교할 열의 이름입니다.
- value1 및 value2: 비교할 범위의 시작 값과 끝 값입니다.
BETWEEN ~ AND 연산자는 column_name의 값이 value1과 value2 사이에 포함될 때 조건이 참이 됩니다.
이 연산자는 동등 비교(범위에 포함)를 수행하므로, 시작 값과 끝 값도 포함됩니다.
예를 들어, "age" 열이 20부터 30 사이의 값을 가진 행을 선택하는 경우
SELECT * FROM members WHERE age BETWEEN 20 AND 30;
위의 예제는 "members" 테이블에서 "age" 열의 값이 20과 30 사이에 있는 모든 행을 선택합니다.
BETWEEN ~ AND 연산자를 사용하면 특정 범위 내에 있는 값들을 효과적으로 선택하거나 비교할 수 있습니다.
5. IN()
IN()은 SQL에서 사용되는 연산자로, 여러 개의 값을 비교하거나 선택하는 데 사용됩니다. IN() 연산자는 WHERE 절과 함께 주로 사용됩니다.
IN()의 일반적인 형식은 다음과 같습니다
column_name IN (value1, value2, ...)
- column_name: 비교할 열의 이름입니다.
- value1, value2, ...: 비교할 값들의 목록입니다.
IN() 연산자는 column_name의 값이 주어진 목록에 포함되어 있는지 확인합니다. 만약 값이 목록에 포함되어 있다면 조건은 참이 됩니다.
예를 들어, "grade" 열이 'A', 'B', 또는 'C'인 행을 선택하는 경우
SELECT * FROM students WHERE grade IN ('A', 'B', 'C');
위의 예제는 "students" 테이블에서 "grade" 열의 값이 'A', 'B', 또는 'C' 중 하나에 해당하는 모든 행을 선택합니다.
IN() 연산자를 사용하면 여러 값을 한 번에 비교하거나 선택할 수 있습니다. 이를 통해 특정 값들을 간단하게 필터링하거나 원하는 값을 선택할 수 있습니다.
6. LIKE()
LIKE()는 SQL에서 사용되는 연산자로, 문자열 패턴 매칭을 수행하여 특정 패턴을 가진 값을 비교하거나 선택하는 데 사용됩니다. LIKE() 연산자는 WHERE 절과 함께 주로 사용됩니다.
LIKE()의 일반적인 형식은 다음과 같습니다
column_name LIKE 'pattern'
- column_name: 비교할 열의 이름입니다.
- 'pattern': 비교할 패턴을 나타내는 문자열입니다. 패턴은 와일드카드 문자인 '%'나 '_'를 포함할 수 있습니다.
LIKE() 연산자는 column_name의 값이 'pattern'과 일치하는지 확인합니다. 'pattern'은 특정 문자열 패턴을 나타내며, 와일드카드 문자 '%'는 0개 이상의 임의의 문자와 대응되고, '_'는 정확히 한 개의 임의의 문자와 대응됩니다.
예를 들어, "name" 열이 'Smith'로 시작하는 행을 선택하는 경우
SELECT * FROM customers WHERE name LIKE 'Smith%';
위의 예제는 "customers" 테이블에서 "name" 열의 값이 'Smith'로 시작하는 모든 행을 선택합니다.
LIKE() 연산자를 사용하면 특정 패턴을 가진 문자열을 비교하거나 선택할 수 있습니다. 와일드카드를 사용하여 패턴을 유연하게 지정할 수 있으며, 다양한 문자열 매칭 조건을 처리할 수 있습니다.
3-2. 좀 더 깊게 알아보는 SELECT 문
SELECT 문에서는 결과의 정렬을 위한 ORDER BY, 결과의 개수를 제한하는 LIMIT, 중복 데이터를 제거하는 DISTINCT 등을 사용할 수 있습니다. 그리고 GROUP BY 절은 지정한 열의 데이터들을 같은 데이터끼리는 묶어서 결과를 추출합니다. 주로 그룹으로 묶는 경우에는 합계, 평균, 개수 등을 처리할 때 사용하므로 집계 함수와 함께 사용됩니다. GROUP BY 절에서도 HAVING 절을 통해 조건식을 추가할 수 있습니다. HAVAING 절은 WHERE절과 비슷해 보이지만, GROUP BY절과 함께 사용되는 것이 차이점입니다.ORDER BY 절은 SQL에서 사용되는 구문으로, 결과 집합을 정렬하는 데 사용됩니다. SELECT 문에 함께 사용되며, 정렬 기준을 지정하여 데이터를 정렬합니다.
1. ORDER BY절
ORDER BY의 일반적인 형식은 다음과 같습니다
SELECT 열1, 열2, ...
FROM 테이블명
ORDER BY 열1 [ASC|DESC], 열2 [ASC|DESC], ...
- 열1, 열2, ...: 정렬할 열의 이름을 나열합니다. 여러 개의 열을 지정할 수 있으며, 순서대로 정렬됩니다.
- [ASC|DESC]: 정렬 방향을 지정합니다. ASC는 오름차순(기본값), DESC는 내림차순을 나타냅니다.
예를 들어, "employees" 테이블에서 이름(name)을 오름차순으로 정렬하여 선택하는 경우
SELECT * FROM employees ORDER BY name ASC;
위의 예제는 "employees" 테이블에서 모든 열을 선택하며, 이름(name) 열을 오름차순으로 정렬합니다.
여러 열에 대한 정렬을 지정하려면 추가 열과 정렬 방향을 지정하면 됩니다.
예를 들어, "employees" 테이블에서 이름(name)을 오름차순으로 정렬하고, 그 다음에 급여(salary)를 내림차순으로 정렬하여 선택하는 경우
SELECT * FROM employees ORDER BY name ASC, salary DESC;
위의 예제는 "employees" 테이블에서 모든 열을 선택하며, 이름(name)을 오름차순으로 먼저 정렬하고, 그 다음에 급여(salary)를 내림차순으로 정렬합니다.
ORDER BY 절을 사용하면 데이터를 원하는 방식으로 정렬하여 조회할 수 있습니다.
2. 출력의 개수를 제한 : LIMIT
LIMIT는 SQL에서 사용되는 절(clause)로, 쿼리 결과의 행 수를 제한하는 데 사용됩니다. 일반적으로 SELECT 문과 함께 사용되며, 반환되는 결과의 크기를 제한하고 특정 범위의 행만 가져올 수 있습니다.
LIMIT의 일반적인 형식은 다음과 같습니다
SELECT 열1, 열2, ...
FROM 테이블명
LIMIT 숫자;
- 열1, 열2, ...: 선택할 열의 이름을 나열합니다. '*'을 사용하면 모든 열을 선택할 수 있습니다.
- 숫자: 반환할 행의 최대 개수를 지정합니다.
예를 들어, "employees" 테이블에서 처음 10개의 행만 선택하는 경우
SELECT * FROM employees LIMIT 10;
위의 예제는 "employees" 테이블에서 모든 열을 선택하며, 최대 10개의 행만 반환합니다.
LIMIT는 결과 집합의 일부를 선택하고 필요한 행의 수를 제한하는 데 사용됩니다.
또한 OFFSET을 함께 사용하여 결과 집합의 시작 위치를 지정할 수도 있습니다.
예를 들어, "employees" 테이블에서 10개의 행을 건너뛰고 그 다음 5개의 행만 선택하는 경우
SELECT * FROM employees LIMIT 5 OFFSET 10;
위의 예제는 "employees" 테이블에서 모든 열을 선택하며, 시작 위치로부터 10개의 행을 건너뛰고 그 다음 5개의 행만 반환합니다.
LIMIT를 사용하여 쿼리 결과의 크기를 제한하고 필요한 범위의 행만 선택할 수 있습니다. 이를 통해 데이터를 효과적으로 관리하고 원하는 결과를 얻을 수 있습니다.
3. 중복된 결과를 제거 : DISTINCT
DISTINCT는 SQL에서 사용되는 키워드로, 쿼리 결과에서 중복된 값을 제거하는 데 사용됩니다. 주로 SELECT 문과 함께 사용되며, 고유한(unique) 값을 선택하고자 할 때 사용됩니다.
DISTINCT의 일반적인 형식은 다음과 같습니다
SELECT DISTINCT 열1, 열2, ...
FROM 테이블명;
- 열1, 열2, ... : 중복된 값을 제거하고자 하는 열의 이름을 나열합니다. 여러 개의 열을 지정할 수 있습니다
- 테이블명: 데이터를 조회할 테이블의 이름입니다.
예를 들어, "customers" 테이블에서 "city" 열의 중복된 값을 제거하여 선택하는 경우
SELECT DISTINCT city FROM customers;
위의 예제는 "customers" 테이블에서 "city" 열의 중복된 값을 제거하여 고유한 도시(city)들만 선택합니다.
DISTINCT는 결과 집합에서 중복된 값을 제거하여 유일한(unique) 값을 선택하는 데 사용됩니다. 이를 통해 고유한 값을 식별하거나 중복된 값을 제외할 수 있습니다. DISTINCT는 단일 열 뿐만 아니라 여러 열에도 적용할 수 있습니다.
4. GROUP BY절
GROUP BY는 SQL에서 사용되는 구문으로, 결과 집합을 그룹으로 분류하고 각 그룹에 대한 집계 함수를 계산하는 데 사용됩니다. 주로 SELECT 문과 함께 사용되며, 데이터를 그룹별로 요약하거나 집계된 정보를 얻을 때 사용됩니다.
GROUP BY의 일반적인 형식은 다음과 같습니다
SELECT 열1, 집계함수(열2), ...
FROM 테이블명
GROUP BY 열1;
- 열1 : 그룹화할 기준이 되는 열의 이름입니다.
- 집계함수(열2) : 각 그룹에 대한 집계 함수를 계산할 열의 이름입니다. SUM, AVG, COUNT, MAX, MIN 등의 집계 함수를 사용할 수 있습니다.
- 테이블명 : 데이터를 조회할 테이블의 이름입니다.
예를 들어, "orders" 테이블에서 각 고객별로 주문된 총량을 계산하는 경우
SELECT customer_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY customer_id;
위의 예제는 "orders" 테이블에서 각 고객(customer_id)별로 주문된 총량(quantity)을 계산합니다. 결과는 각 고객별로 그룹화되며, 그룹별로 총량이 계산됩니다.
GROUP BY는 데이터를 그룹화하여 각 그룹에 대한 집계된 결과를 얻을 수 있습니다. 그룹화된 데이터를 기반으로 요약 정보를 얻거나 집계 함수를 사용하여 계산할 수 있습니다. GROUP BY 절은 일반적으로 집계 함수와 함께 사용되며, 데이터의 특정 특성을 분석하거나 요약할 때 유용합니다.
5. 집계함수
5-1. SUM(): 주어진 열의 합계를 계산합니다.
예를 들어, "orders" 테이블에서 총 판매량을 계산하는 경우
SELECT SUM(quantity) AS total_sales FROM orders;
위의 예제는 "orders" 테이블의 "quantity" 열에 있는 값들의 합계를 계산하고, 결과를 "total_sales"라는 별칭으로 반환합니다.
5-2. AVG(): 주어진 열의 평균 값을 계산합니다.
예를 들어, "products" 테이블에서 평균 가격을 계산하는 경우
SELECT AVG(price) AS average_price FROM products;
위의 예제는 "products" 테이블의 "price" 열에 있는 값들의 평균을 계산하고, 결과를 "average_price"라는 별칭으로 반환합니다.
5-3. COUNT(): 주어진 열의 개수를 계산합니다.
예를 들어, "customers" 테이블에서 등록된 고객의 수를 계산하는 경우
SELECT COUNT(*) AS total_customers FROM customers;
위의 예제는 "customers" 테이블의 행의 개수를 계산하고, 결과를 "total_customers"라는 별칭으로 반환합니다. 여기서 '*'는 모든 열을 의미합니다.
5-4. MAX(): 주어진 열에서 최대값을 반환합니다.
예를 들어, "inventory" 테이블에서 가장 많이 남은 재고 수량을 계산하는 경우
SELECT MAX(quantity) AS max_inventory FROM inventory;
위의 예제는 "inventory" 테이블의 "quantity" 열에서 가장 큰 값, 즉 최대 재고 수량을 계산하고, 결과를 "max_inventory"라는 별칭으로 반환합니다.
5-5. MIN(): 주어진 열에서 최소값을 반환합니다.
예를 들어, "products" 테이블에서 가장 낮은 가격을 계산하는 경우:
SELECT MIN(price) AS min_price FROM products;
위의 예제는 "products" 테이블의 "price" 열에서 가장 작은 값, 즉 최소 가격을 계산하고, 결과를 "min_price"라는 별칭으로 반환합니다.
이러한 집계 함수를 사용하여 데이터의 요약 정보를 계산하고 분석할 수 있습니다. 필요에 따라 복합적인 쿼리를 작성하여 여러 집계 함수를 함께 사용할 수도 있습니다.
3-3 데이터 변경을 위한 SQL문
1. 데이터 입력 : INSERT
데이터베이스 테이블에 새로운 레코드(행)을 추가하는 작업입니다. 일반적으로 INSERT INTO 문을 사용합니다. 다음은 기본적인 형식입니다
INSERT INTO 테이블명 (열1, 열2, ...) VALUES (값1, 값2, ...);
위의 코드에서 "테이블명"은 데이터를 추가할 테이블 이름이고, "열1, 열2, ..."은 추가할 열들의 이름이며, "값1, 값2, ..."는 각 열에 대응하는 실제 값을 의미합니다.
2. 데이터 수정 : UPDATE
이미 존재하는 데이터의 값을 변경하는 작업입니다. UPDATE 문을 사용하여 특정 조건에 맞는 레코드를 선택하고 열 값을 수정합니다. 다음은 기본적인 형식입니다:
UPDATE 테이블명 SET 열1 = 값1, 열2 = 값2, ... WHERE 조건;
위의 코드에서 "테이블명"은 데이터를 수정할 테이블 이름이며, "열1, 열2, ..."은 수정할 열들의 이름이고, "값1, 값2, ..."은 각 열에 대응하는 실제 값을 의미합니다. "WHERE" 절을 사용하여 수정할 레코드를 선택합니다.
3. 데이터 삭제 : DELETE
데이터베이스 테이블에서 특정 조건에 맞는 레코드(행)를 삭제하는 작업입니다. DELETE FROM 문을 사용하여 행을 삭제합니다. 다음은 기본적인 형식입니다:
DELETE FROM 테이블명 WHERE 조건;
위의 코드에서 "테이블명"은 데이터를 삭제할 테이블 이름이며, "WHERE" 절을 사용하여 삭제할 레코드를 선택합니다.
'혼공학습단 > SQL' 카테고리의 다른 글
[Sql] Chapter 04. SQL 고급 문법 (0) | 2023.07.21 |
---|---|
[Sql] 혼공학습단 10기_2주차 미션 (0) | 2023.07.16 |
[Sql] Chapter 02. 실전용 SQL 미리 맛보기 (0) | 2023.07.16 |
[Sql] Chapter 01. 데이터베이스와 SQL (0) | 2023.07.16 |
[Sql] 혼공학습단 10기_1주차 미션 (0) | 2023.07.16 |