데이터가 저장되어있는 데이터 베이스 소프트웨어에서 데이터를 검색하고 조작하기 위한 프로그램 언어(가장 중요한 공통 언어라고 볼 수 있음)
SQL의 종류 5가지
Query : 데이터를 검색하는 (DQL, Data Query Language)
SELECT
DML문 (Date Manipulation Language 데이터 조작 언어)
데이터 조작 언어로 테이블의 데이터를 조회, 저장, 수정, 삭제함
DB 내부에 실제로 저장된 데이터들을 다룸
SELECT : 저장된 데이터를 조회
INSERT, UPDATE, DELETE, SELECT
DDL문(Data Definition Language 데이터 정의 언어)
CREATE, ALTER, DROP. TRUNCATE
DCL문(Data Control Language 데이터 제어 언어)
GRANT, REVOKE
TCL문(Transaction Control Language 트랜잭션 제어 언어)
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;
19c와 21c의 차이는 21c는 view가 업데이트 됨. 19c는 안됨.
001 테이블에서 특정 열(COLUMN) 선택하기
📖
관련 개념
테이블(TABLE)이란?
행(ROW.가로)과 열(COLUMN.세로)로 이루어진 데이터 저장 단위
desc(describe)
테이블의 구조 확인 명령어
desc [테이블 명]
describe [테이블 명]
select 절 기본구조
select [컬럼명] from [테이블명];
연습
Q 예제 1. dept테이블 전체를 확인하시오
A.
select*from dept; ——> 테이블 전체를 출력하라는 것
Q 예제 2. emp 테이블의 구조를 확인하시오
A.
desc emp 테이블의 구조를 확인하는 명령
Q 예제 3. 사원테이블에서 이름과 월급 출력
A.
select ename, sal from emp;
[예제2] 사원테이블에서 이름과 직업과 부서번호를 출력
select ename, job, deptno from emp;
[예제3] 사원 테이블에서 사원번호, 이름, 월급, 입사일을 출력
select empno, ename, sal, hiredate from emp;
[예제4] dept 테이블의 구조를 확인하시오
describe dept 혹은 desc dept
[예제5] 부서 테이블에서 부서위치만 출력하시오
select loc from dept;
[예제6] 부서테이블에서 부서위치와 부서명을 출력하시오
select loc, dname from dept;
[예제7] 사원 테이블에서 사원번호, 이름, 월급, 직업, 커미션, 부서번호를 출력하시오
select empno, ename, sal, job, comm, deptno
from emp;
002 테이블에서 모든 열(COLUMN) 출력하기
📖
1. *(asterisk)
select 절에 *을 쓰면 모든 컬럼을 다 보여달라는 것
Q 예제 1. emp 테이블의 모든 열(column)을 출력하시오
A.
select*from emp;
Q 예제2. 사원이름, 직업과 부서번호를 출력하는데 컬럼명을 한글로 출력하시오.
select ename as 사원이름, job as 직업, deptno 부서번호
from emp;
select ename, sal, sal+300*2, sal+300*2as bonus
from emp;
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;
Q. 최재건 학생은 경기도 여주시에 살고 있습니다.
select ename ||' 학생은 '|| address ||'에서 살고 있습니다.'from emp18;
005 중복된 데이터를 제거해서 출력하기(DISTINCT)
📖
DISTINCT
중복된 데이터 제거하는 명령어
단, distinct는 맨 앞에 딱 한번만 사용해야함.
컬럼이 여러개라면 알아서 묶어서 중복 제거됨
selectdistinct [컬럼명],[컬럼명] from [테이블명]
##원하는 컬럼의 중복된 데이터를 제거하여 출력##
Q 예제1.
직업을 출력하는데 중복을 제거해서 출력하시오
selectdistinct job
from emp;
Q 예제 2.
우리반 테이블에서 통신사를 출력하는데 중복을 제거해서 출력하시오.
selectdistinct telecom
from emp18;
Q 예제3.
사원테이블에서 부서번호와 직업을 출력하시오.
select deptno, job
from emp;
단, 중복을 제거하여 출력하시오
selectdistinct deptno, job
from emp;
##이때 distinct는 맨 앞에 한번만 가능
Q 예제4.
우리반 테이블에서 전공(major)를 출력하는데, 중복을 제거하여 출력하시오.
006 데이터를 정렬해서 출력하기(ORDER BY)
📖
Order By 절
- Order By절을 이용하면 데이터를 정렬해서 출력할 수 있다
- select 문에서 맨 마지막에 서술되는 구문이며 실행도 맨 마지막에 실행되는 구문이다
- select 절에 [컬럼명]이 없는 컬럼으로도 order by 가능
(ocp와 sqld 시험의 객관식 예제로 출제됨)
-정렬 시 0, 1, 2 … 순서가 아니라 1,2,3,~,0 순서임
-asc 정렬시 : null값이 가장 마지막, 공백 값이 가장 우선됨
select [컬럼명],[컬럼명]
from [테이블명]
orderby [컬럼명] [옵션];
##select 절에 [컬럼명]이 없는 컬럼으로 orderby 가능
우리반 테이블에서 이름과 주소를 출력하는데, 주소를 ascending하게 출력하고, 컬럼명을 한글로 ‘이름’,’주소’로 출력되게 하시오.
A. select ename 이름, address 주소
from emp18
orderby 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;
Q2.
월급이 2000이상인 사원들의 이름과 월급을 출력하시오.
A. select empno, sal
from emp
where sal >=2000;
Q3.
월급이 2500이하인 사원들의 이름과 월급을 출력하는데, 월급이 높은 사원부터 출력하시오.
A1. select ename, sal
from emp
where sal <=2500orderby sal desc;
A2. select ename, sal 월급
from emp
where sal <=2500orderby 월급 desc;
Q4.
연봉이 10000 이상인 사원들의 이름과 연봉을 출력하는데, 연봉이 높은 사원부터 출력하시오.
A.select ename, sal*12as 연봉
from emp
where sal*12>=10000orderby 연봉 desc; ##별칭 사용 가능
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';
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';
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';
Q6.
부서번호가 10번이 아닌 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
select ename, sal, deptno
from emp
where deptno !=10orderby sal desc;
009 산술 연산자 배우기(*, /, +, -)
📖
오라클 연산자 3가지
1. 산술 연산자 : (곱하기), /(나누기), +(더하기), -(빼기)
2. 비교 연산자 : 〉, 〈, 〉=,〈=, =, !=,〈〉, ^=
3. 논리 연산자 : and, or, not
예제.
이름, 연봉(sal*12)을 출력하시오
select ename, sal*12as 연봉
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 <>3000orderby hiredate desc;
## select 절에 [컬럼명]이 없는 컬럼으로 orderby 가능
Q2.
부서번호가 20번인 사원들의 이름과 직업과 월급을 출력하는데, 직업은 ascending하게 출력하고, 직업을 ascending 하게 출력한 것을 기준으로 두고 월급을 descending 하게 출력하시오.
A. select ename, job, sal
from emp
orderby job, sal desc;
011 비교 연산자 배우기 2(BETWEEN AND)
📖
기타 비교연산자 4가지1. BETWEEN A AND B
A와 B 사이의 데이터를 검색할 때 사용하는 연산자
A와 B의 값도 포함되어져서 검색되는 것
ex)
select ename, sal
from emp
where sal between1000and3000;
##아래 sql문과 같은 의미
ex)
select ename, sal
from emp
where sal >=1000and sal <=3000;
##not은 between 앞에 붙임
ex)
select ename, sal
from emp
where sal notbetween1000and3000;
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';
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 notbetween1000and3000;
#영어문장에서도 not을 전치사 앞에 쓰듯이
##SQL에서도 not을 연산자 앞에 사용하면 됨.
###위의 구문과 아래의 구문이 동일함
A2. select ename, sal
from emp
where sal <1000or sal >3000;
Q4.
사원 테이블에서 1981년도에 입사하지 않은 사원들의 이름과 입사일을 출력하시오.
A. select ename, hiredate
from emp
where hiredate notbetween'1981/01/01'and'1981/12/31';
012 비교 연산자 배우기 3(LIKE)
📖
LIKE
- 텍스트 데이터의 일부를 검색할 때 사용하는 연산자
와일드 카드(%)
% 는 wild card 라고 한다
wild card 의 의미는 이 자리에 뭐가 와도 관계없다. 그 수가 몇 개건 관계없다는 뜻입니다.
1. 특정 컬럼에서 특정 문자로 시작하는 것 출력
select [컬럼명]
from [테이블명]
where [컬럼명] like'[문자]%';
2. 특정 컬럼에서 특정 문자로 끝나는 것 출력
select [컬럼명]
from [테이블명]
where [컬럼명] like'%[문자]';
3. 특정 컬럼에서 특정 문자를 포함하는 것 출력
select [컬럼명]
from [테이블명]
where [컬럼명] like'%[문자]%';
4.not은 like 앞에 붙임
select [컬럼명]
from [테이블명]
where [컬럼명] notlike'%[문자]%';
예제 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';
# 등호를 사용하면 %가 와일드카드가 아닌 그냥 특수문
Q2.
우리반에서 성씨가 김씨인 학생들의 이름과 주소를 출력하시오.
A. select ename, address
from emp18
where ename like'김%';
Q3.
우리반 테이블에서 성씨가 김씨가 아닌 학생들의 이름과 주소를 출력하시오.
A. select ename, address
from emp18
where ename notlike'김%';
Q4.
우리반 테이블에서 전공에 ‘경영’을 포함하고 있는 학생들의 이름과 전공을 출력하시오.
A. select ename, major
from emp18
where major like'%경영%';
Q5.
우리반 테이블에서 naver메일을 사용하는 학생들의 이름과 이메일을 출력하시오.
A. select ename, email
from emp18
where email like'%naver%';
Q6.
#데이터 추가 후 진행
insertinto emp(empno, ename, sal)
values(1234, 'A%B', 3400);
commit;
이름에 두번째 철자가 %인 사원의 이름을 출력하시오.
A. select ename
from emp
where ename like'_m%%'escape'm';
A. select ename
from emp
where ename like'_m%m%%'escape'm';
Q 10.
우리반 테이블에서 서울시에서 거주하는 학생들의 이름과 주소를 출력하시오.
A. select ename, address
from emp18
where address like'서울시%';
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'박%';
013 비교 연산자 배우기 4(IS NULL)
📖
비교 연산자 IS NULL
출력되는 결과에서 비어있는 부분을 결측치라고 하는데,
오라클 용어로는 null값이라고 함.
null값의 의미
데이터가 없는 상태
알 수 없는 값(unknown)
select ename, comm
from emp
where comm isnull;
IS NOT NULL
select ename, comm
from emp
where comm isnotnull;
문제풀며 익히기
Q1.
커미션이 null인 사원들의 이름과 커미션을 출력하시오.
Error. select ename, comm
from emp
where comm =null;
--- 출력되지 않음 ---
위의 결과가 출력되지 않는 이유는 null이 알 수 없는 값이기 때문에 = (이퀄)로는 비교할 수 없어서 출력되지 않는다.
따라서 다음과 같이 is null 사용해야함
A. select ename, comm
from emp
where comm isnull;
Q2.
커미션이 null이 아닌 사원들의 이름과 커미션을 출력하시오.
A. select ename, comm
from emp
where comm isnotnull;
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 =7788or empno =7902or empno =7369;
3.NOTINselect empno, ename
from emp
where empno notin ( 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');
Q 2.
부서번호가 10번, 20번이 아닌 사원들의 이름과 부서번호를 출력하시오.
A. select ename, deptno
from emp
where deptno notin (10, 20)
Q3. (복습문제)
부서번호가 10번, 20번인 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
A. select ename, sal, deptno
from emp
where deptno in (10, 20)
orderby sal desc;
006 데이터를 정렬해서 출력하기(ORDER BY)
📖
Order By 절
- Order By절을 이용하면 데이터를 정렬해서 출력할 수 있다
- select 문에서 맨 마지막에 서술되는 구문이며 실행도 맨 마지막에 실행되는 구문이다
- select 절에 [컬럼명]이 없는 컬럼으로도 order by 가능
(ocp와 sqld 시험의 객관식 예제로 출제됨)
-정렬 시 0, 1, 2 … 순서가 아니라 1,2,3,~,0 순서임
-asc 정렬시 : null값이 가장 마지막, 공백 값이 가장 우선됨
select [컬럼명],[컬럼명]
from [테이블명]
orderby [컬럼명] [옵션];
##select 절에 [컬럼명]이 없는 컬럼으로 orderby 가능
우리반 테이블에서 이름과 주소를 출력하는데, 주소를 ascending하게 출력하고, 컬럼명을 한글로 ‘이름’,’주소’로 출력되게 하시오.
A. select ename 이름, address 주소
from emp18
orderby 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;
Q2.
월급이 2000이상인 사원들의 이름과 월급을 출력하시오.
A. select empno, sal
from emp
where sal >=2000;
Q3.
월급이 2500이하인 사원들의 이름과 월급을 출력하는데, 월급이 높은 사원부터 출력하시오.
A1. select ename, sal
from emp
where sal <=2500orderby sal desc;
A2. select ename, sal 월급
from emp
where sal <=2500orderby 월급 desc;
Q4.
연봉이 10000 이상인 사원들의 이름과 연봉을 출력하는데, 연봉이 높은 사원부터 출력하시오.
A.select ename, sal*12as 연봉
from emp
where sal*12>=10000orderby 연봉 desc; ##별칭 사용 가능
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';
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';
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';
Q6.
부서번호가 10번이 아닌 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
select ename, sal, deptno
from emp
where deptno !=10orderby sal desc;
009 산술 연산자 배우기(*, /, +, -)
📖
오라클 연산자 3가지
1. 산술 연산자 : (곱하기), /(나누기), +(더하기), -(빼기)
2. 비교 연산자 : 〉, 〈, 〉=,〈=, =, !=,〈〉, ^=
3. 논리 연산자 : and, or, not
예제.
이름, 연봉(sal*12)을 출력하시오
select ename, sal*12as 연봉
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 <>3000orderby hiredate desc;
## select 절에 [컬럼명]이 없는 컬럼으로 orderby 가능
Q2.
부서번호가 20번인 사원들의 이름과 직업과 월급을 출력하는데, 직업은 ascending하게 출력하고, 직업을 ascending 하게 출력한 것을 기준으로 두고 월급을 descending 하게 출력하시오.
A. select ename, job, sal
from emp
orderby job, sal desc;
011 비교 연산자 배우기 2(BETWEEN AND)
📖
기타 비교연산자 4가지1. BETWEEN A AND B
A와 B 사이의 데이터를 검색할 때 사용하는 연산자
A와 B의 값도 포함되어져서 검색되는 것
ex)
select ename, sal
from emp
where sal between1000and3000;
##아래 sql문과 같은 의미
ex)
select ename, sal
from emp
where sal >=1000and sal <=3000;
##not은 between 앞에 붙임
ex)
select ename, sal
from emp
where sal notbetween1000and3000;
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';
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 notbetween1000and3000;
#영어문장에서도 not을 전치사 앞에 쓰듯이
##SQL에서도 not을 연산자 앞에 사용하면 됨.
###위의 구문과 아래의 구문이 동일함
A2. select ename, sal
from emp
where sal <1000or sal >3000;
Q4.
사원 테이블에서 1981년도에 입사하지 않은 사원들의 이름과 입사일을 출력하시오.
A. select ename, hiredate
from emp
where hiredate notbetween'1981/01/01'and'1981/12/31';
012 비교 연산자 배우기 3(LIKE)
📖
LIKE
- 텍스트 데이터의 일부를 검색할 때 사용하는 연산자
와일드 카드(%)
% 는 wild card 라고 한다
wild card 의 의미는 이 자리에 뭐가 와도 관계없다. 그 수가 몇 개건 관계없다는 뜻입니다.
1. 특정 컬럼에서 특정 문자로 시작하는 것 출력
select [컬럼명]
from [테이블명]
where [컬럼명] like'[문자]%';
2. 특정 컬럼에서 특정 문자로 끝나는 것 출력
select [컬럼명]
from [테이블명]
where [컬럼명] like'%[문자]';
3. 특정 컬럼에서 특정 문자를 포함하는 것 출력
select [컬럼명]
from [테이블명]
where [컬럼명] like'%[문자]%';
4.not은 like 앞에 붙임
select [컬럼명]
from [테이블명]
where [컬럼명] notlike'%[문자]%';
예제 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';
# 등호를 사용하면 %가 와일드카드가 아닌 그냥 특수문
Q2.
우리반에서 성씨가 김씨인 학생들의 이름과 주소를 출력하시오.
A. select ename, address
from emp18
where ename like'김%';
Q3.
우리반 테이블에서 성씨가 김씨가 아닌 학생들의 이름과 주소를 출력하시오.
A. select ename, address
from emp18
where ename notlike'김%';
Q4.
우리반 테이블에서 전공에 ‘경영’을 포함하고 있는 학생들의 이름과 전공을 출력하시오.
A. select ename, major
from emp18
where major like'%경영%';
Q5.
우리반 테이블에서 naver메일을 사용하는 학생들의 이름과 이메일을 출력하시오.
A. select ename, email
from emp18
where email like'%naver%';
Q6.
#데이터 추가 후 진행
insertinto emp(empno, ename, sal)
values(1234, 'A%B', 3400);
commit;
이름에 두번째 철자가 %인 사원의 이름을 출력하시오.
A. select ename
from emp
where ename like'_m%%'escape'm';
A. select ename
from emp
where ename like'_m%m%%'escape'm';
Q 10.
우리반 테이블에서 서울시에서 거주하는 학생들의 이름과 주소를 출력하시오.
A. select ename, address
from emp18
where address like'서울시%';
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'박%';
013 비교 연산자 배우기 4(IS NULL)
📖
비교 연산자 IS NULL
출력되는 결과에서 비어있는 부분을 결측치라고 하는데,
오라클 용어로는 null값이라고 함.
null값의 의미
데이터가 없는 상태
알 수 없는 값(unknown)
select ename, comm
from emp
where comm isnull;
IS NOT NULL
select ename, comm
from emp
where comm isnotnull;
문제풀며 익히기
Q1.
커미션이 null인 사원들의 이름과 커미션을 출력하시오.
Error. select ename, comm
from emp
where comm =null;
--- 출력되지 않음 ---
위의 결과가 출력되지 않는 이유는 null이 알 수 없는 값이기 때문에 = (이퀄)로는 비교할 수 없어서 출력되지 않는다.
따라서 다음과 같이 is null 사용해야함
A. select ename, comm
from emp
where comm isnull;
Q2.
커미션이 null이 아닌 사원들의 이름과 커미션을 출력하시오.
A. select ename, comm
from emp
where comm isnotnull;
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 =7788or empno =7902or empno =7369;
3.NOTINselect empno, ename
from emp
where empno notin ( 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');
Q 2.
부서번호가 10번, 20번이 아닌 사원들의 이름과 부서번호를 출력하시오.
A. select ename, deptno
from emp
where deptno notin (10, 20)
Q3. (복습문제)
부서번호가 10번, 20번인 사원들의 이름과 월급과 부서번호를 출력하는데, 월급이 높은 사원부터 출력하시오.
A. select ename, sal, deptno
from emp
where deptno in (10, 20)
orderby sal desc;
015 논리 연산자 배우기(AND, OR, NOT)
📖
예제
1. 월급이 1000 이상이고 직업이 SALESMAN 인 사원들의
이름과 월급과 직업을 출력하시오
select ename, sal, job
from emp
where sal >=1000and job ='SALESMAN';
2. 월급이 1000 이상이거나 직업이 SALESMAN 인 사원들의
이름과 월급과 직업을 출력하시오
select ename, sal, job
from emp
where sal >=1000or 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%';