sql 데이터 조회하기

구름·2022년 12월 8일
0

SQL

목록 보기
3/7
post-thumbnail

데이터 조회하기

검색 조건을 제시한 후 테이블에서 원하는 레코드만을 출력하는 방법

기본 언어 정의
→ 컬럼, 필드, 엔티티 (모두 동일한말)
→ 레코드 : 각 컬럼에 들어간 값, 1행(1라인)
→ 레코드 셋 : 레코드들의 집합

기능
SELECT 절조회하고자 하는 칼럼명의 리스트를 나열합니다.
DISTINCT 절동일한 내용을 한 번씩만 출력하여 중복을 제거합니다.
FROM 절조회하고자 하는 테이블명의 리스트를 나열합니다.
WHERE 절조회하고자 하는 로우의 조건을 나열합니다.
GROUP BY 절동일한 값을 갖는 로우들을 한 그룹으로 묶습니다.
HAVING 절로우들의 그룹이 만족해야 하는 조건을 제시합니다.
ORDER BY절 로우들의 정렬 순서를 제시합니다

SELECT 문

SELECT는 데이터베이스 내에 저장되어있는 테이블을 조회하기 위한 명령어
select * : 지정된 테이블의 모든 칼럼을 조회합니다.
from 다음에 보고자 하는 대상의 테이블 이름을 기술

구조
SELECT [DISTINCT] {*, column[Alias], . . .}
FROM table_name
[WHERE condition][GROUP BY group_by_expression]
[HAVING group_condition][ORDER BY column];


➡️특정 컬럼만 출력하기

select eno, ename, salary 
from employee;
  • 모든 칼럼을 출력할 경우, 칼럼명을 생략하고 * 이용
  • 특정 컬럼만 여러번 출력이 가능함

➡️컬럼을 별칭으로 출력하기(컬럼명 as(생략가능) 별칭)

--컬럼을 별칭으로 출력하기(컬럼명 as(생략가능) 별칭)
select eno as 사원번호, ename as 사원명, job as 직책
from employee;

select eno 사원번호, ename  사원명, job  직책
from employee;

-- employee 테이블의 모든 컬럼을 별칭으로 출력
select eno 사원번호, ename 사원명, job 직책, manager 상관번호,
    hiredate " 입사일", salary "월 급", commission "보%너스", dno "부서 번호"
FROM employee;

➡️중복된 데이터를 한번씩만 출력하게 하는 DISTINCT

: 중복되는 데이터 값을 제외하고 출력

  • SELECT 다음 자리에 와야한다.
  • 다른 컬럼과 같이 사용하면 안된다.
  • ORDER BY를 같이 사용해, 중복제거가 제대로 됐는지 확인
-- 회사에 존재하는 직책 : 중복을 제거후 출력
    select distinct job
    from employee
    order by job;
    
    -- 회사에 존재하는 부서 : 중복을 제거 후 출력
    select distinct dno
    from employee
    order by dno;
    
    -- 직속상관(manager)을 중복제거 후 출력
    select distinct manager
    from employee
    order by manager;

출력결과

dual table

:가상의 Table생성, 단 하나의 칼럼으로 구성이 되어있고 최대 길이 1

➡️where 조건에서 and, or 사용하기

AND : 두가지 조건을 모두 만족해야만 검색할 수 있다.
OR : 두가지 조건 중에서 한가지만 만족하더라도 검색할 수 있다.
NOT : 조건에 만족하지 못하는 것만 검색한다.

EX) 부서번호 조건 만족 출력

-- where 조건에서 and, or 사용하기

-- 부서 번호(DNO)가 20번이거나 30인 모든 컬럼 출력
select *
from employee
where dno = 20 or dno = 30;

select *
from employee
  -- 부서번호가 20이고 월급이 1500이상이면 모든 컬럼 출력
where dno = 20 and salary >= 1500;

-- job(직책)이 MANAGER 이면서 월급이 2000이상인 사용자만 출력
select *
from employee
where job = 'MANAGER' and salary >= 2000;
# 조건을 사용하여 출력 :WHERE 
저장된 데이터 중에서 원하는 데이터만 선택적으로 추출하기 위해서 사용 

구조
SELECT * [column1, column2, .. ,columnn]
FROM table_name
WHERE condition(조건)

-- 조건을 사용하여 출력 : where
select *
from employee
where eno = 7499; -- eno 컬럼의 값이 7499인것만 출력해라

desc employee; -- emplouee 테이블의 구조를 확인

-- 값을 출력시 : number 데이터 타입의 값은 '' 없이 출력
-- number 이외의 데이터 타입은 모두 ''로 값을 출력 : char, varchar, date

select * from employee
where job = 'MANAGER' ; --''없다면 숫자로 받아들임 오류
--job은 데이터타입이 varchar2, 값을 가져올때는 대소문자 구별

select * from employee;

-- 부서번호가 20번인 모든 컬럼
select * from employee
where dno = 20;
  • 주의 값을 출력시 : number 데이터 타입의 값은 '' 없이 출력
  • number 이외의 데이터 타입은 모두 ''로 값을 출력 : char, varchar, date

➡️Between A and B : A와 B사이의 값을 출력

: 특정 컬럼의 데이터 값이 하한값(A)와 상한값(B)사이에 포험되는 로우를 검색
=> A ~ B 사이의 값을 출력을 의미

EX ) 입사월이 81/01/01 ~ 81/12/31 까지 입사한 사원들을 출력


    
    -- Between 사용 안한 경우
    select ename, hiredate
    from employee
    where hiredate >= '81/01/01' and hiredate <= '81/12/31';
    
    -- Between 사용해서 출력
    select ename, hiredate
    from employee             --A            --B
    where hiredate between '81/01/01' and '81/12/31';

➡️ IN연산자

특정 칼럼의 값이 A,B,C 중에 하나라도 일치하면 참이 되는 연산자.

EX) 커미션이 300이거나 500이거나 1400인 사원을 검색하기 위해서 IN 연산자를 사용한 예

select * from employee 
where commission in(300, 500, 1400)

NVL 함수

널 : ? / 무한대 의 의미이기 때문에 연산, 할당, 비교가 불가능하다.
NULL 값이 있는 상태에서 연산을 할 경우 모든 값이 NULL로 출력

NVL 함수를 사용하면 NULL값을 다른 값으로 변환이 가능하다.

	-- 전체 연봉을 계산할때 null 들어간 컬럼을 0으로 변경 후 연산을 적용해야 한다
    -- nvl (commission, 0); <-커미션 컬럼에 null을 0으로 바꿔서 처리해라 
select eno, ename, salary, commission, salary * 12 as 연봉, 
(salary * 12) + nvl (commission, 0) as 전체연봉
from employee;

➡️Like : 컬럼의 값을 문자, 문자열로 검색해서 출력 할때 사용

  • _ : 한글자가 어떤값이 와도 상관없다(한글자를 대치하겠다)
  • % : 모든 글자를 대치
    Ex ) 이름 중 글자로 검색
--글자 이름에 LL이 들어간 사원 찾기 
select ename 
from employee
where ename like '%LL%';

--두번째 자릿수에 A인 사원찾기 
select ename
from employee
where ename like '_A%';

--job 칼럼에 Man 이 들어간 내용을 검색하기 
select job
from employee
where job like '%MAN%';

➡️NULL이 들어간 컬럼을 출력하기

: = null의 의미는 모르는값과 같다는 것은 의미상으로 말이 되지 않기 때문에 = 대신 IS NULL연산자를 사용해야함

❗null을 검색 할때는 = 이 아닌 is를 사용해야한다

select *
from employee
where commission is null;

select *
from employee
  -- null이 안들어간걸 검색해라 
where commission is not null;

➡️ ORDER BY 절

: 정렬, 크기 순서대로 나열하는 것을 의미함

  • 오름차순 방식 : 작은것 -> 큰것
  • 내림차순 방식 : 큰것 -> 작은것
  • ORDER BY 가 쿼리의 제일 마지막에 온다.
  --이름(ename)을 기준으로 내림차순 정렬
   select *
   from employee
   order by ename desc; --desc자리가 생략되면 asc(기본값)
   
   -- hiredat(입사날짜)를 기준으로 정렬
   select *
   from employee
   order by hiredate asc; --asc 오름차순
   
   -- eno(사원번호)를 기준으로 내림차순(desc) 정렬
   select *
   from employee
   order by eno desc;

➡️중복 제거후 출력 : distinct - 중복을 제거할 컬럼앞에 넣는 키

  • select 다음 자리에 와야한다
  • ❗다른 컬럼도 같이 출력하면 중복제거가 안된다
  • order by를 같이 써서 중복제거가 제대로 됐는지 확인
-- 회사에 존재하는 직책 : 중복을 제거후 출력
    select distinct job
    from employee
    order by job;
    
    -- 회사에 존재하는 부서 : 중복을 제거 후 출력
    select distinct dno
    from employee
    order by dno;
    
    -- 직속상관(manager)을 중복제거 후 출력
    select distinct manager
    from employee
    order by manager;

과제

<문제> 특정 조건의 컬럼 출력

예제

<문제>
/ employee 테이블에서 작업, select 문을 사용, where 조건을 사용해서 출력
<문제1> 컬럼 알리어스(별칭), cimmission(보너스) 컬럼의 null인 값만 출력하되
사원번호(eno),사원이름(ename),입사날짜(hiredate)를 출력
<문제2> dno(부서번호)가 20이고 입사날짜가 81년 4월 이후 사원의 이름과 직책과
입사날짜를 출력
<문제3> 연봉을 계산해서 사원번호, 사원이름, 월급, 보너스, 전체연봉 출력
<문제4> commission이 null이 아닌 사용자의 이름만 출력
<문제5> manager (사수)7698인 사원이름과 직책을 출력
<문제6> 월급이 1500이상이고 부서가 20인 사원의 사원이름과 입사날짜, 부서번호, 월급 출력
<문제7> 입사날짜가 81년 4월 1일 이상이고 81년 12월 말일까지의 사원이름과 입사날짜를 출력
<문제8> 직책(job) salesman이면서 D이 1500이상이면서 부서번호가 30인 사원명을 출력
<문제9> 월급이 1500 이하이면서 부서번호가 20번이 아닌 사원이름과 월급과 부서번호를 출력
<문제10> 사원번호(eno)가 7788,7782인 부서번호와 이름과 직책을 출력
/

profile
내가 보려고 하는 업데이트

0개의 댓글