데이터베이스-SELECT문

서린·2024년 3월 4일
0

greenstudy

목록 보기
6/44
post-thumbnail

SELECT문이란?

  • DML 중 하나로 저장되어 있는 데이터를 조회하기 위해 사용하는 쿼리

SELECT문의 기본 구조

SELECTFROM절 이외는 필요시에만 작성
SELECT [DISTINCT] [컬럼명]
FROM [테이블명]
WHERE [쿼리 조건]
GROUP BY [컬럼명] HAVING [집계함수 조건]
ORDER BY [컬럼명 ASC || 컬럼명 DESC]
LIMIT [n] OFFSET [n]
;
  • 테이블의 모든 데이터 조회 : *(Asterisk)
SELECT *
FROM employees
;
  • 특정 컬럼만 조회
SELECT 
   emp_no
   ,birth_date
FROM employees
;

WHERE 절

  • 특정 조건의 데이터만 조회
  • 비교 연산자 : =, >=, <=, >, <
-- 사번이 10009인 사원의 모든 정보를 조회
SELECT *
FROM employees 
WHERE emp_no = 10009
;

-- 사원 이름이 'Mary'인 사원의 모든 정보를 조회
SELECT *
FROM employees
WHERE first_name = 'Mary'
;

-- 생일이 1960/01/01 이상인 사원의 모든 정보를 조회
SELECT *
FROM employees
WHERE birth_date >= 19600101
;

-- 입사일이 1990/12/25 이상인 사원의 
-- 사번,이름,성을 조회해주세요.
SELECT 
 emp_no
 , first_name
 , last_name
FROM employees
WHERE hire_date >= 19901225
;

AND, OR 연산자

  • 복수의 조건을 적용시켜서 조회 :
-- 사원번호가 10005 ~ 10009 인 사원의 모든정보 조회
SELECT *
FROM employees
WHERE 
    emp_no >= 10005
  AND emp_no <= 10009;
  
-- 사원 이름이 Mary, 성이 Piazza 인 사원의 모든 정보를 조회해주세요.
SELECT *
FROM employees
WHERE
    first_name = 'Mary'
  AND last_name = 'Piazza';
  
-- 이름이 Mary 또는 Moto이고, 성이 Piazza인 사원의 정보조회
SELECT *
FROM employees
WHERE
  (
    first_name = 'Mary'
    OR first_name = 'Moto'
   )
 AND last_name = 'Piazza';
 

BETWEEN 연산자

  • 지정한 범위의 데이터를 조회
-- AND로 하기
SELECT * FROM employees WHERE emp_no >= 10005 AND emp_no <= 10009;

-- BETWEEN으로 하기
SELECT * FROM employees WHERE emp_no BETWEEN 10005 AND 10009;  

IN 연산자

  • 지정한 값과 일치한 데이터를 조회
-- 10005, 10007 사원의 모든 정보를 조회
-- OR 로 하기
SELECT * FROM employees WHERE emp_no = 10005 or emp_no = 10009;

-- IN 으로 하기
SELECT * FROM employees WHERE emp_no IN(10005, 10009);

LIKE 절

  • 문자열의 내용을 조회(대소문자 구분 X)
  • % : 글자수 상관없이 조회
  • _ : 언더바의 개수 만큼 글자의 개수가 제한되서 조회
-- 이름이 ge로 끝나는 데이터 조회
SELECT * FROM employees WHERE first_name LIKE('%ge');

-- 이름이 ge로 시작하는 데이터 조회
SELECT * FROM employees WHERE first_name LIKE('ge%');

-- 이름에 ge가 포함되는 데이터 조회
SELECT * FROM employees WHERE first_name LIKE('%ge%');

-- 이름이 ge로 시작하고 뒤에 4글자가 있는 데이터 조회
SELECT * FROM employees WHERE first_name LIKE('ge____');

ORDER BY 절

  • 데이터를 정렬해서 조회
  • ASC : 오름차순, defalt값, 생략가능
  • DESC : 내림차순
SELECT *
FROM employees 
ORDER BY birth_date DESC, hire_date ASC;

-- 입사일이 1990/01/01 ~ 1995/12/31이고, 
-- 성별이 여자인 사원의 정보를 성과 이름 오름차순으로 정렬해서 조회
SELECT *
FROM employees
WHERE 
    (hire_date >= 19900101 OR hire_date <= 19951231)
  AND gender = 'F'
ORDER BY last_name, first_name;

DISTINCT 키워드

  • 검색 결과에서 중복되는 레코드 없이 조회
SELECT DISTINCT emp_no 
FROM salaries 
WHERE emp_no = 10001
;

GROUP BY 절, HAVING 절

  • 그룹으로 묶어서 조회 (COUNT)
    MAX : 젤 큰 값
    SUM : 합계
    MIN : 최소값
    AVG : 평균
 GROUP BY [그룹으로 묶을 컬럼] 
 HAVING [집계함수조건]
SELECT 
  gender
  , COUNT(gender)
FROM employees 
GROUP BY gender;  
-- 현재 재직중인 직원의 Engineer가 들어간 직책별  사원수 조회
SELECT 
   title
   , COUNT(title)
FROM titles
WHERE to_date >= 20240305
GROUP BY title HAVING title LIKE('%Engineer%')
;

-- 각 사원의 최고연봉 중 8000 이상을  조회
SELECT 
    emp_no
   ,MAX(salary)
FROM salaries
GROUP BY emp_no HAVING MAX(salary) >= 80000;

AS

  • 컬럼에 별칭부여 , 생략가능
SELECT 
    emp_no
   ,MAX(salary) AS max_sal
FROM salaries
GROUP BY emp_no HAVING MAX(salary) >= 80000;

LIMIT, OFFSET

  • 출력하는 데이터의 개수제한
SELECT *
FROM employees
LIMIT 5 OFFSET 10;

-- OPPSET 키워드 생략하면 아래와 같음
SELECT *
FROM employees
LIMIT 10,5 ;

-- 가장 높은 연봉을 받는 사원 번호 조회
SELECT emp_no, MAX(salary) max_sal FROM salaries 
GROUP BY emp_no
ORDER BY max_sal DESC
LIMIT 1; 

-- 재직중인 사원 중 급여 상위 5위까지 조회
SELECT emp_no, salary 
FROM salaries 
WHERE to_date >= 20240305
ORDER BY salary DESC
LIMIT 5;

profile
개발 일기 ( •̀ ω •́ )✧

0개의 댓글

관련 채용 정보