WEB/Back-end

(SQL) SQL 표준, SELECT문

최새벽 2024. 7. 29. 20:28

일반적으로 가독성 위해서 아래와 같은 방식으로 줄 바꿈을 포함하여 작성

SELECT 
    empno, ename, deptno 
FROM emp;

SQL 기본

SQL에서는 null값을 연산 하지 않음.
별칭에 공백 포함되는 경우 쌍따옴표를 활용
홑따옴표는 문자열 의미(값이 삽입됨)
홑따옴표가 없으면 그냥 검색의 기능이 실행되므로 오류가 발생할수 있음
출력되는 컬럼명과 실제 컬럼명이 다를 경우 많음 -> 유의하여 AS 등 활용하기

SELECT ENAME, SAL, SAL * 12 + COMM 연봉, COMM, '삼성' 회사명
FROM EMP;

order by

컬럼명 [asc/desc] * ascending 오름차순(생략가능), descending 내림차순

  • 정렬기준 여러개 작성 가능(앞에 거가 우선순위)
  • 정렬 기준은 order by 맨끝에 위치하며(mysql등에서 예외) 가장 나중에 실행됨
  • 성능에 많은 영향: 느려지는 가장 큰 이유(정렬 자체가 느리기 때문)

 

SQL - SELECT문

실행 순서

  • 어디서 가져올지 (FROM)
  • 어떻게 가져올지 (정렬)
  • 어떤 값을 출력할지
  • 문자열(값)에 들어가는 거면 대소문자 구분해야 함
  • 문자열 홑따옴표
SELECT *
from emp
where deptno = 30 and job = 'SALESMAN'; 

 

BETWEEN 사이값 연산

`where sal BETWEEN 500 and 1000;`

 

IN -  요소 별로 포함되는지 확인하기

  • 잘못 쓰면 쿼리 속도 느려질 수도 있음
    where deptno in (10, 30);

 

키워드에서는 !로 부정 불가능. not이라고 써줘야 함

  • '!'는 연산자 기호에서 사용
    where deptno not in (10, 30);

 

날짜 검색하기

  • '환경설정 - 데이터베이스 - NLS - 날짜 형식에서' 날짜 보이는 형식 변경 가능
  • between으로 검색 가능
  • and 등으로도 검색할 수 있다
SELECT *
from emp
where hiredate between '1981-02-01' and '1981-02-28';

 

LIKE

  • (참고) 스프링 - DB에서 문자열 비교할 시 각각 다 대문자로 변경하여 비교한다
  • S로 시작하는 문자열 검색하기
  • SELECT * from emp where ename like 'S%';
  • 두번째 글자가 L인 사원 검색하기
  • SELECT * from emp where ename like '_L%';
  • S가 포함된 사원 검색하기
  • SELECT * from emp where ename like '%S%';

 

NULL 체크

  • null은 연산자 활용 시 결과가 null이 되므로 연산자 활용 쿼리문을 작성하면 아무것도 나오지 않음
  • null인지 아닌지 확인하기 위해서는 IS NULL 사용
  • null 값만 출력
SELECT *
from emp
where comm is null;
  • null 아닌 값만 출력
SELECT *
from emp
where comm is not null;

 

집합연산 - UNION, UNION ALL

  • 레코드끼리 합집합 연산해 줌
  • 칼럼 개수 다르면 오류. 칼럼명이 다르더라도 타입만 같다면 순서대로 합집합 연산함
  • 따라서 사용 안하는게 좋다
  • order by맨 뒤에 작성하면 합쳐진 후에 정렬함
  • UNION : 중복 제거
SELECT EMPNO, ENAME, SAL, DEPTNO
from emp
where DEPTNO = 20
UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
from emp
where DEPTNO = 10;
  • UNION ALL : 중복 허용