본문 바로가기
back-end/SQL

[MySQL] SELECT 모든것

by 모두의 향연 2022. 3. 18.
728x90
반응형

◈  SELECT의 기본

  • SELECT와 FROM은 필수
* FROM 절에 나열된 테이블에서 모든 열을 선택
ALL(생략 가능) 선택된 모든 행을 반환. ALL이 default 
DISTINCT 선택된 모든 행 중에서 중복 행 제거
column FROM 절에 나열된 테이블에서 지정된 열을 선택
expression 표현식은 값으로 인식되는 하나 이상의 값, 연산자 및 SQL 함수의 조합을 뜻함
alias 별칭

 

 

◈ SELECT에서의 사칙연산 ( +, - , *, / ), alias, NULL Value

[모든 사원의 사번, 이름, 급여, 급여 * 12 (연봉) 검색]
select employee_id as 사번, first_name "이 름", salary as "급여", salary * 12 "연봉"
from employees;

* 사칙연산에서 %는 없다.
* alias 쓸 때 따옴표 없이 쓸 수 있는데, 그 안에서 띄어쓰기 허용 안 된다. 띄어 쓰고 싶으면 따옴표 쓸 것
select employee_id 사번, first_name "이 름", salary "급여", salary * 12 "연봉", commission_pct, (salary + salary * commission_pct) * 12 "커미션 포함 연봉 1", (salary + salary * IFNULL(commission_pct, 0)) * 12 "커미션 포함 연봉 2"
from employees;

 

◈ select에서의 CASE exp1 WHEN exp2 THEN exp3 [ WHEN exp4 THEN exp5 … ELSE exp6 ] END

select employee_id, first_name, salary,
case when salary > 15000 then '고액연봉'
      when salary > 8000 then '평균연봉'
      else '저액연봉’
end "연봉등급"
from employees;

 

◈ 테이블의 전체 데이터 조회(*) 모든 사원의 모든 정보 검색

select *
from employees;

 

◈ 테이블의 특정 컬럼 조회

모든 사원의 사번, 이름, 급여 검색
select
employee_id, first_name, salary
from employees;

 

내림차순 조회(desc) ↔ 오름차순 조회(asc)
테이블 내의 전체 직원을 나이가 높은 것부터(내림차순) 조회
select
  *
from employees
order by age desc;

 

조건 조회(AND, OR, NOT)
근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호 검색
select employee_id, first_name, department_id
from employees
where department_id != 50
and department_id != 60
and department_id != 70;
근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호 검색
select
employee_id, first_name, department_id
from employees
where not (department_id = 50
or department_id = 60
or department_id = 70);

 

포함하는 조건 조회(in) ↔ 포함하지 않는(not in)
근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호 검색
select employee_id, first_name, department_id
from employees
where department_id in (50, 60, 70);

 

BETWEEN(~사이값)
[급여가 6000이상 10000이하인 사원의 사번, 이름, 급여 검색]
select employee_id, first_name, salary
from employees
where salary >= 6000
and salary <= 10000;
select employee_id, first_name, salary
from employees
where salary between 6000 and 10000;

 

NULL 비교 : IS NULL, IS NOT NULL
[근무 부서가 지정되지 않은(알 수 없는) 사원의 사번, 이름, 부서번호 검색]
select employee_id, first_name, salary
from employees
where department_id is null;

[커미션을 받는 사원의 사번, 이름, 급여, 커미션 검색]
select employee_id, first_name, salary, commission_pct
from employees
where commission_pct is not null;

 

포함하는 조건 조회(LIKE)
이름에 'x'가 들어간 사원의 사번, 이름 검색
select employee_id, first_name
from employees
where first_name like '%x%';

 

~n번째 자리에 ?가 들어간(LIKE)
이름의 끝에서 3번째 자리에 'x'가 들어간 사원의 사번, 이름 검색
select employee_id, first_name
from employees
where first_name like '%x__';

 

~시작하는 조건 조회(LIKE)
first_name이 'x' 로 시작하는 사원의 사번, 이름 검색
select employee_id, first_name
from employees
where first_name like 'x%';

 

소문자로 바꿔서 출력(LCASE 또는 LOWER) ↔ 대문자(UCASE 또는 UPPER)
'name'을 모두 소문자로 바꿔서 출력
select lower('name') AS '소문자'
from employees;

 

두 단어를 연결해서 출력(concat)
'모두의향연'과 '님'을 연결해서 출력
select concat('모두의향연', '') AS '연결'
from employees;

 

문자열 중 시작 위치부터 개수만큼 리턴(SUBSTRING)
enter_date가 2020년 3월 1일 이후인 직원의 이름 맨 앞 두 글자와 직원의 정보를 조회
select  * , substring(name , 0 , 2) AS '부분문자열'
from employees
where enter_date > '2020-03-01';

 

문자열 중 기존 문자열을 바뀔 문자열로 변경(REPLACE)
name이 ‘anna’인 직원의 name을 'enna'로 바꾼 후 조회
select replace(modelname, 'anna' , 'enna') AS '문자열 바꾸기'
from employees
where name ='anna';
728x90
반응형