이 글은 "TCPschool/코딩과 데이터/MySQL"을 읽고 주관적으로 작성된 글입니다.
https://tcpschool.com/mysql/intro
1. 산술 연산자
1) 연산자
- 대부분 프로그래밍 언어에서 지원하는 기본 연산자를 모두 제공
- 연산자를 사용하여 데이터 추출 /처리
2) 산술 연산자(arithmetic operator)
- 이항 연산자
- +
- -
- *
- /
- DIV
- 소수부 버림 - % 또는 MOD
SELECT 504.7 + 13,
504.7 * 0.9,
504.7 / 2,
504.7 DIV 2,
504.7 % 2;
- 연산자의 우선순위
- INTERVAL
- BINARY, COLLATE
- !
- - ~
- ^
- * / DIV % MOD
- - + (이항연산자)
- << >>
- &
- |= <=> >= > <= < <> != IS LIKE REGEXP IN
- BETWEEN, CASE, WHEN, THEN, ELSE
- NOT
- AND, &&
- XOR
- OR, ||
- = :=
2. 대입 연산자
1) 대입 연산자
- 변수 타입 대입
- =
- SET문 / UPDATE의 SET절 에서만 대입 연산자로 사용됨
- 이외의 사용은 비교 연산자로 해석 - :=
- 그 외 대입연산
- =
UPDATE Reservation
SET RoomNum = 504;
3. 비교 연산자
1) 비교 연산자
- 참이면 1 / 거짓이면 0
- <>
- !=와 같음 - <=>
- 피연산자 모두 NULL이면 참 - IS
- 같으면 참
- 오른쪽 피연산자가 BOOL(TRUE / FALSE / UNKWON)일 때 사용 - IS NOT / IS NULL / IS NOT NULL
- (NOT) BETWEEN min AND max
- min보다 크거나 같고 max보다 작거나 같으면 참 - (NOT) IN()
- 피연산자 값이 인수로 전달받은 리스트에 존재하면 참
- <>
SELECT 3=3, -- 1
0 = NULL, -- NULL
1 IS TRUE, -- 1
1 IS NULL, -- 0
3 BETWEEN 2 AND 7, -- 1
5 IN (2, 3, 4, 5); -- 1
4. 논리 연산자
- 생략
5. 비트 연산자
- 생략
6. 흐름 제어
1) 흐름 제어
- 순차적인 흐름을 제어할 때 사용하는 연산자와 함수 제공
- CASE
- IF()
- IFNULL()
- NULLIF()
2) CASE
- CASE-WHEN-THEN-ELSE-END
- value와 같은 WHEN의 THEN절을 실행
- WHEN절의 조건이 참이면 THEN절 실행
SELECT CASE 0
WHEN 0 THEN 'zero'
WHEN 1 THEN 'one'
ELSE 'more'
END;
3) IF()
- IF( condition, if true, if false )
- 삼항연산자(?:)와 같음
SELECT IF (0 < 1, 'yes', 'no');
4) IFNULL()
- IFNULL( if not null, if null )
- 첫번째항이 null이 아니면 첫번째 항
- 첫번째항이 null이면 두번째 항
SELECT IFNULL(NULL, '전달 받을 값');
4) NULLIF()
- 두 인자가 같으면 NULL, 아니면 첫 번째 인자 반환
- 다음 SQL문과 같은 동작
-- CASE1
SELECT CASE value1
WHEN value2 THEN NULL
ELSE value1
END;
-- CASE2
SELECT CASE
WHEN value1 = value2 THEN NULL
ELSE value1
END;
-- IF
SELECT IF(value1=value2, NULL, value1);
7. 패턴 매칭
1) 패턴 매칭
- 데이터의 특정 패턴을 검색하기 위한 매칭 연산자 제공
- LIKE
- REGEXP
- 임의의 문자/문자열 대체를 위해 와일드카드(wildcard) 문자 사용 가능
2) LIKE
- 특정 패턴을 포함하는 데이터만 검색
- 예제
- '장'으로 시작하는 Name row
- '%'는 0개 이상의 문자라는 의미의 와일드카드
SELECT Name FROM Reservation
WHERE Name LIKE '장%';
3) 와일드카드
- 문자열 내에서 임의의 문자/문자열 대체를 위해 사용되는 기호
- %
- 0개 이상의 문자 대체 - _
- 1개 이상의 문자 대체
- %
- 예제
- RoomNum 필드가 20으로 시작, 바로 뒤에 두자리 숫자가 더 나옴
SELECT * FROM Reservation
WHERE RoomNum LIKE '20__';
4) REGEXP
- LIKE보다 복잡한 패턴 검색에 사용
- 정규 표현식을 토대로 패턴 매칭 연산
. | 줄바꿈을 제외한 임의의 한 문자 |
* | 해당 문자 패턴이 0번 이상 반복 |
+ | 해당 문자 패턴이 1번 이상 반복 |
^ | 문자열의 처음을 의미 |
$ | 문자열의 끝을 의미 |
| | 선택을 의미 (OR) |
[...] | []안에 있는 문자중 하나 |
[^...] | []안에 있지 않은 문자중 하나 |
{n} | 반복되는 횟수 지정 |
{m,n} | 반복되는 횟수 범위 지정 |
- 예제
- Name 필드에 '홍'으로 시작하거나, '산'으로 끝나는 레코드
SELECT * FROM Reservation
WHERE Name REGEXP '^홍|산$';
8. 타입 변환
1) 타입 변환
- 비교나 검색을 수행할 때 데이터 타입이 다를 경우, 내부적으로 타입이 같아지도록 자동 변환
- 하지만 명시적으로 타입 캐스팅 지원
- BINARY
- CAST()
- CONVERT()
2) BINARY
- 뒤에 오는 문자열을 바이너리 문자열로 변환
- BINARY 연산자로 문자가 아닌 바이트 기준으로 비교/검색 작업 수행
- 예제
- BINARY 연산자로 문자 'a'와 'A'를 비교
SELECT BINARY 'a' = 'A', -- 0
'a' = 'A'; -- 1
3) CAST()
- CASE( value AS type)
- 함수 인자로 전달받은 값을 명시된 타입으로 변환
- type
- BINARY
- CHAR
- DATE
- DATETIME
- TIME
- DECIMAL
- JSON
- NCHAR
- SIGNED [INTEGER]
- UNSIGNED [INTEGER]
- 예제
- 문자열 데이터를 UNSIGNED 타입으로 변환
SELECT
4 / '2', -- 2 : 문자열이 타입 변환으로 정수 타입이 반환
4 / 2, -- 2.0000 : 정수 / 정수는 실수 타입으로 반환
4 / CAST('2' AS UNSIGNED); -- 2.0000
4) CONVERT()
- CAST()와 같이 명시된 타입으로 변환
- 두번째 인수에 변환하는 타입을 직접 전달
- USING : 서로 다른 문자셋으로 변환할 때 사용
SELECT CONVERT(expr, type);
SELECT CONVERT(expr USING transcoding_name);
- 예제
- 문자열의 문자셋을 UTF-8로 변환
SELECT CONVERT('test' USING utf8);
'CS > MySQL' 카테고리의 다른 글
[프로그래머스][SQL][SELECT] 역순 정렬하기 (0) | 2021.08.06 |
---|---|
[프로그래머스][SQL][SELECT] 모든 레코드 조회하기 (0) | 2021.08.06 |
[TCPschool][3장] 타입 (0) | 2021.08.04 |
[TCPschool][2장] MySQL 문법(2/2) (0) | 2021.08.01 |
[TCPschool][2장] MySQL 문법 (1/2) (0) | 2021.07.28 |