Study/Book

[SQL 쿡북] Chapter1

HongUniverse 2022. 10. 28. 19:01
반응형

1.1 테이블의 모든 행과 열 검색하기

select *
	from emp

지정한 테이블의 모든 열을 반환한다.

 

1.2 테이블에서 행의 하위 집합 검색하기

select *
	from emp
where deptno = 10

=, <, >, ≤, ≥, ≠, <>와 같은 일반 연산자를 지원한다. 여러 조건을 만족하는 행을 가져오길 원할 때는 AND, OR 및 괄호를 지정하여 수행할 수 있다.

  • <>은 Null이 아닌 식을 비교하는 경우 왼쪽 피연산자가 오른쪽 피연산자와 같은지 같지 않은지 판별한다.

 

1.3 여러 조건을 충족하는 행 찾기

select *
	from emp
where deptno = 10
	or comm is not null
	or sal <= 2000 and deptno = 20

depno 가 10인 사원, comm이 널이 아닌 사원, sal 이 2000이하이면서 deptno 가 20인 사원을 모두 찾아온다.

 

1.4 테이블에서 열의 하위 집합 검색하기

select ename, deptno, sal
	from emp

특정 열의 값을 보려고 할 때 열을 지정한다. 불필요한 데이터 검색에 드는 시간 낭비를 방지한다.

 

1.5 열에 의미 있는 이름 지정하기

select sal as salary, comm as commission
	from emp

as 키워드를 이용하여 열에 새 이름을 지정할 수 있다. 사용자가 지정한 새 이름을 alias 별칭 이라고 부른다.

 

1.6 WHERE 절에서 별칭이 지정된 열 참조하기

select *
   from (
select sal as salary, comm as commission
   from emp
   ) x
where salary < 5000

alias를 바로 WHERE 절에서 사용할 수 없다. 쿼리를 인라인 뷰로 감싸서 별칭이 지정된 열을 참조할 수 있다. 이것은 WHERE절은 SELECT절을 시행하기 전에 판단되기 때문이다.

FROM절은 WHERE절보다 먼저 평가되므로, 원래 쿼리를 FROM절에 배치하면 해당 쿼리의 결과에서 WHERE 절이 alias 별칭을 ‘확인’할 수 있다. 이 기법은 테이블의 열 이름이 이해하기 쉽도록 지정되지 않은 경우에 유용하다.

 

1.7 열 값 이어 붙이기

DBMS에서 제공하는 내장함수 Built-in-function 사용해야한다. 데이터베이스에 따라 조금 다르다.

//DB2, Oracle, PostgreSQL
select ename ||' WORKS AS A'||job as msg
   from emp
where deptno = 10

//MySQL
select concat(ename,' WORKS AS A',job) as msg
   from emp
where deptno = 10

//SQL Server
select ename + ' WROKS AS A' + job as msg
   from emp
where deptno = 10

=> 결과 셋 

CLARK WORKS AS A MANAGER
KING WORKS AS A PRESIDENT

1.8 SELECT 문에서 조건식 사용하기

SELECT 문에서 IF-ELSE 연산을 수행하려고 할때 CASE 식을 사용한다.

select ename, sal,
   case when sal <= 2000 then 'UNDERPAID'
   case when sal >= 4000 then 'OVERPAID'
      else 'OK'
   end as status
from emp

ELSE은 선택 사항이고 생략하면 부합하지 않는 행에 대해 NULL을 반환한다.

 

 

1.9 반환되는 행 수 제한하기

//DB2
select *
   from emp fetch first 5 rows only

//MYSQL, PostgreSQL
select *
   from emp limit 5

//Oracle
select *
   from emp
where romnum <= 5

//SQL Server
select top 5 *
   from emp

 

ROWNUM= 5 을 조건으로 넣으면 1행부터 4행까지 먼저 반환하지 않으면 다섯번째 꺼를 가져올수 없지만 ROWNUM = 1은 적어도 한번 이상 가져오기 때문에 무방하다.

 

1.10 테이블에서 n개의 무작위 레코드 반환하기 

//DB2
select ename, job
   from emp
order by rand() fetch first 5 rows only

//MYSQL
select ename, job
   from emp
order by rand() limit 5

//PostgreSQL
select eaname, job
   from emp
order by random() limit 5

//Oracle
select *
   from (
select ename, job
   from emp
order by dbms_random.value()
   )
where ronum <= 5

//SQL Server
select top 5 ename, job
   from emp
order by newid()

 

1.11 null 값 찾기 

null은 열이 null인지 여부를 테스트 할 때 =, ≠ 를 사용할 수 없다.

select *
   from emp
where comm is null

 

1.12 null을 실젯값으로 변환하기 

null이 포함된 행에서 NULL 이 아닌 값을 반환

select coalesce(comm, 0)
   frfom emp

null이 아닐 때마다 반환되는데 0으로 반환된다.

 

1.13 패턴 검색하기 

부서 10과 20의 사원들중 이름에게 ‘I’가 있거나 직급명이 ‘ER’로 끝나는 사원만 반환

select ename, job
   from emp
where deptno in (10, 20)
   and (ename like '%I%' or job like '%ER')

 

반응형