오라클 서버 구동


- 이 두가지가 실행중이어야 클라이언트에서 접근 가능함

오라클 쓰는법
1. 콘솔로 접속
2. SQL Developer 툴 사용

SELECT SQL문

- 가장 복잡하다
- 조건절이 여러개 올수도 있고, 특정 개수만큼 출력해야할수도있고, 조인할 수도 있다

오늘 실습
- Where 조건절을 써서 특정 데이터만 검색
- Where 조건과 비교연산자
- Where 조건절이 두개 이상이면 or 이나 and같은 논리연산을 쓰게됨 (기호대신 문자형태로 or, and 를 씀)
- LIKE 연산자로 특정 단어를 포함하는 것 검색
- 게시판에서 검색을할떄 LIKE 연산자나 와일드카드 사용
- ORDER BY 로 정렬

 

실습 준비
- SQL 워크시트 클릭해서 scott 계정으로 Connection 연결하자

where 조건절

ex) Where sal > 3000
- 이런식으로 비교연산자를 써서 조건절 쓴다

오라클의 비교연산자 기호

- = : 같다
- <>, !=, ^= : 다르다
- 이건 자바와 다르므로 알기

- 비교 연산자 ( =, >, >=, <, <=, !=, ^=, <>)
- 나머지는 거의 자바와 같다

 

where 조건절에 들어가는 컬럼 타입에 따른 사용법
1. where 조건절에 들어가는 컬럼 타입이 숫자인 경우

2. where 조건절에 들어가는 컬럼 타입이 문자인 경우

3. where 조건절에 들어가는 컬럼 타입이 날짜인 경우


1. where 조건절에 들어가는 컬럼 타입이 숫자인 경우

1)

-- 1. 숫자 데이터 검색
-- Q1. 사원 테이블에서 급여를 3000 이상 받는 사원을 검색하는 SQL문 작성?
select * from emp where sal >= 3000;

- 숫자데이터는 숫자와 비교할때 숫자데이터 3000 좌우에 외따옴표나 쌍따옴표를 하지 않는다

 

2)

-- Q2. 급여가 3000인 사원을 검색하는 SQL문 작성?
select * from emp where sal = 3000;

- = 하나만 쓰기 주의 == 두개 아님!

3)

-- Q3. 급여가 3000이 아닌 사원을 검색하는 SQL문 작성?
select * from emp where sal <> 3000;
select * from emp where sal != 3000;
select * from emp where sal ^= 3000;

 

4)

-- Q4. 급여가 1500 이하인 사원의 사원번호, 사원명, 급여를 출력하는 SQL문 작성?
select empno, ename, sal from emp where sal <= 1500;

2. where 조건절에 들어가는 컬럼 타입이 문자인 경우
- 이제 문자데이터 검색
문자데이터 검색시 주의 사항 2가지
1. 문자데이터는 대, 소문자를 구분한다.
- 오라클에서 유일하게 대소문자 구분하는 것이 테이블에 저장된 문자데이터
ex) EMP 테이블의 ENAME 컬럼안의 데이터 'SMITH', 'ALLEN', 'WARD' 나 JOB 컬럼 안의 데이터 'CLERK', 'SALESMAN', 'MANAGER' 등은 대소문자를 구분함
ex) DEPT 테이블의 DNAME 컬럼안의 데이터 'ACCOUNTING', 'RESEARCH' 등은 대소문자를 구분함
2. 문자 데이터를 검색 할 때는 문자열 좌,우에 외따옴표(')를 붙여야 한다.

+ SQL Developer 단축키
- Ctrl + Shift + D : 한줄 아래로 복사

 

1)

-- Q1. 사원테이블에서 사원명이 FORD 인 사원의 정보를 검색하는 SQL문 작성
select * from emp where ename = 'ford'; -- 검색결과 없음
select * from emp where ename = FORD; -- 오류 발생
select * from emp where ename = "FORD"; -- 오류 발생
select * from emp where ename = 'FORD'; -- 정상적인 검색

 

- 문자 양옆에 외따옴표 없으면 오류 발생, 대소문자 구분하므로 제대로 쓰기

- 오라클에서 문자데이터만 대소문자 구분한다
- 나머지는 대소문자 구분안함, 변수명이나 함수명도 대소문자 구분안함 ex) sysdate 는 SYSDATE 와 같다

 

2)

-- Q2. SCOTT 이란 사원의 사원번호, 사원명, 급여를 출력하는 SQL 문 작성? 
select empno, ename, sal from emp where ename = 'SCOTT';


2. where 조건절에 들어가는 컬럼 타입이 날짜인 경우
- 이제 날짜 데이터 검색하자
- EMP 테이블의 HIREDATE 컬럼이 DATE 타입이다
- 날짜데이터도 좌우에 외따옴표로 감싸줘야함!


날짜데이터 검색시 주의사항
1. 날짜 데이터를 검색할때, 날짜 좌,우에 외따옴표(')를 붙여야 한다.
2. 날짜 데이터를 비교할때 비교 연산자를 사용한다.

 

1)

-- Q1. 1982년 1월 1일 이후에 입사한 사원을 검색하는 SQL문 작성?
select * from emp where hiredate >= 82/1/1; -- 오류 발생
select * from emp where hiredate >= '82/1/1'; -- 정상적인 검색
select * from emp where hiredate >= '1982/1/1'; -- 정상적인 검색

- 이때 이 결과를 입사일을 기준으로 오름차순 정렬해보자

 

2)

-- Q2. 1982년 1월 1일 이후에 입사한 사원을 검색하고, 입사일을 기준으로
--     오름차순 정렬하는 SQL문 작성?
select * from emp where hiredate >= '82/1/1' 
    order by hiredate asc ; -- 정상적인 검색

- 입사일 오름차순 = 입사일이 작은 순서 부터 = 입사일이 빠른 순서부터 = 먼저 입사한 순


오라클의 논리연산자
- 조건식이 2개 이상왔을때, 조건식과 조건식 사이에 논리연산자를 써야함 ex) and , or
+ 자바는 && 와 ||

오라클의 논리연산자 3가지
1. and 연산자 : 두 조건식을 모두 만족하는 데이터를 검색
2. or 연산자 : 두 조건식 중에서 한가지만 만족해도 검색
3. not 연산자 : 논리값을 반대로 바꿔주는 역할
ex) 

SELECT * FROM emp WHERE NOT deptno = 10; -- 10이 아닌것만 출력

 

+ 자바와 차이점 : 자바는 기호 && || ! 을 사용, 오라클은 문자형태로 AND OR NOT 을 사용

 

AND 연산자 예제

-- 1. and 연산자 : 두 조건식을 모두 만족하는 데이터를 검색
-- Q1. 사원테이블에서 부서번호가 10번이고, job이 MANAGER 인 사원을 검색하는
--     SQL문 작성?
select * from emp where deptno = 10 and job = 'MANAGER';


OR 연산자 예제

-- 2. or 연산자 : 두 조건식 중에서 한가지만 만족해도 검색
-- Q1. 사원테이블에서 부서번호가 10번이거나, job이 MANAGER 인 사원을 검색하는
--     SQL문 작성?
select * from emp where deptno = 10 or job = 'MANAGER';


NOT 연산자

-- 3. not 연산자 : 논리값을 반대로 바꿔주는 역할
-- Q1. 부서번호가 10이 아닌 사원을 검색하는 SQL문 작성?
select * from emp where not deptno = 10; -- 논리 연산자
select * from emp where deptno <> 10; -- 비교 연산자
select * from emp where deptno ^= 10; -- 비교 연산자
select * from emp where deptno != 10; -- 비교 연산자

 

- 즉, 기존의 반대의 결과 deptno = 10의 반대의 결과를 검색함
- 부서번호가 10 이 아닌 사원을 검색하는 방법이 여러가지 있다
- 논리 연산자로 구할수도 있고 비교 연산자로 구하는것도 가능함




연산자 응용 문제 1

-- Q1. 급여를 2000 에서 3000 사이의 급여를 받는 사원을 검색하는 SQL문 작성?
select * from emp where sal >= 2000 and sal <= 3000;

- 위처럼 일정한 값의 범위가 있을때, and 연산을 사용해서 연결해도 되고 beetween and 연산자를 사용해도 된다
A<=X<=B 에서 X를 구할때 문제 해결 방법 2가지

1. 컬럼명 BETWEEN A AND B 식으로 쓴다
2. A>= X AND B<=X


AND 연산자로 연결되는 것을 BETWEEN AND 연산자로 바꾸기
between and 연산자
- 형식 : where 컬럼명 between 작은값 and 큰값
- 일정한 값의 범위가 있을때 사용가능하다!
- 작은값이 먼저와야함

between and 연산자 문제 1

-- 형식 : where 컬럼명 between 작은값 and 큰값
-- Q1. 급여를 2000 에서 3000 사이의 급여를 받는 사원을 검색하는 SQL문 작성?
select * from emp where sal >= 2000 and sal <= 3000;

select * from emp where sal between 2000 and 3000;
select * from emp where sal between 3000 and 2000; -- 검색결과 없음

 

between and 연산자 문제 2

-- Q2. 급여가 2000 미만이거나 3000 초과인 사원을 검색하는 SQL문 작성?
select * from emp where sal < 2000 or sal > 3000;

select * from emp where sal not between 2000 and 3000; //강사님이 쓴거 
select * from emp where not sal between 2000 and 3000; //내가 쓴거

 

- select * from emp where sal between 2000 and 3000; 의 반대를 구하는 것이므로 not 써야한다

- 이때 not 은 where 뒤에 써도 되고, 컬럼 뒤에 써도 된다


between and 연산자 문제 3

-- Q3. 1987년도에 입사한 사원을 검색하는 SQL문 작성?
select * from emp where hiredate >= '87/1/1' and hiredate <= '87/12/31';

select * from emp where hiredate between '87/1/1' and '87/12/31';


- and 연산자로 연결되는 것을 between and 로 바꾸었다
- 후엔 or연산자로 연결되는걸 in 연산자로 바꿀 것

 



연산자 응용 문제 2

-- Q2. 커미션이 300이거나 500이거나 1400인 사원을 검색하는 SQL문 작성?
select * from emp where comm = 300 or comm = 500 or comm = 1400;


OR 연산자로 연결되는 것을 IN 연산자로 바꾸기

IN 연산자
- 커미션이 300이거나 500이거나 1400인 사원을 검색하는 SQL문 검색할때 or 연산자를 사용하고 있다

IN 연산자 형식

- 형식 : where 컬럼명 in (데이터1, 데이터2, ..)
- 괄호 안 값들 순서는 상관없음

IN 연산자 문제 1

-- Q1. 커미션이 300이거나 500이거나 1400인 사원을 검색하는 SQL문 작성?
select * from emp where comm = 300 or comm = 500 or comm = 1400;

select * from emp where comm in (300, 500, 1400);


IN 연산자 문제 2

-- Q2. 커미션이 300, 500, 1400이 아닌 사원을 검색하는 SQL문 작성?
select * from emp where comm != 300 and comm != 500 and comm != 1400;

select * from emp where comm not in (300, 500, 1400);

- not 을 붙임으로서 반대의 결과를검색함

- 커미션이 300,500,1400 아닌 사원 검색

 

주의

- comm 이 null인 사원들은 검색되지 않는다! 값이 존재하는 사원중 300, 500, 1400 이 아닌 사원만 출력됨
- null 값은 검색안됨, null 제외한 나머지 값들만 검색함
- null 검색법은 따로있다


연산자 응용 문제 3

-- Q3. 사원번호가 7521이거나 7654이거나 7844인 사원을 검색하는 SQL문 작성?
select * from emp where empno = 7521 or empno = 7654 or empno = 7844;


OR 연산자로 연결되는 것을 IN 연산자로 바꾸기
IN 연산자 문제 3

-- Q3. 사원번호가 7521 이거나 7844인 사원을 검색하는 SQL문 작성?
select * from emp where empno = 7521 or empno = 7844;

select * from emp where empno in (7521, 7844);


검색 관련 연산자
- 게시판 목록 페이지 상단이나 하단을 보면 검색기능이 있다

- 이런게 있으면 사용자가 쉽게 검색 가능 
- 작성자명, 제목, 내용, 제목+내용 등으로 검색 가능하다
- 이런걸 LIKE 연산자와 와일드카드( % , _ )를 이용해 구현한다

 

LIKE 연산자와 와일드 카드

- 검색기능을 구현할때 사용함.
- 형식 : where 컬럼명 like pattern


LIKE 연산자
- 형식 : WHERE 검색할컬럼명 LIKE 패턴지정
- 패턴을 만들때 와일드카드를 써야함 %와 _가 있다

와일드 카드

1. '%' : 문자가 없거나, 하나 이상의 문자가 어떤 값이 와도 상관없다 (이걸 주로씀)
2. '_' : 하나의 문자에 어떤 값이 와도 상관없다
- '_' 하나는 딱 한글자, 한칸만을 의미

 

LIKE 연산자와 와일드카드 예시
- 사원명이 저장된 컬럼 ENAME 

- 사원명이 F로 시작하는 사원을 검색하라

SELECT * FROM EMP WHERE ENAME LIKE 'F%';

 

- 문자데이터이므로 외따옴표로 감싸져있고 대소문자 구분
- % 는 문자가 없거나 하나 이상의 문자가 와도 되므로, 'F' 여도 검색되고 'Faith' 여도 검색된다

LIKE 연산자와 와일드카드 예제 1

-- Q1. 사원테이블에서 사원명이 F로 시작하는 사원을 검색하는 SQL문을 작성?
select * from emp where ename = 'FORD'; -- FORD 사원만 검색됨

select * from emp where ename like 'F%';

- %는 문자가 없거나, 하나 이상의 문자 이므로, WHERE ename like 'F%' 는 'F'여도 되고 'FO' 여도 되고 'FORD' 여도 됨
- 문자 데이터이므로 좌우에 외따옴표 붙이기


LIKE 연산자와 와일드카드 예제 2

-- Q2. 사원테이블에서 사원명이 N으로 끝나는 사원을 검색하는 SQL문을 작성?
select * from emp where ename like '%N';

- 문자 길이 달라도 N으로 끝나므로 검색됨

 

LIKE 연산자와 와일드카드 예제 3

-- Q3. 사원테이블에서 사원명이 A를 포함하는 사원을 검색하는 SQL문을 작성?
select * from emp where ename like '%A%';

- A가 시작문자든, 끝문자든, 중간에 있든, A만 있든 다 검색된다.
- where 제목컬럼명 like '%검색어%' 가 가장 많이 쓰는 형식이다 

- 웹에서 제목으로 검색할때 제목의 컬럼명이 where 뒤에 오고 검색어를 포함하는 제목인 글을 찾음
+ 웹에서 내용으로 검색할땐 컬럼명 자리에 내용컬럼이 들어가야함

언더바 (_) 와일드카드를 써야만 하는 경우
- 언더바(_) 와일드 카드 : 하나의 문자에 어떤 값이 와도 상관없다

- 특정한 자리에 해당 문자가 와야할때 주로 사용

 

LIKE 연산자와 와일드카드 예제 4
언더바 (_) 와일드카드 예제 1

-- Q1. 사원 이름의 두번째 글자가 A인 사원을 검색하는 SQL문을 작성?
select * from emp where ename like '_A%';

 

- 언더바 _ 하나가 한글자 한칸을 의미하는것

- 언더바 _ 에 어떤값이 와도 상관없지만 한글자는 와야함

- TA 도 검색됨

- %가 오면 의미가 달라짐


LIKE 연산자와 와일드카드 예제 5
언더바 (_) 와일드카드 예제 2

-- Q2. 사원 이름의 세번째 글자가 A인 사원을 검색하는 SQL문을 작성?
select * from emp where ename like '__A%';

 

- _를 2개 썼다


LIKE 연산자와 와일드카드 예제 6

-- Q3. 사원명에 A가 포함되어 있지 않은 사원을 검색하는 SQL문을 작성?
select * from emp where ename not like '%A%';

 

- A가 포함된 사원을 검색하는 결과에서 not을 써서 A가 포함되지 않은 사원을 검색
- like앞에 not을 써주면 된다


NULL 값 검색
- 값이 비어있는 NULL 값을 가진 데이터는 검색되지 않았다
- 또한 비교연산자로 NULL을 검색할 수 없다

SELECT * FROM EMP WHERE COMM = NULL; -- (X) 검색결과 없음


- EMP 테이블에서, PRESIDENT KING의 MGR은 NULL

- EMP 테이블에서, SALESMAN 인 4명만 COMM이 NULL이 아니고 나머지는 다 NULL

 

NULL 값 검색 예제 1

- IS NULL 연산자를 써야한다

-- Q1. MGR 컬럼에 NULL 값인 데이터를 검색
select * from emp where mgr = null; -- 검색 안됨
select * from emp where mgr = ''; -- 검색 안됨

select * from emp where mgr is null;


NULL 값 검색 예제 2

-- Q2. MGR 컬럼에 NULL 값이 아닌 데이터를 검색
select * from emp where mgr is not null;

 

- NULL 값이 아닌 데이터 검색할땐 IS NOT NULL 사용


NULL 값 검색 예제 3

-- Q3. COMM 컬럼에 NULL 값인 데이터를 검색
select * from emp where comm is null;


NULL 값 검색 예제 4

-- Q4. COMM 컬럼에 NULL 값이 아닌 데이터를 검색
select * from emp where comm is not null;


데이터 정렬 : ORDER BY 절
- 데이터를 먼저 검색하고 마지막으로 정렬을 한다!

 

where 조건절과 order by 절 같이 쓸때 주의

- where 조건절로 조건맞는 데이터 먼저 검색 후, 마지막에 order by로 정렬해야함

ORDER BY 절
- ORDER BY 컬럼명 : 해당 컬럼명 기준으로 정렬
- 컬럼명 뒤에 asc, desc 를 붙여 오름차순, 내림차순 설정

오름차순 vs 내림차순

  오름차순 내림차순
숫자 데이터 작은 값부터 정렬 (1,2,3..) 큰 값부터 정렬 (3,2,1..)
문자 데이터 사전 순서로 정렬 (a,b,c..)  사전 반대 순서로 정렬 (z,y,x..)
날짜 데이터 빠른 날짜 순서로 정렬
(작은 연도부터 정렬, 즉 과거부터 정렬)
늦은 날짜 순서로 정렬 
(큰 연도부터 정렬, 즉 최신순 정렬)
NULL 가장 마지막에 NULL 값이 나온다 가장 먼저 NULL 값이 나온다

+ 게시판은 주로 내림차순 정렬이다 최근글부터 나와야하므로

오름차순 정렬
ex)

select * from emp order by sal asc;

- 급여가 작은 순부터 정렬

내림차순 정렬
ex)

select * from emp order by sal desc;

- 급여가 큰 순부터 정렬

 

정렬 정리
- 형식 : order by 컬럼명 정렬방식(asc or desc)
- 정렬방식 : 오름차순(ascending), 내림차순(descending)

숫자 데이터 정렬 예제 1

-- 1. 숫자 데이터 정렬
-- Q1. 사원 테이블에서 급여를 기준으로 오름차순 정렬
select ename, sal from emp order by sal asc;
-- 정렬방식(asc, desc)이 생략되면, 기본 정렬방식 은 오름차순으로 정렬함.
select ename, sal from emp order by sal;

 

- 오름차순 = 작은수부터 = 낮은급여부터 높은급여까지 정렬
- 이때 이 asc는 생략 가능하다, 즉 기본 디폴트 방식이 asc로 되어있으므로 생략 가능


숫자 데이터 정렬 예제 2

-- Q2. 사원 테이블에서 급여를 기준으로 내림차순 정렬
select ename, sal from emp order by sal desc;



문자 데이터 정렬 예제 1

-- 2. 문자 데이터 정렬
-- Q1. 사원테이블에서 사원명을 기준으로 오름차순 정렬 : 사전순 정렬
select ename from emp order by ename asc;
select ename from emp order by ename; -- 정렬방식(asc) 생략가능


문자 데이터 정렬 예제 2

-- Q2. 사원테이블에서 사원명을 기준으로 내림차순 정렬 : 사전역순 정렬
select ename from emp order by ename desc;


문자 데이터 정렬 예제 1

-- 3. 날짜 데이터 정렬
-- Q1. 사원 테이블에서 입사일을 기준으로 오름차순 정렬 : 빠른 날짜 순으로 정렬
select hiredate from emp order by hiredate asc;

 

- 빠른년도 순 = 년도 숫자가 작은거 = 이른날짜 = 옛날 -> 현재 순으로


문자 데이터 정렬 예제 2

-- Q2. 사원 테이블에서 입사일을 기준으로 내림차순 정렬 : 늦은 날짜 순으로 정렬
select hiredate from emp order by hiredate desc;

 

- 늦은 날짜 순이란 = 최신순


NULL 값이 포함된 데이터 정렬
NULL 정렬
1. 오름차순 정렬 시 NULL 값이 가장 마지막에 출력
2. 내림차순 정렬시 NULL 값이 가장 먼저 출력
- 즉 NULL 값이 가장 큰 값이라고 생각하면 된다

 

NULL 값이 포함된 데이터 정렬 예제 1

-- Q1. MGR 컬럼을 기준으로 오름차순 정렬 : NULL 값이 가장 마지막에 출력
select ename, mgr from emp order by mgr asc;

 

- 오름차순 정렬하면 NULL 값이 가장 마지막에 출력된다


NULL 값이 포함된 데이터 정렬 예제 2

-- Q2. MGR 컬럼을 기준으로 내림차순 정렬 : NULL 값이 가장 먼저 출력
select ename, mgr from emp order by mgr desc;


NULL 값이 포함된 데이터 정렬 예제 3

-- Q3. COMM 컬럼을 기준으로 오름차순 정렬 : NULL 값이 가장 마지막에 출력
select ename, comm from emp order by comm asc;


NULL 값이 포함된 데이터 정렬 예제 4

-- Q4. COMM 컬럼을 기준으로 내림차순 정렬 : NULL 값이 가장 먼저 출력
select ename, COMM from emp order by COMM desc;


여러번 정렬하기

1. 한번 정렬했을때, 동일한 결과가 나오는 데이터가 있을 경우에는 한번 더 정렬을 해야한다
2. 두번째 정렬 조건은 한번 정렬했을때 동일한 결과가 나온 데이터들만 두번째 정렬 조건을 적용받는다.
3. 댓글 게시판을 만드는 경우에 주로 사용한다


ex) 급여를 기준으로 내림차순 정렬시, 1번 정렬했을때 같은 결과가 나오는 경우가 있다

- 3000, 1250 이 급여인 사원이 2명씩 있따, 이럴때 한번 더 정렬을 할 수 있다

- "동일한 데이터가 나온 경우에만" 두번째 정렬조건의 적용을 받음!
- 나머지는 두번째 정렬조건의 적용을 안받음

- 그러므로 두번째 정렬을 하면 FORD, SCOTT, WARD, MARTIN 데이터만 적용을 받는다


같은 결과가 나오면 한번 더 정렬하는 경우 활용 : 게시판
- 게시판 글을 내림차순하면 최근글이 위로 가게 된다

- 그 글에 댓글들과 대댓글 달때 한번더 정렬해줘야하는 경우에 주로 사용

- 그 댓글들과 대댓글은 부모 그룹번호 id가 같기때문에 댓글들끼리 그걸 한번더 정렬해줘서 순서를 정해야함
- 즉 첫번째로는 글을 정렬하고 두번째로는 그 글의 댓글과 대댓글들을 정렬 한다

여러번 정렬하기 예시

-- Q. 사원 테이블에서 급여를 기준으로 내림차순 정렬을 한다. 이때 동일한 급여를
--    받는 사원들은 사원명을 기준으로 오름차순 정렬해서 출력하는 SQL문을 작성
select ename, sal from emp order by sal desc, ename asc;

 

- 급여로 1차 정렬을하고 같은 데이터가 있는경우에만!(3000이 2명, 1250이 2명) 2차로 정렬을 해준다
- 이때 , 로 이어서 두번째 정렬을 해줌
- , 뒤에 기준컬럼을 써주고 정렬방법을 써주면됨 

- "동일한 데이터가 나온 경우에만" 두번째 정렬조건의 적용을 받음!
- 나머지는 두번째 정렬조건의 적용을 안받음

- 그러므로 두번째 정렬을 하면 FORD, SCOTT, WARD, MARTIN 데이터만 적용을 받는다


- 여기서 두번의 정렬후에도 정렬이 안되어 동일한 데이터가 또 나오면 또 다른 컬럼으로 3번째 정렬 가능

 

정렬 문제 1 : 한번 정렬, 오름차순 정렬

-- 정렬 문제
-- Q1. 사원 테이블에서 입사일을 기준으로 오름차순으로 정렬하여 출력하되,
--    사원번호, 사원명, 직급, 입사일 컬럼을 출력하는 SQL문을 작성
select empno, ename, job, hiredate from emp order by hiredate asc;

 

정렬 문제 2 : 한번 정렬, 내림차순 정렬

-- Q2. 사원 테이블에서 사원번호를 기준으로 내림차순으로 정렬하여 사원번호와
--    사원명 컬럼을 출력하는 SQL문 작성
select empno, ename from emp order by empno desc;

 


정렬 문제 3 : 여러번 정렬

-- Q3. 부서번호가 빠른 사원부터 출력하되, 동일한 부서내의 사원을 출력할 경우에는
--    최근에 입사한 사원부터 사원번호, 입사일, 사원명, 급여순으로 출력하는
--    SQL문을 작성
select empno, hiredate, ename, sal from emp order by deptno asc, hiredate desc;


과제
Q1. 사원테이블(EMP)에서 입사일(HIREDATE)을 4자리 연도로 출력되도록 SQL문을 작성하세요? (ex. 1980/01/01)

- 입사일이 80/12/17 로 저장되어있는데 이걸 1980/12/17 로 출력해야함

-- 과제1. 사원테이블(EMP)에서 입사일(HIREDATE)을 4자리 연도로 출력 되도록 SQL문을 작성하세요? (ex. 1980/01/01)
select empno, ename, job, mgr, TO_CHAR(hiredate,'YYYY/MM/DD'), sal, comm, deptno from emp;


Q2. 사원테이블(EMP)에서 MGR컬럼의 값이 null 인 데이터의 MGR의 값을 CEO 로 출력하는 SQL문을 작성 하세요?

-- 과제2. 사원테이블(EMP)에서 MGR컬럼의  값이  null 인 데이터의 MGR의 값을  CEO 로  출력하는 SQL문을 작성 하세요?
select empno, ename, job, nvl(TO_CHAR(mgr), 'CEO') as "MANAGER", sal, comm, deptno from emp;

-  MGR 컬럼이 NULL 일때 이걸 CEO로 바꿔서 출력
- nvl 함수 , null 값을 검색하는 조건식도 쓰기

- 배운것만으로 해결 불가 나중에 찾아보면서 과제 하기

 

과제 풀이

https://laker99.tistory.com/50

https://laker99.tistory.com/51


+ 최대공약수
- 24를 1씩 감소시키면서 60과 24 둘다 나눠떨어질때 그게 최대공약수
- 무한루프 돌려서 그 i로 60과 24 나눠서 둘다 0 나머지면 최대공약수, i 를 1씩 감소시키기

+ Recent posts