반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 스프링 컨테이너
- 엔티티
- 오라클
- 성능최적화
- @MappedSuperclass
- fetch join
- TCP/IP
- Spring
- INDEX SCAN
- 스프링 데이터 JPA
- 자바의 정석
- 페이징
- 정렬
- 데이터모델링
- SQL 튜닝
- Spring data JPA
- 페치조인
- 컬렉션 조회 최적화
- 그룹함수
- querydsl
- 데이터베이스
- 서브쿼리
- DTO
- index
- 값 타입
- JPA
- 친절한 SQL 튜닝
- SQL
- 스프링
- JPQL
Archives
- Today
- Total
nu_s
[SQL] SQL 기본 문법 본문
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 |