nu_s

[SQL] SQL 기본 문법 본문

Data Base/SQL

[SQL] SQL 기본 문법

woochii 2023. 7. 20. 14:37
728x90
반응형

기본 문법

데이터 입력(INSERT)

INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3 ...)
VALUES (값1, 값2, 값3...);

-- 모든 컬럼에 값을 입력하는 경우 컬럼 생략 가능
INSERT INTO 테이블명 VALUES (값1, 값2, 값3...);

데이터 수정(UPDATE)

UPDATE 테이블명
SET    컬럼1 = 값1 [, 컬럼2 = 값2 ...]
[WHERE 조건식];

데이터 삭제(DELETE)

DELETE FROM 테이블명
[WHERE 조건식];

 

SELECT 구문의 기본 문형

SELECT (DISTINCT) 컬럼명 (ALIAS)
FROM 테이블명
;

-- SELECT : 검색하고자 하는 데이터를 나열
-- DISTINCT : 중복 제거 
-- ALIAS : 컬럼에 다른 이름 부여 
-- FROM : 선택한 컬럼이 있는 테이블 명시 

-- ORDER BY : 정렬 순서 지정 
-- WHERE : 조건에 맞는 특정 행 선택 가능

 

 

ORDER BY

SELECT (DISTINCT) 컬럼명 (ALIAS)
FROM 테이블명
ORDER BY 컬럼이나 표현식 (ASC 또는 DESC);
  • ASC - 오름차순 (생략)
  • DESC - 내림차순

WHERE

SELECT (DISTINCT) 컬럼명 (ALIAS)
FROM 테이블명
WHERE 조건식
ORDER BY 컬럼이나 표현식 (ASC 또는 DESC);
  • 논리 연산자
  • 논리 비교 연산자
  • SQL 비교 연산자
    • BETWEEN ~ AND ~
    • IN
    • LIKE

조건의 부정

  • 논리 비교 연산자
    • !=
    • <>
    • ^=
  • SQL 비교 연산자
    • NOT BETWEEN ~ AND ~
    • NOT IN
    • NOT LIKE
    • IS NOT NULL

 

GROUP BY 와 HAVING 절

SELECT 컬럼명, GROUP 함수
FROM   테이블명
WHERE  조건식
GROUP BY 컬럼명
HAVING 조건식
ORDER BY 컬럼이나 표현식;

-- GROUP BY : 전체 데이터를 소그룹으로 나눌 컬럼을 명시한다.
-- HAVING : GROUP에 대한 조건을 기술한다.

GROUP BY절

-- 예제1) 각 부서(dept_id)별 평균 급여를 계산하여 보여주시오.
SELECT dept_id, AVG(salary)
FROM s_emp
GROUP BY dept_id;

-- 예제2) 각 부서(dept_id)별로 직책이 사원인 직원들의 평균 급여를 계산해서 보여주시오.
SELECT dept_id, AVG(salary)
FROM s_emp
WHERE title = '사원'
GROUP BY dept_id;

주의사항

SELECT절에 그룹함수가 오면 SELECT절의 나머지 컬럼은 GROUP BY절에 기술되어야 한다.

 

HAVING절

-- 예제3) 각 직책별로 급여의 총합을 구하되 직책이 부장인 사람은 제외하시오.
-- 단, 급여 총합이 8000(만 원) 이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오.
SELECT title, SUM(salary)
FROM S_EMP
WHERE title NOT LIKE '%부장'
GROUP BY title 
HAVING SUM(salary) >= 8000 
ORDER BY 2;

-- 예제4) 각 부서별로 직책이 사원인 직원들에 대해서만 평균 급여를 구하시오.
SELECT dept_id, AVG(salary)
FROM s_emp
GROUP BY dept_id
HAVING title = '사원';

 

GROUP을 SUBGROUP으로 세분화

 

GROUP BY절 이하에 GROUP으로 나누고자 하는 컬럼을 여러개 기술함으로써 그룹을 세분화할 수 있다.

-- 예제5) 각 부서내에서 각 직책별로 몇 명의 인원이 있는지를 나타내시오.
SELECT dept_id, title, COUNT(*)
FROM s_emp
GROUP BY dept_id, title
ORDER BY dept_id;

-- 예제6) 각 부서내에서 몇 명의 직원이 근무하는지를 나타내시오.
SELECT dept_id, COUNT(*)
FROM s_emp
GROUP BY dept_id
ORDER BY dept_id;

-- 예제7) 각 부서별로 급여의 최소값과 최대값을 나타내시오.
-- 단, 최소값과 최대값이 같은 부서는 출력하지 마시오.
SELECT dept_id, MAX(salary), MIN(salary)
FROM s_emp   
GROUP BY dept_id
HAVING MAX(salary) != MIN(salary) 
ORDER BY dept_id;
728x90
반응형

'Data Base > SQL' 카테고리의 다른 글

[SQL] 제약조건 (Constraint)  (0) 2023.08.01
[SQL] 서브쿼리(SUBQUERY)  (0) 2023.07.27
[SQL] 조인(JOIN)  (1) 2023.07.26
[SQL] SQL 함수  (0) 2023.07.25
[SQL] 데이터 베이스란?  (0) 2023.07.19