공부 기록/MySQL

SQL 기본 문법 (1)

도도히히 2025. 11. 9. 23:32

1. SQL 개요

  • SQL (Structured Query Language): 데이터베이스에서 사용되는 구조화된 질의 언어
  • 표준: ANSI/ISO SQL 표준(예: ANSI-92, ANSI-99)이 있으며, 대부분의 DBMS(데이터베이스 관리 시스템)가 이를 따름
  • DBMS별 SQL: 각 회사는 표준을 준수하며 고유의 기능을 추가한 SQL을 사용함
    • MySQL: SQL
    • Oracle: PL/SQL
    • SQL Server: T-SQL (Transact SQL)

2. SELECT 문의 기본

  • SELECT ... FROM: 테이블에서 데이터를 검색하는 기본 구문
    • SELECT *: 모든 열을 선택
    • SELECT 열1, 열2, ...: 특정 열만 쉼표(,)로 구분하여 선택
  • USE [데이터베이스이름]: 작업할 데이터베이스를 지정하거나 변경. Workbench에서는 스키마 이름을 더블클릭하여 지정할 수도 있음
  • 기타 기본 명령어:
    • SHOW DATABASES; : 서버의 모든 데이터베이스 목록 확인
    • SHOW TABLES; : 현재 데이터베이스의 테이블 목록 확인
    • DESCRIBE [테이블이름]; (또는 DESC) : 테이블의 구조(열 정보)를 확인

3. WHERE 절 (데이터 필터링)

SELECT 문에서 WHERE 절을 추가하여 특정 조건을 만족하는 행만 조회할 수 있음

  • 조건 연산자: AND , OR 를 사용해 여러 조건을 조합
  • BETWEEN ... AND ...: 특정 범위 내의 값 조회 (예: height BETWEEN 180 AND 182).
  • IN (...): 이산적인(discrete) 값 목록 중 하나와 일치하는 데이터를 조회 (예: addr IN ('경남', '충남', '경북')).
  • LIKE: 문자열 패턴 검색
    • %: 0개 이상의 모든 문자를 의미함 (예: '김%').
    • _: 1개의 단일 문자를 의미함 (예: '_경규').

4. 서브쿼리 (Subquery)

SELECT 문 내부에 또 다른 SELECT 문(서브쿼리)을 사용하여, 그 결과를 상위 쿼리의 조건으로 활용할 수 있음

  • 서브쿼리의 결과가 2개 이상의 행을 반환할 때 비교 연산자를 그냥 사용하면 오류가 발생함
  • 이때 ANY, ALL, SOME 연산자를 사용해야 함
    • >= ANY: 서브쿼리 결과 중 "최솟값"보다 크거나 같으면 참 
    • >= ALL: 서브쿼리 결과 중 "최댓값"보다 크거나 같으면 참 
    • = ANY는 IN과 동일한 의미

5. 결과 정렬 및 제한

  • ORDER BY: 결과를 특정 열 기준으로 정렬
    • ASC: 오름차순 (기본값)
    • DESC: 내림차순
    • 여러 열을 기준으로 정렬할 수 있음 (예: ORDER BY height DESC, userName ASC).
  • DISTINCT: SELECT 키워드 뒤에 사용하여 중복된 값을 제거하고 고유한 값만 표시
  • LIMIT: 출력되는 행의 개수를 제한
    • LIMIT 5: 상위 5개만 출력
    • LIMIT 0, 5 (또는 LIMIT 5 OFFSET 0): 0번 인덱스부터 5개를 출력

6. GROUP BY 및 HAVING 절

  • GROUP BY: 특정 열의 값이 같은 행들을 하나의 그룹으로 묶음
  • 집계 함수 (Aggregate Functions): GROUP BY와 함께 사용되어 그룹별 통계를 냄
    • SUM(): 합계
    • AVG(): 평균
    • MAX(): 최댓값
    • MIN(): 최솟값
    • COUNT(): 행의 개수. COUNT(*)는 전체 행 수, COUNT(열이름)은 해당 열이 NULL이 아닌 행의 수를 셈
  • HAVING: GROUP BY로 그룹화된 결과에 대해 조건을 적용하여 필터링 (WHERE는 그룹화 전 개별 행에, HAVING은 그룹화 후 그룹에 적용)
    • 예: GROUP BY userID HAVING SUM(price * amount) > 1000 (총구매액이 1000을 초과하는 사용자 그룹만)

'공부 기록 > MySQL' 카테고리의 다른 글

SQL 기본 문법 (2)  (0) 2025.11.12