1장 SQL SELECT 문을 사용하여 데이터 검색
SQL 기본2017. 7. 5. 19:47
SQL 1일차-
1장 목차
1. 기본 SELECT문
2. 산술 연산자와 NULL값
3. 컬럼 별칭
4. 연결연산자
5. distinct 키워드
6. describe 명령어
SQLPLUS SYS/ORACLE AS SYSDBA
1.1 기본 SELECT 문
|
Select empno, ename, sal -- 컬럼명
from emp; -- 테이블명
; --> SQL을 종료하고 실행하라!
|
EMPNO |
--> 사원번호
|
ENAME |
--> 사원이름
|
JOB |
---> 사원이름
|
MGR |
---> 매니저
|
HIREDATE |
---> 입사일
|
SAL |
---> 연봉
|
COMM |
---> 커미션
|
DEPTNO |
---> 부서
|
Default 라인은 80 페이지는 14;
문1. 이름 ,월급 ,커피션을 출력하시오
/ [Enter] : 방금 수행한 sql명령어를 다시 수행하고자 할 때
문2. 이름,월급,입사일,부서번호를 출력하시오.
문3. 사원번호, 이름, 부서, 월급, 커미션을 출력하시오
문4.사원(emp)테이블의 모든 컬럼을 다 출력하시오
문5 . 부서(dept) 테이블의 모든 컬럼을 다 출력하시오!
deptno :부서 번호
dname : 부서명
loc : 부서위치
1.2 산술 연산자와 NULL 값
Null 값 : 데이터가 없는 상태 or 알 수 없는 값
문6. 이름,월급,커미션 , 월급 + 커미션을 출력하라
데이터가 비어있는 부분이 널 값(알 수 없는 값)이기 때문에 null 로 출력됨
문7. 이름,월급,커미션 , 월급 + 커미션을 출력하라 커미션이 null인 사원은 0으로 출력하시오
nvl함수를 쓴다.
- NVL함수 ---> NULL값을 제어하는 함수
1.3 컬럼 별칭
문법 : select ename as 이름, sal as 월급 from emp;
↑
as는 생략이 가능하다.
문8 . 이름, 연봉(sal*12)을 출력하는데 컬럼명이 한글로 이름, 연봉이라고 출력
- 컬럼별칭에 더블 쿼테이션 마크를 사용해야하는 경우
1. 컬럼 별칭에 대소문자를 구분하고자 할 때
2. 컬럼 별칭에 공백문자나 특수문자를 출력하고 할때
문9.(점심시간문제)
이름, 월급, 직업 하는데 아래와 같이 결과라 출력되게 하시오
Employee name Salary job <---- 컬럼명
4. 연결연산자 (p 1-20)
* 문법:
select ename || sal
from emp;
select ename || ' 의 월급은 ' || sal
from emp;
문10 . 아래와 같이 결과가 출력되게 하시오
SCOTT의 직업은 ANALYST입니다 14명 쭉~!
1.5 distinct 키워드
문제 11. 직업을 출력하시오 (중복을 제거해서)
select job from emp;
select distinct job from emp;
- 부서번호를 출력하는데 중복을 제거해서 출력하시오
1.6 describe 명령어
테이블의 구조를 확인하는 명령어
테이블에 어떤 컬럼들이 있는지 확인하는 명령어
SQL 언어 SELECT
FROM
|
SQLPLUS 명령어 describe
set
show
|
SQL(Structure Query Language)이란 ?
구조적 질의 언어
데이터 베이스의 데이터를 검색하고 조작하는 언어
mysql oracle 공통적용
sqlplus 오라클 데이터 베이스 툴 언어
오라클 db계정생성 및 권한 부여
SQL>
create user scott
identified by tiger;
설명 : 유저이름은 scott으로 하고 패스워드는 tiger로 해서 계정을 생성하겠다.
SQL> grant dba to scott;
SQL> connect scott/tiger
SQL> show user
다음 부터는
SQL>sqlplus scott/tiger이렇게 접속하세영
SQL>sqlplus scott/tiger이렇게 접속하세영
2장 데이터 제한및 정렬
2장 목차
1. where 절
2. 비교 연산자
3. 논리 연산자
4. 연산자 우선 규칙
5. order by 절
6. 치환변수
7. sqlplus 명령어 : define , Verify 명령어
2.1 where 절
특정 row(행) 들만 검색하게끔 검색조거을 줄 수 있는 절
* 문법
select empono, ename, sal -- 컬럼명
from emp --테이블명
where empno = 7788; --검색조건
문제 13. 월급이 3000 인 사원들의 이름과 월급을 출력하시오
문제 14 .사원의 이름이 scott인 사원의 이름과 직업을 출력하시오 !
select ename, job
from emp
where ename = 'SCOTT';
- 숫자와 달리 문자와 날짜는 양쪽에 싱글 쿼테이션 마크를 사용해서 싱글 쿼테이션 마크 안에 있는 것은 문자나 날자라는 것을 알려줌
문15 .직업이 SALESMAN 인 사원들의 이름과 직업과 월급을 출력하시오
2.2 비교 연산자
>, >= , = , <= , <, != , <>
문16. 월급이 3000 이상인 사원들의 이름과 월급을 출력하시오
select ename, sal
from emp
where sal >= 3000;
문17. 직업이 salesman 이 아닌 사원들의 이름과 직업을 출력하세요
select ename, job
from emp
where job != 'salesman';
※ 같지 않다 : != , <> , ^=
문18 . 입사일이 80/12/09 에 입사한 사원의 이름과 입사일을 출력하시요
select ename, hiredate
from emp
where hiredate = '80/12/09'; ==> 문자와 날짜는 ' ' ( 싱글 쿼테이션마크) 적어줘야 해
2.2 비교 연산자
>, >= , = , <= , <, != , <> , ^=
※기타 비교 연산자
1. between .. and
2. like
3. is null
4. in
문19. 월급이 1000 에서 3000 사이인 사원들의 이름과 월급을 출력하세요
select ename, sal
from emp
where sal between 1000 and 3000;
↑ ↑
낮은값 높은값
select ename , sal
from emp
where sal >= 1000 and sal <= 3000;
======> 와 같은 문장
select ename , sal
from emp
where sal > 1000 and sal < 3000;
문제 20. 월급이 1000에서 3000사이가 아닌 사원들의 이름과 월급을 출력하시오
select ename, sal
from emp
where sal <1000 and sal > 3000;
select ename, sal
from emp
where sal not between 1000 and 3000;
↑ 전치사 앞에 붙인다
문21. 81년도에 입사한 사원들의 이름과 입사일을 출력하시오
select ename, hiredate
from emp
where hiredate between '81/01/01' and '81/12/31';
문22. 이름의 첫글자가 S 로 시작하는 사원들의 이름을 출력하시오
select ename
from emp
where ename like 'S%';
※ % : 와일드 카드 ----> 이 자리에 철자가 몇개가 와도 관계 없고 철자가 무엇이 되든 관계 없다.
Like 를 써야지만 사용가능 ㅎ
문23. 이름의 끝 글자가 T로 끝나는 사원들의 이름을 출력하시오
select ename
from emp
where ename like '%T';
문24. 이름의 두번째 철자가 M 인 사원들의 이름을 출력하시오
select ename
from emp
where ename like '_M%';
문제25. 이름의 세번째 철자가 A 인 사원들의 이름을 출력하시오
select ename
from emp
where ename like '__A%';
문제26. 이름의 첫번째 철자가 S로 시작하지 않는 사원들의 이름을 출력하시오
select ename
from emp
where ename not like 'S%';
문제 27. 아래의 data를 입력하고 이름의 두번째 철자가 % 인 사원들의 이름을 출력하시ㅗㅇ !
insert into emp( empno, ename, sal ) values(1253, 'A%B', 3500);
select ename, sal from emp;
select ename
from emp
where ename like '_m%%' escape 'm';
↑
특수문자 %로 인식시키고싶어
※ like 연산자와 관련된 3가지 키워드
1. % 와일드 카드
2. _ 언더바
3. escape : 특수문자 %와 _ 를 구분해주기 위한 키워드
문28. 아래의 data를 입력하고 이름의 두번째 철자가 % 이고 세번째 철자도 %인 사원의 이름을 출력하시오
insert into emp ( empno, ename ,sal)
values (2991, 'A%%B' , 4500);
select ename from emp;
select ename
from emp
where ename like '_m%m%%' escape 'm';
문29. 81년도에 입사한 사원들의 이름과 입사일을 출력하시오 (like 연산자를 사용하여)
select ename, hiredate
from emp
where hiredate like '81%';
문30. 11에 입사한 사원들의 이름과 입사일을 출력하시오
select ename, hiredate
from emp
where hiredate like '%11';
문31. 12월에 입사한 사원들의 이름과 입사일을 출력하시오
select ename, hiredate
from emp
where hiredate like '__/12%';
문32. 커미션이 null 인 사원들의 이름과 커미션을 출력하시오
select ename, comm
from emp
where comm is null ;
문33. 커미션이 null 이 아닌 사원들의 이름과 커미션을 출력하시오
select ename, comm
from emp
where comm is not null ;
* 기타 비교 연산자
1. between .. and
2. like
3. is null
문34. 사원번호가 7788, 7902, 7369 번인 사원들의 사원번호와 사원이름을 출력하시오
select empno , ename
from emp
where empno = '7788'or empno ='7902' or empno ='7369';
같은 표현으로
select empno , ename
from emp
where empno in (7788, 7902,7369);
문35. 직업이 SALESMAN, ANALYST 가 아닌 사원들의 이름과 직업을 출력하시오
select empno , job
from emp
where job not in ('SALESMAN', 'ANALYST');
연산자 3가지
- 산술연산자 : * / + -
- 비교연산자 : >, < , >= ,<= ,= , != ,<> ^=
between .. and , like , in ,is null
- 논리연산자: and , or , not
문36. 직업이 SALESMAN 이고 월급이 1000 이상인 사원들의 이름과 월급과 직업을 출력하시오
select ename ,sal, job
from emp
where job ='SALESMAN' and sal >= 1000;
진리연산표
AND |
T |
F |
Null |
T |
T |
F |
Null |
F |
F |
F |
F |
Null |
Null |
F |
Null |
OR |
T |
F |
NULL |
T |
T |
T |
T |
F |
T |
F |
NULL |
NULL |
T |
NULL |
NULL |
NOT |
T |
F |
NULL |
F |
T |
NULL |
문제 37 (검사받을 마지막 문제)
81년도에 입사한 사원들중에서 직업이 SALESMAN인 사원들의 부서번호를 출력하는데 중복제거해서 출력하시오 (컬럼명은 한글로 부서번호라고 하시오)
select distinct deptno as "부서번호"
from emp
where hiredate like '81%' and job ='SALESMAN' ;
'SQL 기본' 카테고리의 다른 글
6장 조인 문법 (0) | 2017.09.07 |
---|---|
5장 복수행 함수 변환 함수 및 조건부 표현식 사용 (0) | 2017.09.07 |
4장 DECODE와 PIVOT 변환 함수 및 조건부 표현식 사용 (0) | 2017.07.05 |
3장 단일 행 함수를 사용하여 출력 커스터마이즈 (0) | 2017.07.05 |
2장 데이터 제한미 정렬 (0) | 2017.07.05 |