SQL 연습하면서 사용한 문법 정리
공부하면서 새로운 문법 발견하면 계속 업데이트 예정
테이블 관련
DROP TABLE <테이블명>;
데이터 조작 관련(Insert, Update, Delete)
INSERT INTO (테이블명)(저장할 필드 목록) VALUES (저장할 값 목록)
- 테이블에 레코드 저장
- ex: INSERT INTO TABLE(NAME, AGE) VALUES ('hajun', 25);
UPDATE (테이블명) SET (수정할필드)=(수정할 값), ...
- 레코드 값 수정
- ex: UPDATE TABLE SET AGE=10 WHERT NAME='hajun';
DELETE FROM (테이블명) WHERE (조건)
- 레코드 제거
- ex: DELETE FROM TABLE WHERE AGE<20
데이터 조회 관련(Select)
SELECT (필드명) FROM (테이블명)
특정 테이블에서 특정 필드 출력
- 여러 필드 출력할 때는
,
사용
- EX: SELECT NAME, AGE FROM TABLE
- 모든 필드 출력할 때는
*
사용
- 만약 보여지는 컬럼 명을 변경하고 싶으면
AS
키워드 사용
- EX: SELECT NAME AS N FROM TABLE;
- 조건절 안에서도 사용 가능
- EX: SELECT NAME FROM TABLE WHERE AGE = (SELECT MAX(AGE) FROM TABLE) ;
WHERE (조건)
(조건)을 만족하는 레코드만 선택
- ex: SELECT NAME FROM TABLE WHERE AGE > 7
- 관계 연산자 사용 가능
- 두 변수가 같은지 비교할때는
=
한번만
- ex: SELECT NAME FROM TABLE WHERE AGE = 5
NULL
관련 조건문 사용시 IS
, NOT
, NULL
등 사용 가능
- ex: SELECT NAME FROM TABLE WHERE AGE IS NOT NULL
ORDER BY (필드명)
(필드명) 기준으로 정렬
- ex: SELECT * FROM TABLE ORDER BY AGE
- 기본은 오름차순 정렬
ORDER BY ~~ ASC
: 오름차순 정렬
ORDER BY ~~ DESC
: 내림차순 정렬
- 정렬 기준 여러개일 때는
,
사용
- 만약 두개 오름차순, 내림차순 다르면 각각 기록
- ex: SELECT NAME FROM TABLE ORDER BY AGE ASC, NAME DEST
LIMIT 갯수/ LIMIT offset, 갯수
특정 갯수만 출력
- LIMIT 다음 숫자가 하나: 특정 갯수만 출력
- ex: SELECT * FROM TABLE ORDER BY AGE LIMIT 1
- LIMIT 다음 숫자가 두개: (offset)에서부터 특정 갯수 출력
- ex: SELECT * FROM TABLE ORDER BY AGE LIMIT 3, 5
DISTINCT 필드명
중복되는 필드값들 제거
- EX: SELECT DISTINCT NAME FROM TABLE;
CASE WHEN 조건 THEN 반환값 ELSE 반환값 END
조건적으로 데이터 조회
-EX: SELECT CASE WHEN AGE<20 THEN '미성년자' ELSE '성인' END FROM TABLE;
JOIN ~ ON
두개의 테이블을 함께 출력
EX: SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.ID=TABLE2.ID;
- 각 테이블은
AS
를 사용해 별칭으로 표현 가능
- ex: SELECT * FROM TABLE1 AS T1 JOIN TABLE2 AS T2 ON T1.ID=T2.ID
CONVERT(변경할 값, 변경할 타입/길이)
특정 값을 다른 타입으로 변경
- EX: SELECT * FROM TABLE WHERE CONVERT(AGE, CHAR)='20' ;
GROUP BY 관련(집계)
GROUP BY 필드명
중복되는 필드를 가진 항목끼리 그룹으로 묶어서 처리
- EX: SELECT COUNT(NAME) FROM TABLE GROUP BY NAME;
- SELECT 절에서는 GROUP안에 정의된 필드만 사용 가능
- 다른 필드를 출력해도 에러가 나지는 않지만, 의미 없는 값이 출력됨(여러 레코드중 하나의 필드값만 출력)
WHERE 조건/ HAVING 조건
조건에 부합하는 필드만 선택
- EX: SELECT COUNT(NAME) FROM TABLE WHERE AGE>20 GROUP BY NAME HAVING COUNT(NAME)>2 ;
- WHERE절은 GROUP되기 전, HIVING 절은 GROUP된 후 처리됨
- 위의 예시에서는, AGE가 20 이상인 값들만 GROUP으로 묶어 집계, 집계된 값 중 중복되는 이름이 2개 이상인 것들만 출력
COUNT 필드명
각 그룹별 레코드 갯수 출력
EX: SELECT COUNT(NAME) FROM TABLE GROUP BY NAME;
날짜/시간 관련
DATE, DATETIME 필드를 원하는 형식으로 출력
- EX: SELECT DATE_FORMAT(DATE, '%Y-%m-%d);
- 형식을 나타낼 때는 문자열 안에 %기호와 함께 표현
- %Y: 년도(2024)
- %y: 년도(24)
- %M: 월(JANUARY)
- %m: 월(01)
- %w: 요일(MONDAY)
- %d: 날짜(15)
- %H: 시간(24시간 형식)
- %l: 시간(12시간 형식)
- 그 외 등등
DATEDIFF(날짜1, 날짜2)
두 날짜 사이의 기간(DAY) 리턴
- EX: SELET DATEDIFF('2024-05-24', '2024-05-29) FROM TABLE;
연산 관련
MAX(필드명)/MIN(필드명)
해당 필드의 최대값/최소값 출력
- ex: SELECT MAX(AGE) FROM TABLE;
- DATE 필드 등에도 사용 가능
COUNT(필드)
검색하려는 필드의 총 개수를 출력
- EX: SELECT COUNT()* FROM TABLE WHERE AGE >= 20;
AVG(필드)
검색하려는 필드의 평균값을 출력
- EX: SELECT AVG(AGE) FROM TABLE;
ROUND(소수값, 반올림하여 얻을 자릿수)
소수값을 반올림
- EX: SELECT ROUND(3.141592, 2);
=> 3.14
<나눠지는 값> DIV <나눈 값>
나머지 연산의 몫만 반환
문자열 관련
SUBSTRING(문자열, 위치, 길이)
- 문자열의 일부분 추출
- EX: SELECT SUBSTRING(NAME, 1,3) FROM TABLE;
- 위치 인덱스는 1부터 시작
WHERE ~ LIKE ~
문자열 검색시 특정 문자열 검색은 LIKE
와 %
활용
- EX: ABC로 시작하는 레코드 검색
- EX: ABC가 포함되는 레코드 검색
- 문자열에 %기호가 포함되는 경우 #을 붙임
CONCAT(붙일 문자열1, 붙일 문자열2)
문자열 붙이기
- EX: SELECT CONCAT(AGE, '살입니다.') FROM TABLE;
NULL 처리 관련
IFNULL(<필드명>, <NULL일 경우 대체 값>
조회하려는 데이터가 NULL일 경우 대체
- ex: SELECT NAME, IFNULL(AGE, '모름') FROM TABLE;
ISNULL(필드명)
해당 필드가 NULL 인지 체크(BOOL 반환)
- EX: SELECT COUNT(*) FROM TABLE WHERE ISNULL(NAME)