본문 바로가기
카테고리 없음

[MySQL] - SQL 기본 문법 정리

by rosemarie 2024. 3. 12.
반응형

- SELECT 문의 기본 형식은 다음과 같다.

SELECT 열_이름
	FROM 테이블_이름
    WHERE 조건식
    GROUP BY 열_이름
    HAVING 조건식
    ORDER BY 열_이름
    LIMIT 숫자;

 


📌 USE  -  스키마 (데이터베이스) 선택

USE market_db;
  • USE 문을 사용하여 SQL을 사용할 스키마를 지정할 수 있다.

📌 SELECT - 조회할 데이터(컬럼) 지정

--SELECT "컬럼명" FROM "테이블명"
SELECT member_id, name FROM member
#SELECT
SELECT * FROM member;
SELECT * FROM market_db.member;
SELECT * FROM member
  • 기본적으로 테이블 이름은 스키마명.테이블명 으로 표현한다.
  • 하지만 USE 문으로 데이터베이스를 지정해주었다면 테이블명만 명시해도 된다.

📌 WHERE -  특정 조건만 조회하기

 

--member 테이블에서 mem_number 컬럼 값이 5이상인 데이터 조회
SELECT * FROM member
	WHERE mem_number>=5;
  • WHERE절을 사용해 특정 조건에 해당하는 데이터만 조회할 수 있다.
  • 관계 연산자 / 논리 연산자 사용 가능

 

논리 연산자 AND, OR 사용 가능

SELECT TRUE OR FALSE AND FALSE; //1
SELECT (TRUE OR FALSE) AND FALSE; //0
  • 여러 조건이 필요한 경우 논리 연산자를 사용하면 된다.
  • AND OR보다 우선 순위를 가진다.
  • MySQL에서는 &&  || 도 사용 가능하다. 

 

BETWEEN  -  범위 표현식

--height 컬럼 값이 160이상 165이하하
SELECT * FROM member
	WHERE height between 160 and 165;
  • between  연산자를 이용하여 특정 범위에 해당하는 데이터를 조회할 수 있다.
  • 하지만 인덱스를 사용할 수 없으므로 주의

 

IN  ()  - 여러 값 매칭

--addr 컬럼값이 경기, 전남, 경남인 데이터 조회
SELECT * FROM member
	WHERE addr IN("경기", "전남", "경남");
SELECT * FROM member
	WHERE addr = "경기" AND addr = "전남" AND addr = "경남"
  • IN() 연산자를 이용하여 특정 값이 포함된 데이터를 조회할 수 있다.
  • IN 연산자는 동등비교 '=' 를 여러번 수행하는 효과를 가진다. 따라서 인덱스를 최적으로 활용할 수 있다.

 

LIKE -  문자열의 일부 글자 검색

SELECT * FROM member WHERE mem_name LIKE "블____";
SELECT * FROM member WHERE mem_name LIKE "블%";
SELECT * FROM member WHERE mem_name LIKE "%블%";
  • 문자열의 일부 글자 검색
    • _ : 한 글자만 매치
    • % : 몇 글자든 매치

 

서브 쿼리

SELECT mem_name, height
    from member
    WHERE height > (select height from member where mem_name LIKE "에이핑크");
  • 2개의 SQL 문을 하나로 만듦

📌 ORDER BY  -  조회된 데이터를 정렬

SELECT * FROM member
	ORDER BY debut_date
  • ORDER BY  절은 데이터를 정렬한다.
  • WHERE 절 다음에 나와야 함
  • ASC (ascending order) : 오름차순 → (생략시 기본값)
  • DESC (descending order) : 내림차순
SELECT * FROM member
    WHERE height>= 164
    ORDER BY height DESC, debut_date;
SELECT * FROM member
	LIMIT 3;
SELECT * FROM member
	LIMIT 3, 2
    LIMIT 2 OFFSET 3;
  • LIMIT 시작, 개수 
  • LIMIT 뒤에 하나의 숫자만 입력시 처음부터 N까지의 데이터만 가져옴
  • LIMIT 과 OFFSET 조합으로도 출력 개수를 제한할 수 있다.

📌 DISTINCT -  중복 데이터 제거

--addr의 모든 컬럼 값을 중복을 제거하여 조회
SELECT DISTINCT addr
	FROM member;
  • DISTINCT를 열 이름 앞에 붙이면 중복된 값은 1개만 출력된다.

📌 GROUP BY  -  그룹화

SELECT mem_id, SUM(amount) AS "합계"
	FROM buy
    GROUP BY mem_id
    ORDER BY mem_id;
  • 컬럼이 같은 데이터를 그룹화 해주는 기능
  • 보통 집계 함수와 같이 쓰임
SELECT genre, AVG(price) AS "평균"
    FROM library
    GROUP BY genre;

 

 

  • GROUP BY 로 지정한 컬럼이 같은 데이터끼리 그룹화
  • 여러 컬럼 지정 가능

집계 함수 (Aggregate Function)

  • SUM() : 컬럼의 합계를 반환
  • AVG() : 컬럼의 평균을 반환
  • MIN() : 컬럼의 최소값을 반환
  • MAX() : 컬럼의 최대값을 반환
  • COUNT() : 행의 개수를 셈
  • COUNT(DISTINCT) : 행의 개수를 셈
SELECT mem_id, SUM(amount*price) AS "총 금액"
	FROM buy
    GROUP BY mem_id
    ORDER BY mem_id;
  • 집계 함수 내에서 사칙 연산도 가능하다.

COUNT()

SELECT COUNT(*)
	FROM member;
SELECT COUNT(phone1)
	FROM member;
  • COUNT(*) 연산은 모든 row를 대상으로 이루어지기 때문에 NULL값이 포함되어있어도 카운트됨
  • COUNT(phone1) 연산은 phone1 값에 NULL이 있을 경우 카운트하지 않음

📌 HAVING  -  그룹 조건

SELECT SUM(amount*price) AS "총금액"
	FROM buy
    GROUP BY mem_id
    HAVING SUM(amount*price) >= 1000;
  • 그룹화된 데이터에 대해서 조건을 제한함
  • GROUP BY 뒤에 와야함