Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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 31
Archives
Today
Total
관리 메뉴

공부하자

SELECT문 본문

Database

SELECT문

kmhello 2023. 3. 19. 11:45

SELECT문의 기본 구조

SELECT  [DISTINCT] [컬럼명]
FROM  [테이블명]
WHERE  [쿼리 조건]
GROUP BY  [컬럼명] HAVING [집계함수 조건]
ORDER BY  [컬럼명 ASC || 컬럼명 DESC];


1. 테이블 전체 조회 

SELECT  [컬럼명]

FROM  [테이블명];

 

SELECT *
FROM employees;

> employees 테이블의 데이터 전체를 조회

- 컬럼명으로 조회
SELECT emp_no
FROM employees;

> employees 테이블의 emp_no 컬럼 전체 조회


2. 특정 조건으로 조회

SELECT  [컬럼명]

FROM  [테이블명]

WHERE  [쿼리 조건];


특정 데이터와 일치하는 조회
SELECT *
FROM employees
WHERE emp_no = 10001;

> emp_no가 10001인 사원의  전체 데이터 조회

관계 연산자를 이용하여 조회
SELECT *
FROM employees
WHERE emp_no <= 10005;

- AND, OR로 여러 조건을 설정하여 조회
SELECT *
FROM employees
WHERE emp_no >= 10001
  AND emp_no <= 10005;

 > and는 모든 조건을 만족하는 데이터 조회

SELECT *
FROM employees
WHERE emp_no <= 10003
   OR emp_no >= 499997;

 > 조건 하나라도 만족하는 데이터 조회 

BETWEEN [A] AND [B]로 해당 범위 내의 데이터 조회
SELECT *
FROM employees
WHERE emp_no BETWEEN 10003 AND 10010;

- IN()으로 해당 데이터 조회
SELECT *
FROM employees
WHERE emp_no IN( 10003, 10010 );

LIKE로 문자열의 내용을 조회
> "%"는 무엇이든 허용한다는 의미
SELECT *
FROM employees
WHERE first_name like( '%mi%' );

>"_"는 "_"의 개수만큼 허용. 

만약  "__"인 경우,  2글자라면 무엇이든 허용한다는 의미
SELECT *
FROM employees
WHERE first_name like( '_yeon' );

SELECT *
FROM employees
WHERE first_name like( 'hyeo_' );

- ORDER BY로 정렬하여 조회
> ASC : 오름차순 정렬( 디폴트값)
SELECT *
FROM employees
ORDER BY emp_no ASC;


> DESC : 내림차순 정렬
SELECT *
FROM employees
ORDER BY emp_no DESC;

- DISTINCT로 중복값 없이 조회
SELECT DISTINCT dept_no
FROM dept_manager;
- recode단위로 중복되는 걸 제외시켜줌. 

- LIMIT로 출력 개수를 제한하여 조회
SELECT *
FROM employees
LIMIT 5 OFFSET 10;

-> offset : 원하는 행의 수 만큼 건너 뛰고 그 다음 행부터 검색 

3. 서브쿼리(SubQuery)

: 쿼리 안에 또다른 쿼리가 있는 형태

: WHERE절 외에도 서브쿼리 올 수 있음. 
SELECT *
FROM dept_manager
WHERE
dept_no = (
SELECT dept_no 
FROM dept_manager
WHERE emp_no = 110114
);

 

* 다중열 서브쿼리

 : 여러개의 컬럼을 검색하는 서브 쿼리

  : 서브 쿼리의 SELECT문에 여러개의 컬럼을 검색한다. 

  : 반드시 비교 대상 컬럼과 1:1 대응이 되어야 한다.

  : 다중 열 서브쿼리는 주로 IN을 사용하지만 '=' 도 사용 가능함. 

여러개의 컬럼을 검색하는 서브 쿼리

4. ANY / ALL
SELECT *
FROM dept_manager
WHERE dept_no = (
SELECT dept_no 
FROM dept_manager
WHERE dept_no = 'd002'
);

=은 결과값이 1개가 나와야 하는데

서브쿼리의 결과가 2개 이상이라 에러 발생



-  ANY

: 2개 이상의 결과 중 하나라도 만족하는 데이터 조회
SELECT *
FROM dept_manager
WHERE dept_no = ANY (
SELECT dept_no 
FROM dept_manager
WHERE dept_no = 'd002'
);

- ALL

: 2개 이상의 결과 모두를 만족하는 데이터 조회
SELECT *
FROM dept_manager
WHERE dept_no = ALL (
SELECT dept_no 
FROM dept_manager
WHERE dept_no = 'd002'
);

 

-> =은 뒤에 나오는 값이 1개여야 하고 앞에 조건과 일치해야함. 

    IN과 ANY는 여러개 결과가 나와도 1개만 만족한다면 데이터가 조회가 되고, 

    ALL은 여러개 데이터가 나오면 그 데이터 모두를 만족하는 데이터가 조회됨. 

 

5. 집계 함수
AVG(컬럼명) : 평균을 구합니다.
- MAX(컬럼명) : 최대값을 구합니다.
MIN(컬럼명) : 최소값을 구합니다.
- COUNT(컬럼명) : 개수를 구합니다.
         count - > 검색된 recode의 개수 
        select count(*)
        from employees;


6. 그룹으로 묶어서 조회 

GROUP BY 컬럼명  HAVING [집계함수조건 ]
SELECT dept_no, COUNT(emp_no) no
FROM dept_manager
GROUP BY dept_no
HAVING no > 2;

'Database' 카테고리의 다른 글

JOIN  (0) 2023.03.19
함수  (0) 2023.03.19
데이터 형식  (0) 2023.03.19
INSERT, UPDATE, DELETE  (0) 2023.03.19
데이터 베이스 , SQL 기본 개념  (0) 2023.03.19