본문 바로가기
💾Database & Server/SQL

[SQL] SQL Cookbook - 01.레코드 검색

by inbeom 2023. 8. 31.
728x90

참고

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

별표(*) 문자는 SQL문에서 특별한 의미를 가진다. *를 사용하면 지정된 테이블의 모든 행이 반환된다.

select * from 테이블명

대화형으로 즉석에서 실행하는 쿼리는 *를 사용하면 좋지만 프로그램 코드를 작성할 때는 각 열을 개별 지정하는게 좋다.

성능은 같지만 쿼리에서 어떤 열을 반환하는지 명확하게 알 수 있으며, 다른 사용자가 이해하기 쉽다.

 

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

테이블에서 특정 조건을 충족하는 행만 보기 위해서는 WHERE절로 가져올 행을 지정(필터링) 할 수 있다.

select * from emp where deptno = 10

 

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

여러 조건을 충족하는 행을 반환하기 위해서는 OR 및 AND절과 함께 WHERE절을 사용하면 된다.

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

 

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

# 특정 열의 값 검색
select ename, deptno, sal
	from emp

 

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

# 값을 반환하는 각 컬럼에 이름을 지정
select sal as salary, comm as commission
	from emp

 

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

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

 

7. 열 값 이어 붙이기

# DB2, Oracle, PostgreSQL
select ename||' Work AS a '||job as msg
	from emp
  where deptno = 10

# MySQL
select concat(ename, ' Work AS a ',job) as msg
	from emp
  where deptno = 10
  
# SQL Server
select ename + ' Work AS a ' + job as msg
	from emp
  where deptno = 10

 

8. SELECT 문에서 조건식 사용하기

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

 

9. 반환되는 행 수 제한하기

# DB2 - FETCH FIRST
select *
	from emp fetch first 5 rows only
    
# MySQL & PostgreSQL - LIMIT
select *
	from emp limit 5
    
# Oracle - ROWNUM
select * 
	from emp
   where rownum <= 5
    
# SQL Server - TOP
select top 5 *
	from emp

 

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

# DB2 - RAND, FETCH
select ename, job
	from emp
   order by rand() fetch first 5 rows only
   
# MySQL - RAND, LIMIT
select ename, job
	from emp
   order by rand() limit 5
   
# PostgreSQL - RANDOM, LIMIT
select ename, job
	from emp
   order by random() limit 5
   
# Oracle - DBMS_RANDOM.VALUE
select *
	from (
   select ename, job
    from emp
   order by dbms_random.value()
   		)
   where rownum <= 5
   
# SQL Server - NEWID, TOP
select top 5 ename, job
	from emp
   order by newid()

 

11. null 값 찾기

select *
	from emp
   where comm is null

 

12. null을 실제값으로 변환하기

# COALESCE
select coalesce(comm, 0)
	from emp
        
# CASE
select case
	when comm is not null then comm
    else 0
	end
   from emp

 

13. 패턴 검색하기

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

 

 

 

 

 

 

reference.

[SQL Cookbook] - 한빛미디어 

728x90