컴퓨터/데이터베이스

[데이터 베이스]SQL 기본 구문

sidedoor 2024. 1. 27. 00:29

SQL에서 가장 기본이 되는 구문은 SELECT와 FROM을 활용한 형태로 다음과 같다

SELECT column FROM table;

SELECT * FROM school.student;

 

여기서 SELECT은 조회할 데이터의 열을 지정하고 FROM은 데이터를 조회할 테이블의 이름을 지정한다.

 

이때 column 부분에 *는 모든 열을 선택하라는 의미이고, 만약 특정 열만 선택하려면 열의 이름을 쉼표로 구분하여 나열해야한다.

 

그리고 스키마는 데이터베이스 구조를 정의하는데 테이블, 열, 데이터 타입, 관계 등을 포함한다.

위의 구문에서 school이 스키마에 해당하고 student는 해당 스키마에 있는 table을 의미한다.

SELECT student_age AS "AGE" FROM school.student;

만약 column의 이름을 변경하고 싶으면 AS를 사용한 다음 뒤에 바꿀 이름을 입력해주면 된다.

 

SELECT CONCAT(student_no, ' is a ', student_age) AS "student AGE" FROM school.student;

그리고 여러개의column을 병합하고 싶으면 concat함수를 이용하면 된다.

이때 column들 사이에 문자를 넣어서 같이 출력이 되게 할 수도 있다.

다만 이렇게 병합을 하여 새로 생성된 column에는 이름이 없기 때문에 기본적으로 concat이라는 이름이 붙게 되고 AS를 통해서 이름을 새로 지정하면 된다.

집계 함수(Aggregate Function)

 - AVG

AVG 함수는 숫자 데이터가 있는 열의 평균 값을 계산한다.

SELECT AVG(price) FROM products;

이와 같은 코드는 products테이블에 있는 price 열의 평균 값을 계산한다.

 

 - COUNT

COUNT 함수는 행의 수를 계산한다.

SELECT COUNT(*) FROM orders;

이는 orders 테이블의 전체 행 수를 계산한다.

만약 특정 열을 지정하면 해당 열의 비어 있지 않은 값의 개수를 계산한다.

 

 - MIN &  MAX

각각의 함수는 열의 최소값과 최대값을 찾는다.

SELECT MIN(age) FROM customers;
SELECT MAX(age) FROM customers;

이 코드들은 각각 customers 테이블의 age 열에서 가장 낮은 값과 높은 값을 찾는다.

 

 - SUM

SUM 함수는 숫자 데이터가 있는 열의 총합을 계산한다.

SELECT SUM(quantity) FROM order_details;

이 코드는 order_details 테이블의 quantity 열의 값을 모두 더한다.

주석

-- 한 줄을 주석처리하려면 이와 같이 처리하면 된다.
SELECT * FROM table; -- 주석

/*
만약 여러 줄을 주석 처리하려면
이처럼 처리해주면 된다.
SELECT * FROM table;
*/

필터

SQL에서 WHERE 절은 데이터를 필터링하는 데 사용된다.

쿼리에 WHERE 절을 추가하면 특정 조건을 만족하는 행만을 결과로 가져올 수 있다. 

 

기본적으로 =, !=(<>), >, <, >=, <= 등의 비교 연산자를 사용해서 조건을 설정한다.

여기서 AND, OR, NOT과 같은 논리 연산자를 이용해 복합 조건을 설정할 수도 있다.

이때 특정 범위 안에 있는 값을 원할 경우 부등호와 AND를 사용하는 것이 아니라 BETWEEN을 사용해서 범위 안에 있는 값을 필터링 할 수 있다.

그리고 IN을 사용하면 특정 리스트 안에 있는 값과 일치하는 값만을 필터링 할 수도 있다.

또 LIKE연산자를 사용해서 특정 패턴을 만족하는 문자열을 찾을 수 있다.

SELECT * FROM table_name WHERE condition; -- 기본적인 where 구조
SELECT * FROM employees WHERE age > 30 AND department = 'Sales'; -- 복합 조건을 사용한 구조
SELECT * FROM products WHERE price BETWEEN 10 AND 20; -- between을 사용해 범위를 지정
SELECT * FROM employees WHERE department IN ('Sales', 'Marketing'); -- in을 사용해 리스트 값에 일치하는 경우 선택
SELECT * FROM customers WHERE name LIKE 'J%'; -- like를 이용해 특정 패턴을 만족시키는 문자열 찾음

연산 우선순위

  1. 괄호 ()
    괄호 안의 연산이 가장 먼저 수행된다.


  2. 산술 연산자
    곱셈 *과 나눗셈 /이 덧셈 +과 뺄셈 -보다 높은 우선순위를 가진다.

    즉, 2 + 3 * 4는 2 + (3 * 4)로 계산된다.

  3. 비교 연산자
    =, !=, <>, >, <, >=, <= 이러한 연산자들은 산술 연산자보다 낮은 우선순위를 가지고 논리 연산자보다 높은 우선순위를 가진다.


  4. 논리 연산자
    NOT이 AND보다 높은 우선순위를 가지며, AND는 OR보다 높은 우선순위를 가진다.

    따라서 NOT A AND B는 (NOT A) AND B로 해석되고, A AND B OR C는 (A AND B) OR C로 해석된다.

NULL

SQL에서 NULL 값은 특정 필드에 값이 없음을 나타낸다. NULL은 비어 있음 또는 알 수 없음을 의미하며 0이나 빈 문자열과는 다르다.

실례로 NULL = NULL , NULL != NULL 모두 다 False가 나온다.

즉, NULL은 다른 값과 일반적인 방식으로 비교할 수 없고 NULL인지 확인하려면 IS NULL 또는 IS NOT NULL 연산자를 사용해야 한다.

그리고 NULL과 연산을 한 결과는 어떤 연산을 하여도 대부분 NULL로 나온다

 

데이터를 다루다 보면 실제로 NULL이 중간에 있는 경우가 많다.

이러한 경우 따로 처리해 주지 않으면 문제가 발생할 수 있다.

COALESCE 함수는 SQL에서 NULL 값을 처리하는 데 사용되는 함수이다.

SELECT COALESCE(column, 'EMPTY') FROM table;

이와 같이 사용되고 값이 NULL인 경우 기본값을 반환하고 NULL이 아니면 실제 값을 반환 한다.

중복되는 값 제거

데이터를 분석 하다보면 중복되는 데이터가 추출되는 경우가 많이 발생한다.

이런 경우 DISTINCT함수를 이용해서 중복을 제거하고 싶은 열을 입력하면 해당하는 열에서 중복된 데이터를 제거하고 겹치지 않는 열만 보여준다.

SELECT DISTINCT emp_no from employees;

데이터 정렬

데이터를 정렬해야하는 경우 ORDER BY를 사용해서 쿼리 결과를 특정 열에 따라 정렬할 수 있다.

기본적으로 ORDER BY는 오름차순으로 데이터를 정렬하지만 내림차순으로 정렬할 수 있고 여러 행에 대해서 다르게 정렬할 수도 있다.

그리고 열에 해당하는 부분에 MAX()나 LENGTH()와 같은 함수를 사용해서 해당 열을 이용한 결과 값으로 정렬 할 수도 있다.

SELECT name, age FROM employees ORDER BY age;
SELECT name, department, age FROM employees ORDER BY department ASC, age DESC;