[MySQL] SQL 기본 문법 복습 (1)

Eunsuh Kim·2023년 3월 22일
0

SQL

목록 보기
1/3

SELECT, FROM, WHERE

SELECT 컬럼이름1, 컬럼이름2
FROM 테이블이름
WHERE 조건절;

예시

SELECT OrderID, CustomerID, EmployeeID
FROM Orders
WHERE ShipperID = 1;

WHERE절 연산자

비교 연산자

연산자의미
=같다
!=, <>다르다
>, <크다, 작다
>=, <=크거나 같다, 작거나 같다
IN ()리스트의 값들 중에 있으면 TRUE 반환
NOT IN ()리스트의 값들 중에 없으면 TRUE 반환
IS NULL값이 NULL이면 TRUE 반환
IS NOT NULL값이 NULL이 아니면 TRUE 반환
BETWEEN {MIN} AND {MAX}두 값 사이에 있으면 TRUE 반환
NOT BETWEEN {MIN} AND {MAX}두 값 사이에 없으면 TRUE 반환

산술 연산자

연산자의미
+, -, *, /더하기, 빼기, 곱하기, 나누기
%, MOD나머지

논리 연산자

연산자의미
AND, &&조건식이 모두 TRUE일때만 TRUE
OR조건식 중 1개만 TRUE이면 TRUE

패턴 매칭 연산자

연산자의미
LIKE특정 패턴을 포함하는 데이터 검색 시 사용(pattern matching). 와일드카드 문자들과 같이 쓰임
REGEXPLIKE 연산자보다 더욱 복잡한 패턴을 검색 시 사용(정규표현식)

WILDCARD

  • 문자 대체를 위해 사용되는 기호
기호의미
%0개 이상의 문자를 대체
_1개의 문자를 대체
[...]괄호([]) 안에 있는 어떠한 문자
[^...]괄호([]) 안에 있지 않은 어떠한 문자
  • 예시
SELECT OrderID, CustomerID, EmployeeID FROM Orders
WHERE Orderdate LIKE '1997%';

Orderdate 컬럼의 데이터 중 앞의 4개 글자가 1997인 것을 찾아라.

SELECT ProductID, ProductName, Price FROM Products
WHERE ProductName LIKE 'a_%'

ProductName 컬럼의 데이터 중 첫번째 글자가 a이고 두번째 글자가 존재하는 것을 찾아라. (a 불가능, ab 가능, abcde 가능)

정규표현식에서 사용하는 패턴

매칭
패턴기능예시설명
.문자 1개"..."문자열의 길이가 3이상인 것을 찾음
|OR"강아지|고양이"'강아지' 또는 '고양이'에 해당하는 문자열을 찾음
[][] 안에 나열된 패턴에 해당하는 문자열"1[xyz]"'1x' 또는 '1y' 또는 '1z'인 문자열을 찾음
^문자열의 시작"^[aeiou]"a 또는 e 또는 i 또는 o 또는 u로 시작하는 문자열을 찾음
$문자열의 끝"e$"e로 끝나는 문자열을 찾음
횟수
패턴기능예시설명
*0회 이상 나타나는 문자"a*""a"가 0번 이상 등장하는 문자열을 찾음. 'a', 'aaaa', 'bcd' 모두 해당.
+1회 이상 나타나는 문자"와+""와"가 1번 이상 등장하는 문자열을 찾음.
{m, n}m회 이상 n회 이하 반복되어 나타나는 문자"a{1,2}""a"가 1회 이상 2회 이하 나타나는 문자열을 찾음. "apple", "again" 모두 해당
?0~1회 나타나는 문자"[abc]?""a" 또는 "b" 또는 "c"가 0~1회 등장하는 문자열을 찾음. "apple", "bob", "company" 모두 해당
그룹
패턴기능예시설명
[A-z] 또는 [:alpha:] 또는 \a알파벳 대문자 또는 소문자인 문자열을 찾음"[A-z]+"대상 문자열에서 알파벳이 1개 이상 있는 문자열을 찾음
[0-9] 또는 [:digit:] 또는 \d숫자인 문자열을 찾음"^[0-9]+"한 개 이상의 숫자로 시작하는 문자열을 찾음
NOT
패턴기능예시설명
[^문자]괄호 안의 문자를 포함하지 않은 문자열을 찾음"[^abc]"'a', 'b', 'c'를 모두 포함하지 않은 문자열을 찾음. "apple", "bob", "company" 모두 제외

AS를 통한 별칭 붙이기

  • 컬럼 이름 뒤 AS를 써서 별칭 선언 가능
  • AS 생략 가능
SELECT COUNT(DISTINCT CustomerID) AS Valid_count
FROM Orders
WHERE Orderdate LIKE '1996%';

GROUP BY

  • 그룹화하여 데이터 조회

예시

SELECT ProductID, SUM(Quantity) FROM OrderDetails
GROUP BY ProductID;

ORDER BY

  • 컬럼을 기준으로 정렬하여 조회
  • ASC/DESC (기본은 ASC)

예시

SELECT ProductID, ProductName, Price FROM Products
ORDER BY Price;
SELECT ProductID, ProductName, Price FROM Products
ORDER BY CategoryID ASC, Price DESC;

LIMIT

  • 조회 시 한계 지정

예시

SELECT ProductName, Price
FROM Products
ORDER BY Price DESC
LIMIT 10;

DISTINCT

  • 중복 제거

예시

SELECT DISTINCT CITY
FROM STATION
WHERE MOD(ID, 2) = 0;

REPLACE

  • 대체
SELECT REPLACE(컬럼이름, '기존 문자열', '변경할 문자열')
FROM 테이블이름;

HAVING

  • GROUP BY한 결과에 조건절을 붙이고 싶을 때
  • GROUP BY의 WHERE절과도 같음

예시

SELECT ProductID, MAX(Quantity) AS MAX_Quantity FROM OrderDetails
GROUP BY ProductID
HAVING MAX_Quantity >= 100;

집계함수

MAX, MIN, SUM, AVG

COUNT

  • 해당 컬럼의 데이터 개수
SELECT COUNT(컬럼이름) FROM 테이블이름;
  • 전체 행 개수를 가져올 때는 컬럼 대신 *을 지정
SELECT COUNT(*) FROM 테이블이름;

숫자함수

ROUND

  • 소수점 이하 n번째 자리로 반올림
SELECT ROUND(10.49, 1); --- 10.5

TRUNCATE

  • 소수점 이하 n번째 자리로 버림
SELECT TRUNCATE(10.49, 1); --- 10.4

CEILING

  • 정수로 올림
SELECT CEILING(10.95); --- 11

FLOOR

  • 정수로 버림
SELECT FLOOR(10.95); --- 10

SQRT

  • 제곱근

POW

  • n제곱

ABS

  • 절댓값 반환

문자열 함수

LENGTH

  • 전달받은 문자열의 길이 반환
SELECT LENGTH('12345678'); --- 8

JOIN

  • 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현
  • INNER JOIN, LEFT JOIN, RIGHT JOIN

INNER JOIN

SELECT SUM(CITY.POPULATION)
FROM CITY JOIN COUNTRY ON CITY.CountryCode = COUNTRY.Code
WHERE CONTINENT = 'Asia';

UNION

  • 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용
  • 이때 각각의 SELECT 문으로 선택된 컬럼(필드)의 개수와 타입은 모두 같아야 하며, 컬럼(필드)의 순서 또한 같아야 함
SELECT 컬럼이름
	FROM 테이블이름
UNION
SELECT 컬럼이름
	FROM 테이블이름

참고 자료

profile
안녕하세요!

0개의 댓글