문제 26. 커미션이 null 이 아닌 사원들의 이름과 월급과 커미션을 출력하시오!
SQL> select ename, sal, comm
from emp
where comm is not null;
문제 27. 직업이 SALESMAN이고 월급이 1000 이상인 사원들의 이름과 월급과 직업을 출력하시오!
SQL> select ename, sal, job
from emp
where job = 'SALESMAN' and sal >= 1000
Tip.
컬럼 별칭을 정할 수 있다.
ex) sal as 월급
주위! 아래와 같은 경우는 오라클 실행 순서에 의해서 에러가 남
SQL> select ename, sal as 월급, job
from emp
where job = 'SALESMAN' and 월급 >= 1000
문제 28. EMP 테이블의 모든 컬럼을 출력하시오!
SQL > select *
from emp;
문제 29. dept 테이블의 모든 컬럼을 출력하시오!
SQL > select *
from dept;
'*'의 의미
- 'asterisk'가 불리며 select 절에 사용 시 해당 테이블의 모든 컬럼을 출력한다.
문제 30. SQL 작성 규칙이 어떻게 되는가?
1. SQL은 대소문자를 구분하지 않는다. (주로 keyword를 대문자로 구분)
2. 한줄 또는 여러줄에 입력할 수 있다. (아래로 작성할 수 있다는 것이 중요)
3. 키워드는 약어로 표시하거나 여러줄에 나뉠 수 없다. (keyword는 select, from 과 같은 것들)
4. 절은 별도의 절에 입력해야 하는 것이 좋다
5. 가독성을 높이기 위해서 들여쓰기를 사용해라
문제 31. 아래의 쿼리의 컬럼명은 대문자로 출력되는가 소문자로 출력되는가?
SQL > select ename, sal, deptno
from emp;
answer) 대문자로 출력 됨
문제 32. 위의 컬럼명을 소문자로 출력되게하시오!
SQL > select ename, sal, deptno
from emp;
answer > select ename as "ename", sal as "sal", deptno
from emp;
* " "(더블쿼테이션 마크)를 사용해야 하는 때는
1. 컬럼별칭 사용시 대소문자를 구분하고 싶을때
2. 컬럼별칭 사용시 공백문자나 특수문자를 출력하고 싶을때
문제 33. 사원이름과 월급을 출력하는데 컬럼 별칭을 이용해서 아래와 같이 결과가 출력되게 하시오!
컬럼명 ---> Employee, Salary
SQL > select ename as "Employee", sal as "Salary"
from emp;
* 여기서 'as'는 생략 가능
문제 34. 연봉이 36000이상인 이름과 연봉(sal*12)을 출력하는데 컬럼명이 한글로 이름, 연봉으로 출력되게 하시오 !
SQL > select ename as 이름, sal*12 as 연봉
from emp
where sal*12 >= 36000;
주의! 연산 순서도 중요하다
sal*12+300 은 sal+300*12와 다르다.
문제 35. 이름과 직업을 출력하는데 아래와 같이 컬럼명을 사원의 이름, 사원의 직업이라고 출력하시오!
- 사원의 이름, 사원의 직업
SQL > select ename as "사원의 이름", job as "사원의 직업"
from emp;
문제 36. 직업을 출력하는데 중복을 제거해서 출력하시오!
SQL > select distinct job
from emp;
문제 37. 부서번호를 출력하는데 중복제거해서 출력하시오!
SQL > select distinct deptno
from emp;
문제 38. 이름과 월급을 연결해서 출력하시오!
SQL > select ename ||'의 월급은' ||sal
from emp;
*연결 연산자 : '||'(수직바 2개)
* MS SQL 은 concat을 사용해서 연결한다
SQL> select concat (ename, '의 월급은', sal)
from emp ;
문제 39. 아래와 같이 결과를 출력하시오!
KING 의 직업은 PRESIDENT 입니다.
SQL > select ename||' 의 직업은 '||job||' 입니다.'
from emp;
문제 40. 1-23쪽 (대체 인용 연산자)을 참고해서 문제를 해결하시오!
아래와 같이 결과를 출력하시오 !
SMITH의 부서번호는 '20'번 이고 직업은 CLERK 입니다.
SQL > select ename||'의'|| q'['부서번호'는]'||deptno||'번 이고 직업은'||job||'입니다'
from emp;
* MS SQL 에서 싱글쿼테이셥 select 방법
SQL> select concat (ename, '''의 월급은''', sal)
from emp ;
문제41. DEPT 테이블의 구조를 확인하시오!
SQL > desc dept
* MS SQL 에서 테이블 컬럼 구조 확인
SQL> sp_columns dept ;
2장. data 검색 제한과 정렬
1. where 절
2. order by 절
문제 42. 20번 부서번호에서 근무하는 사원들의 이름과 월급과 부서번호를 출력하시오!
SQL > select ename, sal, deptno
from emp
where deptno = 20;
문제 43. 부서번호가 20, 30번에서 근무하는 사원들의 이름과 부서번호를 출력하시오!
SQL > select ename, deptno
from emp
where deptno in (20,30);
문제 44. 80년 12월 11일에 입사한 사원들의 이름과 입사일을 출력하시오!
SQL > select ename, hiredate
from emp
where hiredate = '81/12/11'; (or '81-12-11' , '81.12.11')
'년/달/일'
*양쪽에 싱글 쿼테이션 마크를 사용해야 하느 경우는?
1) 문자
2) 날짜
* 날짜를 검색하기 전에 반드시 확인해봐야할 사항
- 현재 재가 접속한 세션의 날짜 형식을 확인해야한다.
*NLS_DATE_FORMAT RR/MM/DD
년/월/일
Tip. 날짜 형식을 확인 하는 방법
SQL> select*
from nls_session_parameters;
(nls/ National Language Support)
Tip. 컬럼 출력 포맷 변경 방법
column parameter(column 명) format a20(a숫자)
keyword 'column'은 SQL*PLUS 명령어
* MS SQL 에서 날짜 형식 확인 방법
SQL> select GETUTCDATE() ;
문제 45. 현재 세션의 날짜 형식중 년도를 4자리로 표시되게 하시오!
SQL> alter session set nls_date_format='RRRR/MM/DD';
Tip.
접속하고 나서 접속을 끊을때까지가 하나의 'session'
so. 그래서 현재 상태는 하나의 세션에서만 유요함 (=종료하기 전까지만)
*MS SQL도 날짜 형식 변환은 가능하지만 현재까지의 자료로는 시스템의 날짜 형식의 변환은 안되는 것으로 보인다.
- 추후 더 알아봐야 함
문제 46. 1983년 1월 15일에 입사한 사원들의 이름과 입사일을 출력하시오!
SQL> select ename, hiredate
from emp
where hiredate = '1983/01/15'
* MS SQL 에서는 날짜 변환의 개념이 오라클과 약간 다르다.
1) 아래의 명령을 사용하면 조회시 사용하고자 하는 날짜 형식을 바꿀 수 있다.
SQL> select CONVERT(char(10),current_timestamp,111) ;
SQL> select ename, hiredate
from emp
where hiredate = '1981/11/17' ;
2) 그러나, select 시 나오는 날짜 형식은 변하지 않았다.
아래의 문장 출력 시 기존에 입력된 날짜 형식으로 출력되어서 나온다.
SQL> select ename, hiredate
from emp
where hiredate = '1981/11/17' ;
3) 또한, 날짜 형식을 바꿔도 시스템 현재의 날짜 형식은 바뀌지 않는다.
SQL> select GETUTCDATE() ;
문제 47. 1981년도에 입사한 사원들의 이름과 입사일을 출력하시오 !
SQL> select ename, hiredate
from emp
where hiredate like '1981%' or('1981/%/%'로 하면 날짜까지 가능함)
SQL> select ename, hiredate
from emp
where hiredate between '1981/01/01' and '1981/12/31';
(이것이 좋은, 효율적인 SQL 이다.)
* '=' 은 완벽하게 같을 때만 사용한다.
문제 48. 이름에 끝글자가 T로 끝나는 사원들의 이름을 출력하시오!
SQL> select ename
from emp
where ename like '%T'
문제 49. 이름의 두번째 철자가 %인 사원의 이름을 출력하시오!
SQL> select ename
from emp
where ename like '_m%%' escape 'm'
문제 50. 아래의 data를 입력하고 이름의 두번째 철자와 세번째 철자가 %인 사원의 이름을 출력하시오!
insert into emp(empno, ename, sal)
values(3456,'A%%B',4500);
commit;
SQL > select ename
from emp
from emp
where ename like '_m%m%%' escape 'm'
문제 51. 직업이 SALESMAN이고 30번 부서번호에서 근무하는사원들 중 월급이 1000아상인 사원들의 이름과 월급과 직업과 부서번호를 출력하시오!
SQL > select ename, sal, job, deptno
from emp
where job ='SALESMAN' and deptno = 30 and sal >= 1000;
*우선 순위 규칙이 있다.
(참고 and 는 or 보다 우선작동한다, or를 먼저 우선하고 싶으면 괄호를 사용한다.)
문제 52. 이름과 월급을 출력하는데 월급이 낮은 사원부터 높은 사원순으로 출력하시오!
SQL > select ename, sal
from emp
order by sal asc;
*order by 절 사용법
- order by 절은 코딩 & 실행 순서 모두 맨 마지막에 실행된다.
Tip. asc는 ascend의 약자
문제 53. 이름과 월급을 출력하는데 월급이 높은 사원부터 출력하시오!
SQL > select ename, sal
from emp
order by sal desc
Tip. desc는 descend의 약자
문제 54. 직업이 SALESMAN인 사원들의 이름과 직업과 월급을 출력하는데 월급이 높은 사원부터 출력하시오!
SQL> SELECT ename, JOB, sal
FROM EMP
WHERE job='SALESMAN'
FROM EMP
WHERE job='SALESMAN'
ORDER BY sal DESC;
(이 문제 부터 SQL Gate 2010 사용)
문제 55. 3번 부서번호인 사원들의 이름과 입사일을 출력하는데 최근에 입사한 사원부터 출력하시오!
SQL> SELECT ename, hiredate
FROM EMP
WHERE deptno = 30
ORDER BY hiredate DESC;
문제 56. 자살데이터를 입력받기 위한 테이블을 생성하시오!
SQL > create table sucide
(country varchar2(40),
male number(10),
female number(10),
average number(10) );
* create talbe '테이블명'
문제 57. 나라이름과 남자 자살 데이터를 출력하는데 남자 자살 데이터가 많은 순서대로 출력하시오!
SQL > SELECT country, male
FROM sucide
ORDER BY male DESC nulls last;
Tip.
nulls last를 쓰면 null data를 가장 뒤로 보낸다.
문제 58. 우리나라의 평균 자살수가 어떻게 되는지 출력하시오!
SQL > SELECT average
FROM sucide
WHERE country ='South Korea6 ';
* 추가할 내용 _ SQL gate에서 데이터 추가하는 법*
1. '도구' 옵션 클릭
2. '데이터 가져오기' 클릭
3. 테이블 찾기 (미리 생성한)
4. 데이터 종류 선택
5. 데이터를 찾아서 선택
6. 필드 구분 기호 (쉼표)
7. 첫열 '2'로 변경