MySQL : SELECT

msung99·2022년 10월 29일
0
post-thumbnail

이전 포스팅에서 DML 에 대해 소개드리면서, SELECT 문에 대해 소개드린 적이 있습니다. 이번 포스팅에서는 SELECT 문에 대해서만 따로 더 자세히 다루어볼까 합니다. SELECT 가 그만큼 중요한 내용이므로 잘 학습해두시면 좋을듯합니다.

이전 포스팅은 아래 링크를 참고 바랍니다.

https://velog.io/@msung99/MySQL-DML


SELECT 필수지식

1. 연산자 이용하기

지난번 포스팅을 보셨다면 충분히 이해되실 내용이라, 따로 자세한 설명은 생략하겠습니다.

SELECT name, job, salary, salary * 12   // salary 에 12를 곱합
FROM employee;

2. AS 를 이용해서 열 이름에 별칭 사용하기

as 키워드(예약어) 는 생략 가능하다는 점 기억해두시길 바랍니다.

SELECT name as 사원이름, job as 직업명 // name 열에 사원이름 이라는 별칭을 부여
FROM employee;     

SELECT name 사원이름 , job 직업명   // as 키워드 생략가능
FROM employee;

3. NULL값이 의미하는 것

NULL 값이 의미하는 것은 흔히 생각하는 것과 다소 다릅니다.
NULL 은 0이라는 값이나, 문자열에서 공백을 의미하는 것이 아니며ㅕ, 값이 저장되는 공간을 의미하는 것도 압니다.

NULL 은 정말 단순하게 말해서, 인식되지않는 값, 미확정 값을 의미합니다.

즉, NULL 값이란 어떠한 값이 존재하긴하나, 정확히 어떤 값을 가지는지를 알 수 없는 값이다.

ex) 어떤 NULL 값이 3a937fw8be3 일 경우, 이 값에 5000을 더하면 인식하지 못한다. 5000 이라는 인식할 수 있는 값이 있어도, NULL 에 인식하지 못하는 값이 있고 이 값에 5000을 더했기 때문에 결국 그 결과값도 당연히 인식할 수 없는 결과가 됩니다!


4. isnull() 내장함수

그렇다면 NULL값이 포함된 연산에서 원하는 연산결과가 제대로 인식되고 결과값이 출력될 수 있도록 하려면 어떻게 해야할까요?

이는 isnull() 내장함수를 활용하면 됩니다.

isnull( ) 내장함수

  • 형태 : isnull(field, value)
  • 기능 : field 값이 null일떄 value 값으로 대치(변경)되어 처리됩니다.

예제

SELECT name 사원이름, job 직급, isnull(commission, 0) 보너스, 
FROM employees;     


=> commission 이라는 열에 저장된 값이 NULL 인 경우 0으로 대치하도록 합니다.
이를 통해 인식할 수 없는 NULL 에 대한 연산이 수행되고 인식할 수 없는
결과값이 출력되는 현상을 방지할 수 있습니다.

WHERE문의 세부 구문들

테이블에서 특정 조건에 부합하는 데이터만 조회하고 싶을 떄 사용하는 것이 WHERE 절 입니다.

SELECT * FROM employee
WHERE job = '사원'

1. 대소비교 사용

  • ">", "<", "<=", ">=", "!=" 와 같은 대소비교자를 사용 가능합니다.
SELECT * FROM employee
WHERE salary >= 5000;

2. 논리연산자(and/or) 사용

여러개의 조건을 동시에 사용해야 할때 논리연산자를 사용하면 됩니다.

ex) '사장' 직급이 아니면서, salary가 5000 이상인 데이터에 대해서 조회하기
이 문장에는 2개의 조건이 달려있습니다. 직급관련 조건과, salary 관련 조건입니다.
이렇게 여러 조건들을 모두 부합시켜주는 쿼리문을 작성할때 AND 와 OR 를 사용하면 됩니다.

SELECT * FROM employee
WHERE job != '사장'
AND salary >= 5000;


SELECT * FROM employee
WHERE (salary * 12) + isnull(commission, 0) <= 5000  # isnull 함수를 사용해서 
OR job = '사원';                  // 연봉을 계산하고 해당값을 WHERE절에서 활용

3. BETWEEN A AND B

A와 B 사이의 범위에 있는 데이터 값을 조회

예를들어, salary 가 300 이상 500 이하인 데이터를 조회하는 방법은 아래와 같습니다.

SELECT * FROM employee
WHERE salary >= 3000
AND salary <= 500;

그런데 BETWEEN 문을 사용하면 아래처럼 더 간략하게 표현 가능해집니다.

SELECT * FROM employee
WHERE salary BETWEEN 300 AND 500;

4. IN

IN 구문 안에 할당해준 정확한 값들을 찾아서 조회

예제를 보시면 바로 이해가 될겁니다.

salary 가 정확히 300, 400, 500, 600 인 데이터들을 조회하고 싶은 경우에는 아래처럼 IN 에다 300,400,500,600 을 할당하면 데이터들이 조회됩니다.

SELECT * FROM employee
WHERE salary IN (300,400,500,600);

SELECT 의 심화적인 내용들

1. DISTINCT

중복되는 값들은 출력되지 않도록 하는 함수

SELECT DISTINCT job as 직급 FROM employee;  

=> job 컬컴(열)의 값들 중에서 중복되는 값들은 출력되지 않도록 합니다.
예를들어 job 컬럼에  '과장', '과장', 과장', 대리', '부장', '부장' 이 저장되어 있는경우 
과장, 대리, 부장이 출력되도록 합니다.

2. LIKE

특정 조건에 부합하는 데이터들을 조회

  • 와일드카드와 함께 활용한다.

ex) "이름에 "민" 이 들어가는 사람의 데이터를 조회하기
"성이 "김" 인 사람의 데이터를 조회하기

이런 조건들에 대한 검색을 용이하게 하도록, LIKE 와 더붙어 와일드카드를 통해 조회가 가능합니다.

와일드카드
% : 문자가 아예 없거나, 1개 이상의 어떠한 문자도 대치한다. 즉, 0~무한대 개수의 글자가 될 수 있다.
_ : 어떠한 문자가 와도 되지만, 딱 한글자를 대치한다.

SELECT * FROM employee
WHERE name LIKE '이%';   // 첫글자가 '이' 로 시작하는 데이터들이 대치 및 조회됨

SELECT * FROM employee WHERE name LIKE '%민%';
// 글자 중간에 '민'이 포함된 데이터들이 대치 및 조회된다.

SELECT * FROM employee
WHERE name LIKE '%민%' 
// 이민성, 이이민성성, 람보르기니민성이다 등의 데이터가 조회


SELECT * FROM employee
WHERE name LIKE '_민_' 
// 이민성, 김민호, 성민이  등의 데이터가 조회

3. IS NULL / IS NOT NULL

특정 열의 값이 NULL 인 (또는 NULL이 아닌) 데이터들을 조회

  • IS NULL : 특정 열의 값이 NULL 인 데이터들만 조회
  • NOT NULL : 특정 열의 값이 NULL 이 아닌 데이터들만 조회
SELECT * FROM employee
WHERE manager IS NULL;  // manager 열의 값이 NULL 인 데이터들만 조회

SELECT * FROM employee
WHERE commission is NOT NULL;    // commission 열의 값이 NULL 이 아닌 데이터들만 조회

4. ORDER BY

오름차순으로 데이터들을 정렬

어떤 열을 기준으로 정렬을 할지 함꼐 적어주면 됩니다.

또한 아래와 같은 추가옵션을 함께 부여해서, 오름차순 or 내림차순 정렬방식을 선택 가능합니다. (만일 추가옵션 부여를 안하면, 디폴트로 오름차순 정렬을 합니다)

  • asc : 오름차순 정렬
  • desc : 내림차순 정렬
SELECT * FROM employee;
ORDER BY salary ASC; // 정렬기준을 salary열로 잡고 오름차순 정렬을 시행

또한 정렬기준을 연속적으로 부여가 가능합니다.

예를들어 salary 컬럼에 대한 오름차순이 끝난 이후, 두번쨰 정렬기준으로 emp_number 컬럼에 대한 정렬이 가능합니다. 그 뒤로도 3번쨰, 4번째, ... 정렬기준을 부여 가능합니다.

SELECT * FROM employee;
ORDER BY salary ASC, emp_number DESC; 

# 1. salary 열을 기준으로 오름차순 정렬을 한다.
# 2. 직전의 정렬결과를 바탕으로 emp_number 열을 기준으로 내림차순 정렬을 한다.

5.TOP n

상위 n개의 데이터만 보여주는(출력하는) 명령어

cf) 위는 MS SQL Server 에서의 특징으로, 다른 데이터베이스에서는 LIMIT 등으로 표현된다고 하니 참고하면 좋을듯합니다.

TOP 은 FROM 이후에 적는것이 아닌, SELECT 뒤에 적으면 된다.

SELECT TOP 4 * FROM employee  // 상위 4개의 데이터만 출력
ORDER BY salary;

Top n 의 옵션( WITH TIES, PERCENT )

WITH TIES

같은 값을 지니는 데이터들도 포함해서 상위 n개의 데이터들을 출력

TOP은 동일한 데이터를 지닐때 하나만 추출하고, 나머지는 삭제하고 추출합니다. 동일한 데이터도 포함해서 출력하고 싶다면 TOP n 뒤에다
WITH TIES 옵션도 같이 부여해주면 됩니다.

SELECT TOP 4 WITH TIES * FROM employee  // 중복되는 값들도 제거하지 않고 함께 추출
ORDER BY salary;


=> 예를들어 "이민성", "철수", "유리", "짱구", "맹구", "훈이" 의 salary 컬럼값이 각각
600, 300, 400, 400, 200, 100, 500 일떄 그냥 TOP 4를 출력하면
600, 500, 400, 300 이 출력된다.

그러나 TOP 4 에다가 WITH TIES 옵션을 활용하면
600, 500, 400, 400, 300  이 출력된다.

PERCENT

상위 n퍼센트의 데이터들을 출력

그냥 TOP n 은 상위 n개의 데이터를 출력하는 것입니다.
만일 전체 데이터 중에 상위 n 퍼센트만큼의 데이터를 출력하고 싶다면 PERCENT 옵션을 사용해주시면 됩니다.

SELECT TOP 10 PERCENT * FROM employee // 상위 10퍼센트의 데이터들을 출력
ORDER BY number;
profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글