프로필사진

IT Anthology/dictionary

SQL 명령문 총정리

다각 2020. 2. 29. 15:36

※무단 사용 및 펌을 절대 금지합니다 이 페이지에서만 봐주세요※


사용되는 곳 명령어 정의 사용 예시 관련 명령어 및 참고 사항
테이블에서 데이터 검색 SELECT 질의, 쿼리 SELECT 열명 FROM 테이블명 '*' : 열명에 기입 시 모든 열 반환
WHERE 조건에 만족하는 행만 반환 SELECT col1, col2 FROM 테이블명 WHERE 조건식 비교연산자('=', '<>', '<', '>' ...)
IS NULL / IS NOT NULL
AND / OR / NOT
IN
LIKE 특정 패턴과 일치하는 문자열 찾기 SELECT 열명 FROM sampletable WHERE text LIKE '%SQL%' '%' : 임의의 문자열, 빈 문자열에도 매치
'_' : 임의의 문자 하나!만 의미
정렬 ORDER BY 결과 정렬 SELECT 열명 FROM 테이블명 (WHERE 조건식) ORDER BY 열명 DESC : 내림차순 정렬
ASC : 오름차순 정렬 (default)
복수 열 지정 SELECT 열명 FROM 테이블명 (WHERE 조건식) ORDER BY 열명1 [ASC | DESC], 열명2 [ASC | DESC] (참고) NULL: MY SQL에서는 NULL값을 가장 작은 값 취급
LIMIT [MYSQL에서]
지정된 개수의 행만 반환
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수 OFFSET
: 'OFFSET 위치'를 추가하면 표기된 위치부터 시작
TOP [SQL Server에서]
지정된 개수의 행만 반환
SELECT TOP 숫자 열명 FROM 테이블명  
ROWNUM [Oracle에서]
지정된 개수의 행만 반환
SELECT 열명 FROM 테이블명 WHERE ROWNUM <= 숫자 **주의할 점**
정렬 전에 ROWNUM이 먼저 실행되어 위의 두개와 결과가 다름!!
연산 사칙연산 열끼리의 사칙연산 수행 SELECT *, 가격*수량 FROM 테이블명 (참고) NULL은 연산해도 NULL
AS 별칭(alias) 짓기 SELECT *, 가격*수량 AS 총계 FROM 테이블명 (참고) AS는 생략가능
(참고) 한글로 별명 지정 시 더블쿼트 (MYSQL에서는 백쿼트) 두르기
ROUND 반올림 SELECT amount, ROUND (amount, 1) FROM 테이블명; 소수점 둘째 자리에서 반올림  
+ / || / CONCAT  자열 합치기 (순서대로) SQL server/ Oracle / MYSQL에서 적용되는 명령어  
DATEDIFF [MYSQL에서]
두 날짜 간의 차이 계산
DATEDIFF('2014-02-28', '2014-01-01')  
TO_DATE 날짜를 특정 형식으로 바꿔줌 TO_DATE('2014/01/25', 'YYYY/MM/DD')  
집계 COUNT 데이터의 개수 SELECT COUNT(열명) FROM 테이블명 (참고) NULL은 집계되지 않는다
ALL 열명 : 중복을 포함해 모두 카운트 (default)
DISTINCT 열명 : 중복을 제외함
SUM 합계 SELECT SUM(열명) FROM 테이블명  
AVG 평균 SELECT AVG(열명) FROM 테이블명  
MIN 최소값 SELECT MIN(열명) FROM 테이블명  
MAX 최대값 SELECT MAX(열명) FROM 테이블명  
GROUP BY 동일한 값을 가진 데이터를 그룹으로 묶어 집계나 조회 SELECT * 테이블명 GROUP BY 열1, 열2,...  
HAVING 그룹화할 때의 조건절 SELECT name, COUNT(name) FROM 테이블명 WHERE COUNT(name)=1 GROUP BY name HAVING COUNT(name)=1 (참고) 데이터 처리 순서
WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
데이터 변환 COALESCE NULL 값 변환 SELECT 열명, COALESCE(열명, 0) FROM 테이블명  
검색 CASE 조건에 맞춰 변환 SELECT 열명, 
CASE WHEN 열명 IS NULL THEN
ELSE 열명 
END "열명(null=0)" FROM 테이블명
(참고) WHEN 뒤에 식이 들어간다.
단순 CASE CASE 이용한 인코드, 디코드 SELECT 열명 AS `코드`
CASE 열명
WHEN 0 THEN "여자"
WHEN 1 THEN "남자"
ELSE "미지정"
END AS "성별" FROM 테이블명
(참고) WHEN 뒤에 단순한 값이 들어간다.
데이터의
추가, 삭제, 갱신
INSERT 행 추가 INSERT INTO 테이블명 (열1, 열2, 열3,...) VALUES (값1, 값2, 값3,...) (참고) 암묵적 디폴트 지정
: 열을 지정하지 않으면 디폴트 값으로 행 추가
DEFAULT INSERT 시에 디폴트 값으로 설정 INSERT INTO 테이블명 (열1, 열2)
VALUES (값1, DEFAULT)
 
DELETE 행 삭제 DELETE FROM 테이블명 WHERE 조건식 (참고) 조건식이 없으면 모든 행 삭제하므로 주의!!
UPDATE 셀 갱신 UPDATE 테이블명 SET 열명=값 WHERE 조건식  
복수열 갱신 UPDATE 테이블명 SET 열명1=값1, 열명2=값2,... WHERE 조건식  
NULL로 갱신 UPDATE 테이블명 SET 열명=NULL  
서브쿼리 SELECT() SELECT 구에서의 서브쿼리 SELECT
  (SELECT COUNT(*) FROM 테이블명) AS sq1,
  (SELECT COUNT(*) FROM 테이블명) AS sq2
(참고) Oracle에서는 왼쪽의 명령어 뒤에 ';FROM DUAL'을 붙인다.
FROM() FROM 구에서의 서브쿼리 SELECT * FROM (
  SELECT * FROM 테이블명 ORDER BY 열명 DESC
) sq
WHERE ROWNUM <= 2
 
SET ~ SET 구에서의 서브쿼리 UPDATE 테이블명 SET a=(SELECT MAX(a) FROM 테이블명)  
VALUES ~ INSERT 에서 사용 INSERT INTO 테이블명 VALUES(
  (SELECT COUNT(*) FROM 테이블명1),
  (SELECT COUNT(*) FROM 테이블명2)
)
 
상관
서브쿼리
EXISTS 괄호 안의 컬럼 존재 유무 판단 UPDATE 테이블1 SET a='있음' WHERE
  EXISTS (SELECT * FROM 테이블2 WHERE 조건식)
(참고) EXISTS는 괄호 안에 서브쿼리만! 사용 가능하다.
IN 괄호 안의 조건 존재 유무 판단 SELECT * FROM 테이블1
WHERE no IN(SELECT no2 FROM 테이블2)
(참고) IN은 괄호 안에 서브 쿼리와 특정 값 모두 사용 가능하다.