SELECT 전반 기능

SELECT는 테이블에서 원하는 값을 가져올 때 사용한다.

SELECT * FROM 테이블 ;
-- *은 모든 컬럼을 뜻한다.
-- 마지막에 세미콜론(;) 필수

SELECT 컬럼 이름, 컬럼에 들어있는 ... 
FROM 테이블 ;
-- 컬럼에 들어있는 값이 문자열이면 ''로 감싸줘야한다.

SELECT 컬럼  FROM 테이블 
WHERE 조건문;
-- 조건문에 만족하는 행만 가져옴

SELECT 컬럼  FROM 테이블  
ORDER BY 컬럼 A ASC, 컬럼 B DESC;
-- 정렬 기본 값은 오름차순(ASC) 
-- A를 오름차순 정리하고 그 후 같은 값에서 B를 기준으로 내림차순 정렬 

SELECT 컬럼명 FROM 테이블명
LIMIT 건너뛸 갯수, 가져올 갯수;
-- 30,10이면 앞에 30개를 건너 뛰고 31번부터 10개를 가져옴

SELECT 
    컬럼명 AS 별명
FROM 테이블명;
-- 컬럼명이 별명으로 바뀌어서 출력

각종 연산자들

사칙 연산, 논리 연산, 비교 연산 등 다양한 연산잔를 사용가능

사칙연산

SELECT 1 + 2;

SELECT 'ABC' + 3;
-- 문자열에 사칙연산을 하면 문자는 0으로 인식한다.

SELECT '1' + 3;
-- 숫자로 구성된 문자열은 숫자 인식한다.

SELECT 
    컬럼명 A, 컬럼명 B, A+B
FROM 테이블 
-- A, B, A+B를 한 결과를 보여준다.

참/거짓 연산자

SELECT TRUE, FALSE;
-- 1, 0으로 출력

SELECT !TRUE, NOT 0;
-- TURE, 0의 반대 값이 출력

SELECT TRUE is TRUE;
SELECT TRUE is NOT TRUE;
-- 참이면 1, 아니면 0

SELECT (TRUE IS FALSE) IS NOT TRUE;
-- 괄호 먼저 연산

SELECT TRUE AND FALSE, TRUE OR FALSE;
-- AND: 둘 다 참이면 참 아니면 거짓
-- OR: 둘 중 하나만 참이면 참

SELECT 1 = 1, 2 =! 1, 'A'<>'B';
-- =: 양쪽이 같으면 참
-- !=, <>: 양쪽이 다르면 참

SELECT 2 >= 1, 'A' < 'B';
-- 알파벳은 대소문자 구분 없이 알파벳 순 뒤에 오면 큰 값

SELECT 15 BETWEEN 10 AND 20;
SELECT 30 NOT BETWEEN 10 AND 20;
-- BETWEEN: 10과 20 사이에 있으면 참
-- NOT BETWEEN: 사이에 값이 없으면 참

SELECT 1 IN (1,2,3);
SELECT 4 NOT IN (1,2,3,);
-- IN: 괄호 안에 값이 있으면 참
-- NOT IN: 괄호 안에 값이 없으면 참

SELECT 'HELLO' LIKE 'hel%';
SELECT 'HELLO' LIKE 'HEL__';
-- LIKE %: %자리에 0~N개의 단어가 왔을때 앞에 있는 단어와 일치하면 참
-- LIKE _: _ 갯수만큼 단어가 왔을때 앞에 있는 단어와 일치하면 참
-- 숫자로 된 문자는 숫자로 변환

MySQL operator를 검색하여 공식 홈페이지에 접속하면 더 많은 연산자를 확인 할 수 있다.

숫자와 문자열을 다루는 함수

숫자 관련 함수

SELECT 
    ROUND(0.5),
    CEIL(0.4),
    FLOOR(0.6);
-- ROUND: 반올림
-- CEIL: 올림
-- FLOOR: 내림

SELECT ABS(-1);
-- ABS: 절대값

SELECT 
    GREATEST(1,2,3),
    LEAST(1,2,3,4,5);
-- GREATEST: 괄호 중 가장 큰 값
-- LEAST: 괄호 중 가장 작은 값

SELECT
  MAX(컬럼명),
  MIN(컬럼명),
  COUNT(컬럼명),
  SUM(컬럼명),
  AVG(컬럼명)
FROM 테이블명
WHERE 조건;

-- MAX: 가장 큰 값
-- MIN: 가장 작은 값
-- COUNT: 갯수(NULL 제외)
-- SUM: 총합
-- AVG: 평균

SELECT 
    POW(A,B)
    SQRT(C)
-- POW/POWER: A를 B만큼 제곱
-- SQRT: C의 제곱근(루트)

SELECT 
    TRUNCATE(N,n)
-- N을 소숫점 n자리까지 선택
-- n이 음수면 소수점 앞자리부터 n개를 0으로 변환

문자열 관련 함수

SELECT
    UPPER('abced'),
    LOWER('ABCDE');
-- UCASE/UPPER: 모두 대문자로 변경
-- LCASE, LOWER: 모두 소문자로 변경

SELECT CONCAT(문자열 A, 문자열 B, ...);
-- 괄호 안에 있는 문자열을 이어붙임 숫자는 문자열로 변환

SELECT CONCAT_WS(문자열 A, 문자열 B, 문자열 C...);
-- 문자열 B부터 괄호 안에 있는 문자열을 A로 이어붙임
-- ex) BACADA ...

SELECT
  SUBSTR(문자열, i,j),
  LEFT(문자열, n),
  RIGHT(문자열, n);
-- SUBSTR: i가 양수면 왼쪽에서 음수면 오른쪽에서 i번째부터 j개 추출 
-- LEFT: 왼쪽에서 n개만 추출
-- RIGHT: 오른쪽에서 n개만 추출

SELECT
  LENGTH(문자열),
  CHAR_LENGTH(문자열);
-- LENGTH: 문자열의 바이트 길이
-- CHAR_LENGTH/CHARACTER_LENGTH: 문자열의 문자 갯수

SELECT 
    TRIM(문자열),
    LTRIM(문자열),
    RTRIM(문자열);
-- TRIM: 양쪽 공백 제거
-- L/RTRIM: 좌, 우 공백 제거

SELECT
    LPAD(문자열 A, n, 문자열B),
    RPAD(문자열 A, n, 문자열B);
-- L/RPAD: A의 길이가 n이 될 때까지 B를 왼쪽/오른쪽에 붙임

SELECT REPLACE(문자열 A, 문자열 B, 문자열 C);
-- A에 속한 B를 C로 변경

SELECT INSTR(문자열 A, 문자열 B);
-- A중 B의 첫 위치를 반환, 없으면 0

SELECT CONVERT(A 변환할 타입);
-- A의 타입을 변환한다.

날짜/시간 함수

SELECT CURDATE(), CURTIME(), NOW();
-- CURDATE/CURRENT_DATE: 현재 날짜 반환
-- CURTIME/CURRENT_TIME: 현재 시간 반환
-- NOW/CURRETN_TIMESTAMP: 현재 날짜와 시간 반환
SELECT
    DATE("yyyy-mm-dd hh:mm:ss"),
    TIME("yyyy-mm-dd hh:mm:ss");
-- DATE: 날짜 문자열 형식만 반환(yyyy-mm-dd)
-- TIME: 시간 문자열 형식만 반환(hh:mm:ss)

날짜와 시간 형식이 아니면 아무것도 반환하지 않는다.

SELECT
  YEAR(OrderDate)
  MONTHNAME(OrderDate),
  MONTH(OrderDate),
  WEEKDAY(OrderDate),
  DAYNAME(OrderDate),
  DAY(OrderDate);

-- YEAR: 주어진 DATETIME값의 년도 반환
-- MONTHNAME: 주어진 DATETIME값의 월(영문) 반환
-- MONTH: 주어진 DATETIME값의 월 반환
-- WEEKDAY:	주어진 DATETIME값의 요일값 반환(월요일: 0 ~ 일요일: 7)
-- DAYNAME:	주어진 DATETIME값의 요일명 반환
-- DAYOFMONTH/DAY: 주어진 DATETIME값의 날짜(일) 반환
SELECT HOUR(시간 문자열), MINUTE(시간 문자열), SECOND(시간 문자열);
-- HOUR	주어진 DATETIME의 시 반환
-- MINUTE	주어진 DATETIME의 분 반환
-- SECOND	주어진 DATETIME의 초 반환
SELECT ADDCATE(날짜/시간 문자열, INTERVAL N, 항목);
-- 항목(YEAR, MONTH,HOUR...)에서 N을 더한 문자열 반환
SELECT 
    TIMEDIFF(날짜/시간 문자열, 날짜/시간 문자열);
    DATEDIFF(날짜/시간 문자열, 날짜/시간 문자열);
-- TIMEDIFF: 두 날짜/시간 간 시간차
-- DATEDIFF: 두 날짜/시간 간 일수차
SELECT LAST_DAY(날짜 문자열);
-- LAST_DAY: 날짜 문자열의 해당 달의 마지막 날짜
형식 설명
%Y 년도 4자리
%y 년도 2자리
%M 월 영문
%m 월 숫자
%D 일 영문(1st, 2nd…)
%d, %e 일 숫자(01~31)
%T hh:mm:ss
%r hh:mm:ss AM/PM
%H, %k** 시(~23)
%h, %l** 시(~12
%i
%S, **%s
%p AM/PM
SELECT DATE_FORMAT(날짜/시간 문자열, 형식);
-- 지정한 형식대로 반환
-- ex) 2022-06-09, %Y-%m-%d %T = 2022-06-09 00:00:00

SELECT SRT_TO_DATE(날짜/시간 문자열, 형식);
-- 지정한 형식으로 해석하여 반환
-- ex) 2022-06-09 23:53:12,

SRT_TO_DATE는 문자열과 날짜 포멧이 다르면 NULL 반환

기타 함수

SELECT IF(조건, A, B);
-- 조건이 창이면 A, 거짓이면 B 반환

SELECT IFNULL(A, B);
-- A가 NULL이면 B 반환, NULL이 아니면 A 반환

GROUP BY

SELECT 컬럼명 FROM 테이블명
GROUP BY 그룹화  컬럼명
WITH ROLLUP;
-- 그룹화 할 컬럼명에 대한 값을 중복 없이 반환
-- WITH ROLLUP: 집계한 데이터의 합을 마지막 행에 추가

WITH ROLLUP은 ORDER BY와 함께 사용 불가

SELECT
  컬럼명
FROM 테이블명
GROUP BY 컬럼명
HAVING 조건;
-- 그룹 집계 후 조건에 만족하는 값들만 반환

WHERE은 그룹하기 전 데이터, HAVING은 그룹 후 집계에 사용

SELECT DISTINCT 컬럼명;
-- 컬럼명에 대한 값을 중복 없고 정렬 없이 반환

집계함수가 사용되지 않고 GROUP BY와 달리 정렬을 하지 않아 더 빠르다.

카테고리:

업데이트:


Comments