[SQL-1] SQL 입문

쏘니's avatar
Mar 31, 2024
[SQL-1] SQL 입문
연습용 스크립트
연습용 스크립트

000 SQL이란?

SQL 이란?

Structure Query Language의 약자
데이터가 저장되어있는 데이터 베이스 소프트웨어에서 데이터를 검색하고 조작하기 위한 프로그램 언어(가장 중요한 공통 언어라고 볼 수 있음)
 

SQL의 종류 5가지

  1. Query : 데이터를 검색하는 (DQL, Data Query Language)
    1. SELECT
  1. DML문 (Date Manipulation Language 데이터 조작 언어)
    1. 데이터 조작 언어로 테이블의 데이터를 조회, 저장, 수정, 삭제함
      DB 내부에 실제로 저장된 데이터들을 다룸
      SELECT : 저장된 데이터를 조회 INSERT, UPDATE, DELETE, SELECT
  1. DDL문(Data Definition Language 데이터 정의 언어)
    1. CREATE, ALTER, DROP. TRUNCATE
  1. DCL문(Data Control Language 데이터 제어 언어)
    1. GRANT, REVOKE
  1. TCL문(Transaction Control Language 트랜잭션 제어 언어)
    1. TCL문은 DCL로 분류하는 경우도 많다
 

SQL 작성 시 주의사항

📖
1. SQL은 대소문자를 구분하지 않음 2. 절은 별도의 라인에 따로 작성하는 것 권장 (절이 복잡해 졌을 때 보기 편하기 위함) ex. select ename, sal from emp; 3. 탭과 들여쓰기를 사용해서 가독성을 높이기 ex. 바람직한 작성법 select ename, sal from emp; ex. 바람직하지 않은 작성법 select ename, sal from emp;
 
 
  • 오라클 버전 확인 sql
    • select * from v$version;
      notion image
      19c와 21c의 차이는 21c는 view가 업데이트 됨. 19c는 안됨.
 
 

001 테이블에서 특정 열(COLUMN) 선택하기

📖
관련 개념
  • 테이블(TABLE)이란?
    • 행(ROW.가로)과 열(COLUMN.세로)로 이루어진 데이터 저장 단위
       
  • desc(describe)
    • 테이블의 구조 확인 명령어
      desc [테이블 명] describe [테이블 명]
       
  • select 절 기본구조
    • select [컬럼명] from [테이블명];
 
연습
Q 예제 1. dept테이블 전체를 확인하시오
A.
select * from dept; ——> 테이블 전체를 출력하라는 것
notion image
 
Q 예제 2. emp 테이블의 구조를 확인하시오
A.
desc emp 테이블의 구조를 확인하는 명령
notion image
 
Q 예제 3. 사원테이블에서 이름과 월급 출력
A.
select ename, sal from emp;
notion image
 
[예제2] 사원테이블에서 이름과 직업과 부서번호를 출력
select ename, job, deptno from emp;
notion image
 
[예제3] 사원 테이블에서 사원번호, 이름, 월급, 입사일을 출력
select empno, ename, sal, hiredate from emp;
notion image
 
[예제4] dept 테이블의 구조를 확인하시오
describe dept 혹은 desc dept
notion image
 
 
[예제5] 부서 테이블에서 부서위치만 출력하시오
select loc from dept;
notion image
 
[예제6] 부서테이블에서 부서위치와 부서명을 출력하시오
select loc, dname from dept;
notion image
 
[예제7] 사원 테이블에서 사원번호, 이름, 월급, 직업, 커미션, 부서번호를 출력하시오
select empno, ename, sal, job, comm, deptno from emp;
notion image
 
 
 
 
 
 

002 테이블에서 모든 열(COLUMN) 출력하기

📖
1. *(asterisk) select 절에 *을 쓰면 모든 컬럼을 다 보여달라는 것
 
 
 
Q 예제 1. emp 테이블의 모든 열(column)을 출력하시오
A.
select * from emp;
notion image
 
Q 예제2. 사원이름, 직업과 부서번호를 출력하는데 컬럼명을 한글로 출력하시오.
select ename as 사원이름, job as 직업, deptno 부서번호 from emp;
notion image
 
Q 예제3.
부서 테이블에서 부서번호와 부서위치를 출력하는데, 컬럼명이 Department number와 Departmnet location으로 출력하시오.
select deptno "Department number", loc as "Deparmnet location" from dept;
notion image
 
Q예제 4. 사원테이블에서 이름, 월급, 월급 + 300 * 2, 월급+300*2를 bonus로 해 출력하시오.
select ename, sal, sal+300*2, sal+300*2 as bonus from emp;
notion image
 

003 컬럼 별칭을 사용하여 출력되는 컬럼명 변경하기

2. as → 컬럼 별칭 사용
select [컬럼명] (as) [사용자 지정 별칭] from [테이블 명]; ## as는 생략 가능: 괄호 안에 있는 것은 생략 가능함을 의미
컬럼별칭 사용시 주의사항 1. 컬럼 별칭에 공백문자나 특수문자 *를 사용하려면 더블 쿼테이션 마크(””)를 둘러줘야함 2. 컬럼명의 대소문자를 구분해서 출력하고 싶다면 더블 쿼테이션 마크를 둘러줘야함 —-Oracle 사용시 더블 쿼테이션 마크(””)를 사용하는 순간은 이 두가지 뿐! 나머지는 다 싱글 쿼테이션 마크(’)——

004 연결 연산자 사용하기(||)

📖
연결 연산자(||)는 두개의 컬럼의 데이터를 연결해서 출력하는 연산자이다 ex. select ename || sal from emp; select ename || ‘ 의 월급은 ‘ || sal from emp;
 
Q예제1 : 위의 결과를 다시 출력하는데 끝에 다음과 같이 “입니다.”를 붙여서 출력하시오
select ename || ' 의 월급은 ' || sal || '입니다.' from emp;
notion image
Q. 최재건 학생은 경기도 여주시에 살고 있습니다.
select ename || ' 학생은 ' || address || '에서 살고 있습니다.' from emp18;
notion image

005 중복된 데이터를 제거해서 출력하기(DISTINCT)

 
📖
DISTINCT 중복된 데이터 제거하는 명령어 단, distinct는 맨 앞에 딱 한번만 사용해야함. 컬럼이 여러개라면 알아서 묶어서 중복 제거됨
select distinct [컬럼명],[컬럼명] from [테이블명] ##원하는 컬럼의 중복된 데이터를 제거하여 출력##
 
Q 예제1.
직업을 출력하는데 중복을 제거해서 출력하시오
select distinct job from emp;
notion image
 
Q 예제 2.
우리반 테이블에서 통신사를 출력하는데 중복을 제거해서 출력하시오.
select distinct telecom from emp18;
notion image
Q 예제3.
사원테이블에서 부서번호와 직업을 출력하시오.
select deptno, job from emp;
notion image
 
단, 중복을 제거하여 출력하시오
select distinct deptno, job from emp; ##이때 distinct는 맨 앞에 한번만 가능
notion image
 
Q 예제4.
우리반 테이블에서 전공(major)를 출력하는데, 중복을 제거하여 출력하시오.
notion image

006 데이터를 정렬해서 출력하기(ORDER BY)

📖
Order By 절 - Order By절을 이용하면 데이터를 정렬해서 출력할 수 있다 - select 문에서 맨 마지막에 서술되는 구문이며 실행도 맨 마지막에 실행되는 구문이다
- select 절에 [컬럼명]이 없는 컬럼으로도 order by 가능
(ocp와 sqld 시험의 객관식 예제로 출제됨)
-정렬 시 0, 1, 2 … 순서가 아니라 1,2,3,~,0 순서임
-asc 정렬시 : null값이 가장 마지막, 공백 값이 가장 우선됨
select [컬럼명],[컬럼명] from [테이블명] order by [컬럼명] [옵션]; ##select 절에 [컬럼명]이 없는 컬럼으로 order by 가능
옵션
  • asc : 오름차순으로 출력, 낮은 값에서 높은 값 순으로 출력
    • (옵션 생략시 기본값 오름차순)
  • desc :내림차순으로 출력, 높은 값에서 낮은 값 순으로 출력
컬럼명 대신 숫자로 표기하여 정렬하기
notion image
위와 같이 select절에 입력한 컬럼명을 왼쪽부터 차례로 1,2,3 순서를 부여
job은 2번이 부여되었으니 2 asc는 job을 기준으로 오름차순 정렬한다. 순서 알아보기
  • 코딩 순서 : select → from → order by
  • oracle의 실행 순서: from → select → order by
 

문제풀며 익히기

Q1.
이름과 월급을 출력하는데 월급이 낮은 사원부터 높은 사원으로 출력하시오.
A. select ename, sal from emp order by sal asc;
notion image
 
Q2.
이름과 월급을 출력하는데 월급이 높은 사원부터 출력되게하시오.
A. select ename, sal from emp order by sal desc;
notion image
 
Q3.
이름과 입사일을 출력하는데, 최근에 입사한 사원부터 출력되게하시오
A. select ename, hiredate from emp order by hiredate desc;
notion image
 
Q4.
우리반 테이블(emp18)에서 이름과 생일(birth)을 출력하는데, ㄱㄴㄷㄹ 순서로 정렬해서 이름을 출력하시오
A. select ename, birth from emp18 order by ename (asc); #asc생략 가
 
Q5.
우리반 테이블(emp18)에서 이름과 생일(birth)을 출력하는데 생일을 ascending 하게 출력하시오.
A. select ename, birth from emp18 order by birth (asc); #asc생략 가능
 
Q6.
사원테이블에서 이름과 부서번호와 월급을 출력하는데, 부서번호를 ascending하게 출력하시오
A. select ename, deptno, sal from emp order by deptno (asc);
notion image
 
Q7.
위의 결과를 다시 출력하는데, 부서번호를 ascending하게 출력하고 부서번호를 ascending하게 출력된것을 기준으로 월급을 descending하게 출력하시오
A. select ename, deptno, sal from emp order by deptno (asc), sal desc;
notion image
 
Q8.
이름, 직업, 입사일을 출력하는데, 직업을 ABCD 순서대로 정렬해서 출력작업을 ABCD 순서대로 정렬해서 출력한 것을 기준으로 두고 입사일을 먼저 입사한 사원부터 출력되게하시오.
A1. select ename, job, hiredate from emp order by job (asc), hiredate desc; #asc 생략 가능 A2. select ename, job, hiredate from emp order by 2 asc, 3 desc;
notion image
 
Q9.
이름, 직업, 월급+300*2를 출력하는데, 월급+300*2의 값이 높은 사원부터 출력하시오.(단, 월급+300*2의 컬럼명은 ‘보너스’로 출력)
A1. select ename, job, sal+300*2 (as) 보너스 #as 생략가능 from emp order by sal+300*2 desc; A2. select ename, job, sal+300*2 보너스 from emp order by 3 desc; A3. select ename, job, sal+300*2 보너스 from emp order by 보너스 desc;
notion image
 
Q10.
우리반 테이블에서 이름과 주소를 출력하는데, 주소를 ascending하게 출력하고, 컬럼명을 한글로 ‘이름’,’주소’로 출력되게 하시오.
A. select ename 이름, address 주소 from emp18 order by address;
 
 
 

007 WHERE절 배우기 1(숫자 데이터 검색)

📖
WHERE절 특정 조건에 해당하는 데이터만 검색할 수 있다 문법
select [컬럼명] from [테이블명] where [검색조건];
 
예제1
emp테이블에서 월급이 3000인 사원의 사원명과, 월급 출력
select enmae, sal from emp where sal = 3000;
 
비교연산자 미리보기
= 같다
>크다
<작다
>= 크거나 같다
<= 작거나 같다
!= , <>, ^= 같지 않다
 
순서 알아보기
  • 코딩 순서 : select → from →where → order by
  • oracle의 실행 순서: from → where → select → order by
  • 때문에 아래와 같은 상황에서 에러
    • 예제2
      select ename, sal * 12 연봉 from emp where 연봉 >= 36000; ##에러발생. 별칭사용불가
 

문제풀며 익히기

Q1.
사원번호가 7788인 사원의 사원번호와 이름과 월급을 조회하시오.
A. select empno, ename, sal from emp where empno = 7788;
notion image
 
Q2.
월급이 2000이상인 사원들의 이름과 월급을 출력하시오.
A. select empno, sal from emp where sal >= 2000;
notion image
 
Q3.
월급이 2500이하인 사원들의 이름과 월급을 출력하는데, 월급이 높은 사원부터 출력하시오.
A1. select ename, sal from emp where sal <= 2500 order by sal desc; A2. select ename, sal 월급 from emp where sal <= 2500 order by 월급 desc;
notion image
 
Q4.
연봉이 10000 이상인 사원들의 이름과 연봉을 출력하는데, 연봉이 높은 사원부터 출력하시오.
A.select ename, sal*12 as 연봉 from emp where sal*12 >= 10000 order by 연봉 desc; ##별칭 사용 가능
notion image
 
 
 
 

008 WHERE절 배우기 2(문자와 날짜 검색)

📖
문자와 날짜 검색 주의사항 WHERE절 검색조건에서 문자와 날짜를 검색할때는 반드시 양쪽에 싱글 쿼테이션(’) 마크를 둘러줘야함.(없을경우 에러 발생)
 
!싱글 쿼테이션 마크 내에서는 대소문자가 구분됨! 단 MySQL은 대소문자 구분하지 않는 것이 기본값. 원하면 대소문자 구분하게 설정 변경 가능
 
날짜 데이터를 입력하거나 검색할 때 년도를 4자리로 검색하는게 바람직함(명확하게 하기 위함)
 
  • 날짜 형식
    • 한국식 날짜 형식 : 년도/월/일
    • 미국식 날짜 형식 : 일/월/년도
싱글 쿼테이션 마크를 둘러준다는 것
오라클에게 ‘싱글 쿼테이션 마크 안에 있는 것은 문자 또는 숫자이다’ 라고 알려주는 것이다
(더블 쿼테이션 마크”는 별칭 사용시에만 사용한다) 예제.
select ename, job from emp where job = 'SALESMAN'; ##where절에 [컬럼명]을 select절에 입력한 순서대로 하여 숫자로 ##입력하는 것은에러 발생함
 
Q1.
사원 이름이 SCOTT인 사원의 이름과 월급과 직업을 출력하시오.
A. select ename, sal, job from emp where ename = 'SCOTT';
notion image
 
Q2.
우리반에서 성별이 여자인 학생들의 이름과 성별과 주소를 출력하시오.
A. select ename, gender,address from emp18 where gender = '여';
 
Q3.
입사일이 81년 11월 17일에 입사한 사원들의 이름과 입사일을 출력하시오.
emp 테이블의 hiredate 데이터 형식 확인 후 출력 A. select ename, hiredate from emp where hiredate = '81/11/17';
notion image
 
Q4.
통신사가 kt인 학생들의 이름과 통신사를 출력하시오.
A. select ename, telecom from emp18 where telecom = 'kt'; ##이 경우 소문자로 입력된 데이터만 출력됨.
 
 
Q5.
직업이 SALESMAN이 아닌 사원들의 이름과 직업을 출력하시오.
MySQL A. select ename, job from emp where job !='salesman'; Oracle A. select ename, job from emp where job !='SALESMAN';
notion image
 
Q6.
부서번호가 10번이 아닌 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
select ename, sal, deptno from emp where deptno != 10 order by sal desc;
notion image

009 산술 연산자 배우기(*, /, +, -)

📖
오라클 연산자 3가지 1. 산술 연산자 : (곱하기), /(나누기), +(더하기), -(빼기) 2. 비교 연산자 : 〉, 〈, 〉=,〈=, =, !=,〈〉, ^= 3. 논리 연산자 : and, or, not 예제. 이름, 연봉(sal*12)을 출력하시오
select ename, sal*12 as 연봉 from emp;
 
 

문제풀며 익히기

 
Q1.
연봉이 36000 이상인 사원들의 이름과 연봉을 출력하시오
select ename, sal * 12 연봉 from emp where sal * 12 >= 36000;
 
 

010 비교 연산자 배우기 1(〉, 〈, 〉=,〈=, =, !=,〈〉, ^=)

📖
비교 연산자 : 〉, 〈, 〉=,〈=, =, !=,〈〉, ^= = 같다
>크다
<작다
>= 크거나 같다
<= 작거나 같다
!= , <>, ^= 같지 않다 예제
우리반 테이블에서 성별이 남자인 학생들의 모든 컬럼의 데이터를 출력하시오
select * from emp18 where gender = '남';
 
 
 

문제풀며 익히기

 
Q1.
사원테이블에서 월급이 3000이 아닌 사람들의 이름과 월급과 직업을 출력하는데, 입사일이 최근에 입사한 사원부터 출력하시오.
A. select ename, sal, job from emp where sal <> 3000 order by hiredate desc; ## select 절에 [컬럼명]이 없는 컬럼으로 order by 가능
notion image
 
Q2.
부서번호가 20번인 사원들의 이름과 직업과 월급을 출력하는데, 직업은 ascending하게 출력하고, 직업을 ascending 하게 출력한 것을 기준으로 두고 월급을 descending 하게 출력하시오.
A. select ename, job, sal from emp order by job, sal desc;
notion image
 
 

011 비교 연산자 배우기 2(BETWEEN AND)

📖
기타 비교연산자 4가지 1. BETWEEN A AND B A와 B 사이의 데이터를 검색할 때 사용하는 연산자 A와 B의 값도 포함되어져서 검색되는 것
ex) select ename, sal from emp where sal between 1000 and 3000; ##아래 sql문과 같은 의미 ex) select ename, sal from emp where sal >= 1000 and sal <= 3000; ##notbetween 앞에 붙임 ex) select ename, sal from emp where sal not between 1000 and 3000;
2. LIKE
- 텍스트 데이터의 일부를 검색할 때 사용하는 연산자
3. IN
 
4. IS NULL
- NULL 값을 조건으로 찾을 때 사용
 
 

문제풀며 익히기

 
Q1.
입사일이 81/01/01 부터 81/12/31 사이에 입사한 사원들의 이름과 입사일을 출력하시오.
A. select ename, hiredate from emp where hiredate between '81/01/01' and '81/12/31';
notion image
 
Q2.
우리반 테이블에서 1990년대에 태어난 학생들의 이름과 생일을 출력하시오.
A. select ename, birth from emp18 where birth between '1990/01/01' and '1999/12/31';
 
Q3.
월급이 1000에서 3000사이가 아닌 사원들의 이름과 월급을 출력하시오
A. select ename, sal from emp where sal not between 1000 and 3000; #영어문장에서도 not을 전치사 앞에 쓰듯이 ##SQL에서도 not을 연산자 앞에 사용하면 됨. ###위의 구문과 아래의 구문이 동일함 A2. select ename, sal from emp where sal < 1000 or sal >3000;
notion image
 
Q4.
사원 테이블에서 1981년도에 입사하지 않은 사원들의 이름과 입사일을 출력하시오.
A. select ename, hiredate from emp where hiredate not between '1981/01/01' and '1981/12/31';
notion image
 
 

012 비교 연산자 배우기 3(LIKE)

📖
LIKE
- 텍스트 데이터의 일부를 검색할 때 사용하는 연산자
  • 와일드 카드(%)
    • % 는 wild card 라고 한다 wild card 의 의미는 이 자리에 뭐가 와도 관계없다. 그 수가 몇 개건 관계없다는 뜻입니다.
       
      1. 특정 컬럼에서 특정 문자로 시작하는 것 출력 select [컬럼명] from [테이블명] where [컬럼명] like '[문자]%'; 2. 특정 컬럼에서 특정 문자로 끝나는 것 출력 select [컬럼명] from [테이블명] where [컬럼명] like '%[문자]'; 3. 특정 컬럼에서 특정 문자를 포함하는 것 출력 select [컬럼명] from [테이블명] where [컬럼명] like '%[문자]%'; 4. notlike 앞에 붙임 select [컬럼명] from [테이블명] where [컬럼명] not like '%[문자]%';
예제 1. 사원테이블에서 이름이 S로 시작하는 사원들의 이름과 월급을 출력하시오.
select ename, sal from emp where ename like 'S%"; #like는 ~처럼, ~일 것 같은 이란 영어 뜻으로 ##~로 시작할 거 같은 으로 해석하면 됨.
 
  • 와일드 카드 (_)언더바
    • _(언더바) 1개는 자릿수 한 개를 나타내고, 이 자리에 뭐가 와도 관계없다는 의미
       
      언더바 1개는 자릿수 한 개를 나타내며 이 자리에 뭐가 와도 관계없다는 뜻인 반면 %(와일드 카드) 는 이 자리에 뭐가 와도 관계없고 그 개수가 몇 개가 되어도 관계없다는 뜻
      select ename from emp where ename like '_M%'; ##두번째 철자가 M으로 시작하는 사람의 이름 출력
       
  • escape 옵션 설명
    • select ename from emp where ename like '_[특정문자]%%' escape '[특정문자]'; ex) select ename from emp where ename like '_m%%' escape 'm'; ex) select ename from emp where ename like '_m%m%%' escape 'm';
      위와 같이 escape [특정문자]는
      특정문자 바로 다음에 나오는 %는 특수문자 %라는 것을 알려주는 것이다.
      특수문자나 공백문자등을 like로 검색하고 싶다면, escape 옵션을 사용해야함
 
 
 
 

문제풀며 익히기

 
Q1.
사원 테이블에서 이름의 끝 철자가 T로 끝나는 사원들의 이름과 월급을 출력하시오.
A. select ename, sal from emp where ename like '%T'; # 등호를 사용하면 %가 와일드카드가 아닌 그냥 특수문
notion image
 
Q2.
우리반에서 성씨가 김씨인 학생들의 이름과 주소를 출력하시오.
A. select ename, address from emp18 where ename like '김%';
 
Q3.
우리반 테이블에서 성씨가 김씨가 아닌 학생들의 이름과 주소를 출력하시오.
A. select ename, address from emp18 where ename not like '김%';
 
Q4.
우리반 테이블에서 전공에 ‘경영’을 포함하고 있는 학생들의 이름과 전공을 출력하시오.
A. select ename, major from emp18 where major like '%경영%';
 
Q5.
우리반 테이블에서 naver메일을 사용하는 학생들의 이름과 이메일을 출력하시오.
A. select ename, email from emp18 where email like '%naver%';
 
Q6.
#데이터 추가 후 진행 insert into emp(empno, ename, sal) values(1234, 'A%B', 3400); commit;
이름에 두번째 철자가 %인 사원의 이름을 출력하시오.
A. select ename from emp where ename like '_m%%' escape 'm';
notion image
 
 
 
Q7.
이름에 두번째 철자가 M인 사원들의 이름을 출력하시오.
A. select ename from emp where ename like '_M%';
notion image
 
Q 8.
이름의 세번째 철자가 L인 사원들의 이름을 출력하시오.
A. select ename from emp where ename like '__L%';
notion image
 
Q 9.
##값 추가하고 시작 insert into emp(empno, ename, sal) values( 2345, 'A%%B', 4500); commit;
이름의 두번째 철자와 세번재 철자가 %인 사원의 이름을 출력하시오.
A. select ename from emp where ename like '_m%m%%' escape 'm';
notion image
 
Q 10.
우리반 테이블에서 서울시에서 거주하는 학생들의 이름과 주소를 출력하시오.
A. select ename, address from emp18 where address like '서울시%';
notion image
 
Q 11.
우리반 테이블에서 생일이 11월인 학생들의 이름과 생일을 출력하시오.
A. select ename, birth from emp18 where birth like '__/11/__'; #양쪽에 언더바 2개 A2. select ename, birth from emp18 where birth like '%/11/%'; A3. select ename, birth from emp18 where birth like '__/11/%'; A4. select ename, birth from emp18 where birth like '___11___'; #슬래쉬 포함하여 언더바 3
 
Q 12.
우리반에서 성씨가 김씨, 이씨, 박씨인 학생들의 이름과 주소를 출력하시오
A. select ename, address from emp18 where ename like '김%' or ename like '이%' or ename like '박%';
notion image
 

013 비교 연산자 배우기 4(IS NULL)

📖
비교 연산자 IS NULL 출력되는 결과에서 비어있는 부분을 결측치라고 하는데, 오라클 용어로는 null값이라고 함.
  • null값의 의미
    • 데이터가 없는 상태
    • 알 수 없는 값(unknown)
select ename, comm from emp where comm is null;
 
  • IS NOT NULL
    • select ename, comm from emp where comm is not null;
 

문제풀며 익히기

 
Q1.
커미션이 null인 사원들의 이름과 커미션을 출력하시오.
Error. select ename, comm from emp where comm = null; --- 출력되지 않음 ---
위의 결과가 출력되지 않는 이유는 null이 알 수 없는 값이기 때문에 = (이퀄)로는 비교할 수 없어서 출력되지 않는다.
 
따라서 다음과 같이 is null 사용해야함
A. select ename, comm from emp where comm is null;
notion image
 
Q2.
커미션이 null이 아닌 사원들의 이름과 커미션을 출력하시오.
A. select ename, comm from emp where comm is not null;
notion image
 
 
 
 

014 비교 연산자 배우기 5(IN)

📖
비교 연산자 IN 여러개의 데이터를 한번에 검색할 때 IN을 사용함 예제)
사원번호가 7788, 7902, 7369 번인 사원들의 사원번호와 이름을 조회하시오
1. IN사용 select empno, ename from emp where empno in ( 7788, 7902, 7369 ); 2. IN을 사용하지 않고 수행 select empno, ename from emp where empno = 7788 or empno = 7902 or empno = 7369; 3. NOT IN select empno, ename from emp where empno not in ( 7788, 7902, 7369 );
 

문제풀며 익히기

 
Q1.
직업이 SALESMAN, ANANLYST인 사원들의 이름과 직업을 출력하시오.
Oracle A. select ename, job from emp where job in('SALESMAN','ANALYST'); ##대소문자 구분 MySQL A. select ename, job from emp where job in('salesman','analyst');
notion image
 
Q 2.
부서번호가 10번, 20번이 아닌 사원들의 이름과 부서번호를 출력하시오.
A. select ename, deptno from emp where deptno not in (10, 20)
notion image
 
Q3. (복습문제)
부서번호가 10번, 20번인 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
A. select ename, sal, deptno from emp where deptno in (10, 20) order by sal desc;
notion image
 
 
 

006 데이터를 정렬해서 출력하기(ORDER BY)

📖
Order By 절 - Order By절을 이용하면 데이터를 정렬해서 출력할 수 있다 - select 문에서 맨 마지막에 서술되는 구문이며 실행도 맨 마지막에 실행되는 구문이다
- select 절에 [컬럼명]이 없는 컬럼으로도 order by 가능
(ocp와 sqld 시험의 객관식 예제로 출제됨)
-정렬 시 0, 1, 2 … 순서가 아니라 1,2,3,~,0 순서임
-asc 정렬시 : null값이 가장 마지막, 공백 값이 가장 우선됨
select [컬럼명],[컬럼명] from [테이블명] order by [컬럼명] [옵션]; ##select 절에 [컬럼명]이 없는 컬럼으로 order by 가능
옵션
  • asc : 오름차순으로 출력, 낮은 값에서 높은 값 순으로 출력
    • (옵션 생략시 기본값 오름차순)
  • desc :내림차순으로 출력, 높은 값에서 낮은 값 순으로 출력
컬럼명 대신 숫자로 표기하여 정렬하기
notion image
위와 같이 select절에 입력한 컬럼명을 왼쪽부터 차례로 1,2,3 순서를 부여
job은 2번이 부여되었으니 2 asc는 job을 기준으로 오름차순 정렬한다. 순서 알아보기
  • 코딩 순서 : select → from → order by
  • oracle의 실행 순서: from → select → order by
 

문제풀며 익히기

Q1.
이름과 월급을 출력하는데 월급이 낮은 사원부터 높은 사원으로 출력하시오.
A. select ename, sal from emp order by sal asc;
notion image
 
Q2.
이름과 월급을 출력하는데 월급이 높은 사원부터 출력되게하시오.
A. select ename, sal from emp order by sal desc;
notion image
 
Q3.
이름과 입사일을 출력하는데, 최근에 입사한 사원부터 출력되게하시오
A. select ename, hiredate from emp order by hiredate desc;
notion image
 
Q4.
우리반 테이블(emp18)에서 이름과 생일(birth)을 출력하는데, ㄱㄴㄷㄹ 순서로 정렬해서 이름을 출력하시오
A. select ename, birth from emp18 order by ename (asc); #asc생략 가
 
Q5.
우리반 테이블(emp18)에서 이름과 생일(birth)을 출력하는데 생일을 ascending 하게 출력하시오.
A. select ename, birth from emp18 order by birth (asc); #asc생략 가능
 
Q6.
사원테이블에서 이름과 부서번호와 월급을 출력하는데, 부서번호를 ascending하게 출력하시오
A. select ename, deptno, sal from emp order by deptno (asc);
notion image
 
Q7.
위의 결과를 다시 출력하는데, 부서번호를 ascending하게 출력하고 부서번호를 ascending하게 출력된것을 기준으로 월급을 descending하게 출력하시오
A. select ename, deptno, sal from emp order by deptno (asc), sal desc;
notion image
 
Q8.
이름, 직업, 입사일을 출력하는데, 직업을 ABCD 순서대로 정렬해서 출력작업을 ABCD 순서대로 정렬해서 출력한 것을 기준으로 두고 입사일을 먼저 입사한 사원부터 출력되게하시오.
A1. select ename, job, hiredate from emp order by job (asc), hiredate desc; #asc 생략 가능 A2. select ename, job, hiredate from emp order by 2 asc, 3 desc;
notion image
 
Q9.
이름, 직업, 월급+300*2를 출력하는데, 월급+300*2의 값이 높은 사원부터 출력하시오.(단, 월급+300*2의 컬럼명은 ‘보너스’로 출력)
A1. select ename, job, sal+300*2 (as) 보너스 #as 생략가능 from emp order by sal+300*2 desc; A2. select ename, job, sal+300*2 보너스 from emp order by 3 desc; A3. select ename, job, sal+300*2 보너스 from emp order by 보너스 desc;
notion image
 
Q10.
우리반 테이블에서 이름과 주소를 출력하는데, 주소를 ascending하게 출력하고, 컬럼명을 한글로 ‘이름’,’주소’로 출력되게 하시오.
A. select ename 이름, address 주소 from emp18 order by address;
 
 
 

007 WHERE절 배우기 1(숫자 데이터 검색)

📖
WHERE절 특정 조건에 해당하는 데이터만 검색할 수 있다 문법
select [컬럼명] from [테이블명] where [검색조건];
 
예제1
emp테이블에서 월급이 3000인 사원의 사원명과, 월급 출력
select enmae, sal from emp where sal = 3000;
 
비교연산자 미리보기
= 같다
>크다
<작다
>= 크거나 같다
<= 작거나 같다
!= , <>, ^= 같지 않다
 
순서 알아보기
  • 코딩 순서 : select → from →where → order by
  • oracle의 실행 순서: from → where → select → order by
  • 때문에 아래와 같은 상황에서 에러
    • 예제2
      select ename, sal * 12 연봉 from emp where 연봉 >= 36000; ##에러발생. 별칭사용불가
 

문제풀며 익히기

Q1.
사원번호가 7788인 사원의 사원번호와 이름과 월급을 조회하시오.
A. select empno, ename, sal from emp where empno = 7788;
notion image
 
Q2.
월급이 2000이상인 사원들의 이름과 월급을 출력하시오.
A. select empno, sal from emp where sal >= 2000;
notion image
 
Q3.
월급이 2500이하인 사원들의 이름과 월급을 출력하는데, 월급이 높은 사원부터 출력하시오.
A1. select ename, sal from emp where sal <= 2500 order by sal desc; A2. select ename, sal 월급 from emp where sal <= 2500 order by 월급 desc;
notion image
 
Q4.
연봉이 10000 이상인 사원들의 이름과 연봉을 출력하는데, 연봉이 높은 사원부터 출력하시오.
A.select ename, sal*12 as 연봉 from emp where sal*12 >= 10000 order by 연봉 desc; ##별칭 사용 가능
notion image
 
 
 
 

008 WHERE절 배우기 2(문자와 날짜 검색)

📖
문자와 날짜 검색 주의사항 WHERE절 검색조건에서 문자와 날짜를 검색할때는 반드시 양쪽에 싱글 쿼테이션(’) 마크를 둘러줘야함.(없을경우 에러 발생)
 
!싱글 쿼테이션 마크 내에서는 대소문자가 구분됨! 단 MySQL은 대소문자 구분하지 않는 것이 기본값. 원하면 대소문자 구분하게 설정 변경 가능
 
날짜 데이터를 입력하거나 검색할 때 년도를 4자리로 검색하는게 바람직함(명확하게 하기 위함)
 
  • 날짜 형식
    • 한국식 날짜 형식 : 년도/월/일
    • 미국식 날짜 형식 : 일/월/년도
싱글 쿼테이션 마크를 둘러준다는 것
오라클에게 ‘싱글 쿼테이션 마크 안에 있는 것은 문자 또는 숫자이다’ 라고 알려주는 것이다
(더블 쿼테이션 마크”는 별칭 사용시에만 사용한다) 예제.
select ename, job from emp where job = 'SALESMAN'; ##where절에 [컬럼명]을 select절에 입력한 순서대로 하여 숫자로 ##입력하는 것은에러 발생함
 
Q1.
사원 이름이 SCOTT인 사원의 이름과 월급과 직업을 출력하시오.
A. select ename, sal, job from emp where ename = 'SCOTT';
notion image
 
Q2.
우리반에서 성별이 여자인 학생들의 이름과 성별과 주소를 출력하시오.
A. select ename, gender,address from emp18 where gender = '여';
 
Q3.
입사일이 81년 11월 17일에 입사한 사원들의 이름과 입사일을 출력하시오.
emp 테이블의 hiredate 데이터 형식 확인 후 출력 A. select ename, hiredate from emp where hiredate = '81/11/17';
notion image
 
Q4.
통신사가 kt인 학생들의 이름과 통신사를 출력하시오.
A. select ename, telecom from emp18 where telecom = 'kt'; ##이 경우 소문자로 입력된 데이터만 출력됨.
 
 
Q5.
직업이 SALESMAN이 아닌 사원들의 이름과 직업을 출력하시오.
MySQL A. select ename, job from emp where job !='salesman'; Oracle A. select ename, job from emp where job !='SALESMAN';
notion image
 
Q6.
부서번호가 10번이 아닌 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
select ename, sal, deptno from emp where deptno != 10 order by sal desc;
notion image

009 산술 연산자 배우기(*, /, +, -)

📖
오라클 연산자 3가지 1. 산술 연산자 : (곱하기), /(나누기), +(더하기), -(빼기) 2. 비교 연산자 : 〉, 〈, 〉=,〈=, =, !=,〈〉, ^= 3. 논리 연산자 : and, or, not 예제. 이름, 연봉(sal*12)을 출력하시오
select ename, sal*12 as 연봉 from emp;
 
 

문제풀며 익히기

 
Q1.
연봉이 36000 이상인 사원들의 이름과 연봉을 출력하시오
select ename, sal * 12 연봉 from emp where sal * 12 >= 36000;
 
 

010 비교 연산자 배우기 1(〉, 〈, 〉=,〈=, =, !=,〈〉, ^=)

📖
비교 연산자 : 〉, 〈, 〉=,〈=, =, !=,〈〉, ^= = 같다
>크다
<작다
>= 크거나 같다
<= 작거나 같다
!= , <>, ^= 같지 않다 예제
우리반 테이블에서 성별이 남자인 학생들의 모든 컬럼의 데이터를 출력하시오
select * from emp18 where gender = '남';
 
 
 

문제풀며 익히기

 
Q1.
사원테이블에서 월급이 3000이 아닌 사람들의 이름과 월급과 직업을 출력하는데, 입사일이 최근에 입사한 사원부터 출력하시오.
A. select ename, sal, job from emp where sal <> 3000 order by hiredate desc; ## select 절에 [컬럼명]이 없는 컬럼으로 order by 가능
notion image
 
Q2.
부서번호가 20번인 사원들의 이름과 직업과 월급을 출력하는데, 직업은 ascending하게 출력하고, 직업을 ascending 하게 출력한 것을 기준으로 두고 월급을 descending 하게 출력하시오.
A. select ename, job, sal from emp order by job, sal desc;
notion image
 
 

011 비교 연산자 배우기 2(BETWEEN AND)

📖
기타 비교연산자 4가지 1. BETWEEN A AND B A와 B 사이의 데이터를 검색할 때 사용하는 연산자 A와 B의 값도 포함되어져서 검색되는 것
ex) select ename, sal from emp where sal between 1000 and 3000; ##아래 sql문과 같은 의미 ex) select ename, sal from emp where sal >= 1000 and sal <= 3000; ##notbetween 앞에 붙임 ex) select ename, sal from emp where sal not between 1000 and 3000;
2. LIKE
- 텍스트 데이터의 일부를 검색할 때 사용하는 연산자
3. IN
 
4. IS NULL
- NULL 값을 조건으로 찾을 때 사용
 
 

문제풀며 익히기

 
Q1.
입사일이 81/01/01 부터 81/12/31 사이에 입사한 사원들의 이름과 입사일을 출력하시오.
A. select ename, hiredate from emp where hiredate between '81/01/01' and '81/12/31';
notion image
 
Q2.
우리반 테이블에서 1990년대에 태어난 학생들의 이름과 생일을 출력하시오.
A. select ename, birth from emp18 where birth between '1990/01/01' and '1999/12/31';
 
Q3.
월급이 1000에서 3000사이가 아닌 사원들의 이름과 월급을 출력하시오
A. select ename, sal from emp where sal not between 1000 and 3000; #영어문장에서도 not을 전치사 앞에 쓰듯이 ##SQL에서도 not을 연산자 앞에 사용하면 됨. ###위의 구문과 아래의 구문이 동일함 A2. select ename, sal from emp where sal < 1000 or sal >3000;
notion image
 
Q4.
사원 테이블에서 1981년도에 입사하지 않은 사원들의 이름과 입사일을 출력하시오.
A. select ename, hiredate from emp where hiredate not between '1981/01/01' and '1981/12/31';
notion image
 
 

012 비교 연산자 배우기 3(LIKE)

📖
LIKE
- 텍스트 데이터의 일부를 검색할 때 사용하는 연산자
  • 와일드 카드(%)
    • % 는 wild card 라고 한다 wild card 의 의미는 이 자리에 뭐가 와도 관계없다. 그 수가 몇 개건 관계없다는 뜻입니다.
       
      1. 특정 컬럼에서 특정 문자로 시작하는 것 출력 select [컬럼명] from [테이블명] where [컬럼명] like '[문자]%'; 2. 특정 컬럼에서 특정 문자로 끝나는 것 출력 select [컬럼명] from [테이블명] where [컬럼명] like '%[문자]'; 3. 특정 컬럼에서 특정 문자를 포함하는 것 출력 select [컬럼명] from [테이블명] where [컬럼명] like '%[문자]%'; 4. notlike 앞에 붙임 select [컬럼명] from [테이블명] where [컬럼명] not like '%[문자]%';
예제 1. 사원테이블에서 이름이 S로 시작하는 사원들의 이름과 월급을 출력하시오.
select ename, sal from emp where ename like 'S%"; #like는 ~처럼, ~일 것 같은 이란 영어 뜻으로 ##~로 시작할 거 같은 으로 해석하면 됨.
 
  • 와일드 카드 (_)언더바
    • _(언더바) 1개는 자릿수 한 개를 나타내고, 이 자리에 뭐가 와도 관계없다는 의미
       
      언더바 1개는 자릿수 한 개를 나타내며 이 자리에 뭐가 와도 관계없다는 뜻인 반면 %(와일드 카드) 는 이 자리에 뭐가 와도 관계없고 그 개수가 몇 개가 되어도 관계없다는 뜻
      select ename from emp where ename like '_M%'; ##두번째 철자가 M으로 시작하는 사람의 이름 출력
       
  • escape 옵션 설명
    • select ename from emp where ename like '_[특정문자]%%' escape '[특정문자]'; ex) select ename from emp where ename like '_m%%' escape 'm'; ex) select ename from emp where ename like '_m%m%%' escape 'm';
      위와 같이 escape [특정문자]는
      특정문자 바로 다음에 나오는 %는 특수문자 %라는 것을 알려주는 것이다.
      특수문자나 공백문자등을 like로 검색하고 싶다면, escape 옵션을 사용해야함
 
 
 
 

문제풀며 익히기

 
Q1.
사원 테이블에서 이름의 끝 철자가 T로 끝나는 사원들의 이름과 월급을 출력하시오.
A. select ename, sal from emp where ename like '%T'; # 등호를 사용하면 %가 와일드카드가 아닌 그냥 특수문
notion image
 
Q2.
우리반에서 성씨가 김씨인 학생들의 이름과 주소를 출력하시오.
A. select ename, address from emp18 where ename like '김%';
 
Q3.
우리반 테이블에서 성씨가 김씨가 아닌 학생들의 이름과 주소를 출력하시오.
A. select ename, address from emp18 where ename not like '김%';
 
Q4.
우리반 테이블에서 전공에 ‘경영’을 포함하고 있는 학생들의 이름과 전공을 출력하시오.
A. select ename, major from emp18 where major like '%경영%';
 
Q5.
우리반 테이블에서 naver메일을 사용하는 학생들의 이름과 이메일을 출력하시오.
A. select ename, email from emp18 where email like '%naver%';
 
Q6.
#데이터 추가 후 진행 insert into emp(empno, ename, sal) values(1234, 'A%B', 3400); commit;
이름에 두번째 철자가 %인 사원의 이름을 출력하시오.
A. select ename from emp where ename like '_m%%' escape 'm';
notion image
 
 
 
Q7.
이름에 두번째 철자가 M인 사원들의 이름을 출력하시오.
A. select ename from emp where ename like '_M%';
notion image
 
Q 8.
이름의 세번째 철자가 L인 사원들의 이름을 출력하시오.
A. select ename from emp where ename like '__L%';
notion image
 
Q 9.
##값 추가하고 시작 insert into emp(empno, ename, sal) values( 2345, 'A%%B', 4500); commit;
이름의 두번째 철자와 세번재 철자가 %인 사원의 이름을 출력하시오.
A. select ename from emp where ename like '_m%m%%' escape 'm';
notion image
 
Q 10.
우리반 테이블에서 서울시에서 거주하는 학생들의 이름과 주소를 출력하시오.
A. select ename, address from emp18 where address like '서울시%';
notion image
 
Q 11.
우리반 테이블에서 생일이 11월인 학생들의 이름과 생일을 출력하시오.
A. select ename, birth from emp18 where birth like '__/11/__'; #양쪽에 언더바 2개 A2. select ename, birth from emp18 where birth like '%/11/%'; A3. select ename, birth from emp18 where birth like '__/11/%'; A4. select ename, birth from emp18 where birth like '___11___'; #슬래쉬 포함하여 언더바 3
 
Q 12.
우리반에서 성씨가 김씨, 이씨, 박씨인 학생들의 이름과 주소를 출력하시오
A. select ename, address from emp18 where ename like '김%' or ename like '이%' or ename like '박%';
notion image
 

013 비교 연산자 배우기 4(IS NULL)

📖
비교 연산자 IS NULL 출력되는 결과에서 비어있는 부분을 결측치라고 하는데, 오라클 용어로는 null값이라고 함.
  • null값의 의미
    • 데이터가 없는 상태
    • 알 수 없는 값(unknown)
select ename, comm from emp where comm is null;
 
  • IS NOT NULL
    • select ename, comm from emp where comm is not null;
 

문제풀며 익히기

 
Q1.
커미션이 null인 사원들의 이름과 커미션을 출력하시오.
Error. select ename, comm from emp where comm = null; --- 출력되지 않음 ---
위의 결과가 출력되지 않는 이유는 null이 알 수 없는 값이기 때문에 = (이퀄)로는 비교할 수 없어서 출력되지 않는다.
 
따라서 다음과 같이 is null 사용해야함
A. select ename, comm from emp where comm is null;
notion image
 
Q2.
커미션이 null이 아닌 사원들의 이름과 커미션을 출력하시오.
A. select ename, comm from emp where comm is not null;
notion image
 
 
 
 

014 비교 연산자 배우기 5(IN)

📖
비교 연산자 IN 여러개의 데이터를 한번에 검색할 때 IN을 사용함 예제)
사원번호가 7788, 7902, 7369 번인 사원들의 사원번호와 이름을 조회하시오
1. IN사용 select empno, ename from emp where empno in ( 7788, 7902, 7369 ); 2. IN을 사용하지 않고 수행 select empno, ename from emp where empno = 7788 or empno = 7902 or empno = 7369; 3. NOT IN select empno, ename from emp where empno not in ( 7788, 7902, 7369 );
 

문제풀며 익히기

 
Q1.
직업이 SALESMAN, ANANLYST인 사원들의 이름과 직업을 출력하시오.
Oracle A. select ename, job from emp where job in('SALESMAN','ANALYST'); ##대소문자 구분 MySQL A. select ename, job from emp where job in('salesman','analyst');
notion image
 
Q 2.
부서번호가 10번, 20번이 아닌 사원들의 이름과 부서번호를 출력하시오.
A. select ename, deptno from emp where deptno not in (10, 20)
notion image
 
Q3. (복습문제)
부서번호가 10번, 20번인 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
A. select ename, sal, deptno from emp where deptno in (10, 20) order by sal desc;
notion image
 
 
 

015 논리 연산자 배우기(AND, OR, NOT)

📖
예제
1. 월급이 1000 이상이고 직업이 SALESMAN 인 사원들의 이름과 월급과 직업을 출력하시오 select ename, sal, job from emp where sal >= 1000 and job = 'SALESMAN'; 2. 월급이 1000 이상이거나 직업이 SALESMAN 인 사원들의 이름과 월급과 직업을 출력하시오 select ename, sal, job from emp where sal >= 1000 or job = 'SALESMAN';
값1
연산자
값2
결과
1
True
and
True
True
2
True
and
False
False
3
True
or
True
True
4
True
or
False
True

문제풀며 익히기

 
Q1.
우리반 테이블에서 서울시와 경기도에서 거주하는 학생들의 이름과 주소를 출력하시오!
A. select ename,address from emp18 where address like '%서울%' or address like '%경기%';
 
Q2.
우리반 테이블에서 이메일이 naver 또는 gmail 을 사용하는 학생들의 이름과 이메일을 출력하시오
A. select ename, email from emp18 where email like '%@naver%' or email like '%@gmail%';
 
Q3.
우리반 테이블에서 통신사가 kt 인 학생들의 이름과 통신사를 출력하시오
A1. select ename, telecom from emp18 where telecom in ('kt', 'KT'); A2. select ename, telecom from emp18 where telecom = 'kt' or telecom = 'KT'; A3. select ename, telecom from emp18 where telecom like 'sk%' or telecom 'SK%';
 
 
 
 
 
 
 
 
 
Share article

Hye-Min Son