오늘의 코딩 순서 + 포인트
<<<scott_0625>>>
0)
1. scott에서 사용 가능한 테이블 보는 방법
-- SELECT * FROM tab; --처럼 한 줄에 붙여쓰기도 가능
SELECT *
FROM tab
;
2. dept 테이블 보는법
DESC dept;
문제 0-1) 부서 테이블에서 부서 이름(dname)과 부서 번호(deptno)를 출력하여라
SELECT dname , deptno FROM dept;
문제 0-2) 학생 테이블에서 중복되는 학과 번호(deptno)를 제외하고 출력하여라 --> distinct
SELECT distinct deptno FROM student;
1)별명 부여 방법 (교재 p86
1. 특수문자(ex.큰따옴표)를 추가하거나 대소문자를 구분하는 경우
문제 1-1)
SELECT ename , sal , SAL*12+COMM "ANNSAL"
2. 칼럼 이름과 별명 사이에 공백(AS)을 추가하는 방법
문제 1-2) 부서 테이블에서 부서 이름 칼럼의 별명은 dept_name, 부서 번호 칼럼의 별명은 DN으로 부여하여 출력하여라
SELECT dname dept_name , deptno As dn
FROM department;
3. 합성(concatenation)연산자 (||) : 하나의 칼럼과 다른 칼럼, 산술 표현식 또는 상수 값과 연결하여 하나의 칼럼처럼 출력할 경우에 사용. 즉, 문자 & 문자를 연결할 때 사용
문제 1-3) 학생 테이블에서 학번과 이름 칼럼을 연결하여 “Student”라는 별명으로 하나의 칼럼처럼 연결하여 출력하여라
SELECT studno|| ' ' || name "StudentAli"
FROM student;
문제 1-4) 학생의 몸무게를 pound로 환산하고 칼럼 이름을 ‘weight_pound’ 라는별명으로 출력하여라. 출력내용은 이름, 몸무게, weight_pound (1kg은 2.2pound) (현장HW)
SELECT name, weight , weight * 2.2 as weight_pound
FROM student;
2) Char 와 VARCHAR2 비교
자료형 데이터 베이스 | ||
이름 | CHAR(길이) | VARCHAR2(길이) |
개요 | 1. 고정 길이의 문자열을 저장하며 최대 4,000byte만큼의 고정 길이 문자열 데이터를 저장할 수 있음 2. 지정된 길이보다 짧은 데이터가 입력되는 경우, 나머지 공간은 공백으로 채워짐 |
1. 가변 길이의 문자열을 저장하기 위해 사용하는 데이터 타입 2. 최대 4,000 byte 저장 가능 3.지정된 길이보다 짧은 문자열이 입력되면 뒷부분은 NULL로 처리되어 저장공간을 낭비하지 않음 |
특징 | 1. 데이터 입력시 사용자가 데이터를 입력하지 않으면 NULL이 입력됨 2. 지정된 길이보다 긴 데이터가 입력되면 오류 발생 3. 주소 데이터와 같은 편차가 심한 데이터를 입력할 때 사용하면 저장 공간이 낭비될 수 있음 4. 주민등록번호와 같이 길이가 일정하거나 비슷한 경우에 사용하는 것이 좋음 |
1. 데이터 입력시 사용자가 값을 입력하지 않으면 NULL이 입력 2. 지정된 길이보다 긴 데이터가 입력되면 데이터가 입력되지 않고 오류 발생 3.입력될 데이터의 편차가 심하거나 NULL이 많이 입력되는 경우에 사용하는 것이 효율적 4. 실무에서는 CHAR 데이터 타입보다 VARCHAR2를 많이 사용 |
CHAR과 VARCHAR2의 비교예시 ↓↓↓
CREATE TABLE ex_type -- 이 세 줄 같은 것을 DDL이라고 칭함
(c CHAR(10) ,
v VARCHAR2(10)
);
INSERT INTO ex_type
Values('sql' , 'sql');
commit;
SELECT *
FROM ex_type
WHERE c = 'sql'
;
SELECT *
FROM ex_type
WHERE v = 'sql' --여기까지 세 단락을 실행하면 다 같은 값으로 보이지만
;
SELECT *
FROM ex_type
WHERE v = c --사실은 같지 않다
;
↳ CHAR과 VARCHAR2의 값이 다른 이유
:
- 이렇게 타이핑 한 후 위의 두 줄을 초록색 재생버튼으로 실행, 그 다음 아래 세 줄을 실행
접속의 새로고침(리프레쉬)를 누르면 EX_TYPE가 생김
왼쪽 탭에서 EX_TYPE를 더블클릭하면 C탭과 V탭이 생기는데 둘 다 더블클릭을 해주고 연필을 누르면 값 편집이 뜬다( 이 이후는 줌 영상 보고 마저 추가) - commit은 진짜 Table에 넣는다
- commit: 커밋을 하면 보류 중인 DML 명령어를 통한 작업들이 데이터베이스에 영구적으로 적용되어 저장됨
즉, 커밋 뒤에 롤백을 해도 작업 내역이 그 이전으로 되돌려져 날아가지 않는다 - ↔ rollback: 보류중인 모든 데이터 변경사항을 폐기. 현재 트랜잭션 종료, 직전 커밋 직후의 단계로 회귀(되돌아가기), 전체 트랜잭션을 롤백함
- commit: 커밋을 하면 보류 중인 DML 명령어를 통한 작업들이 데이터베이스에 영구적으로 적용되어 저장됨
3) 비교 연산자
문제 3-1) 학생 테이블에서 1학년 학생만 검색하여 학번, 이름, 학과 번호를 출력하여라(현장HW)
SELECT studno , name , deptno
FROM student
WHERE grade = '1'
-- WHERE grade = TO_NUMBER('1') : 자바로 따지면 형변환
;
연산자 | 사용법 | 설명 |
= | A = B | A값과 B값이 같을 경우 true, 다를 경우 false반환 |
!= | A != B | A값과 B값이 다를 경우 true, 같을 경우 false반환 |
<> | A <> B | A값과 B값이 다를 경우 true, 같을 경우 false반환 |
> | A > B | A값이 B값을 초과할 경우 true |
< | A < B | A값이 B값 미만일 경우 true |
>= | A >= B | A값이 B값 이상일 경우 true |
<= | A <= B | A값이 B값 이하일 경우 true |
문제 3-2) 학생 테이블에서 몸무게가 70kg 이하인 학생만 검색하여 학번, 이름, 학년, 학과번호, 몸무게를 출력하여라. (현장HW)
SELECT studno , name , grade, deptno, weight
FROM student
Where weight <= 70
;
문제 3-3) 학생 테이블에서 1학년 이면서 몸무게가 70kg 이상인 학생만 검색하여 이름, 학년, 몸무게, 학과번호를 and 조건으로 출력하여라 (현장HW)
SELECT name , grade , weight , deptno
FROM student
WHERE grade = 1
and weight >= 70
;
문제 3-4) 학생 테이블에서 1학년이거나 몸무게가 70kg 이상인 학생만 검색하여 이름, 학년, 몸무게, 학과번호를 출력하여라. (현장HW)
SELECT name , grade , weight , deptno
FROM student
WHERE grade = 1
OR weight >= 70
;
4) 논리 연산자
연산자 | 사용법 | 설명 |
ALL | ||
BETWEEN | 1. BETWEEN a AND b: a와 b의 사이의 값, a, b 도 포함 BETWEEN, AND, OR and or O X -> X / O X O -> X / O O O -> O / O X X -> X / X |
|
AND | ||
OR | ||
IN | WHERE 열 이름 IN (데이터1 , 데이터2...); | - 필수 요소: 열 이름, 조회할 열의 데이터 목록 - 특정 열에 포함된 데이터를 어러 개 조회할 때 사용 - 가독성이 뛰어남 - (a, b, c,…, n): a, b, c, …, n 중의 하나와 일치하면 참 |
LIKE | 문자 패턴과 부분적으로 일치(%, _)하면 참 | |
NOT | WHERE NOT SAL = 300; | - 논리 부정 연산자 - 피연산자의 의미를 반전시켜 true를 false로, false를 true로 바꾼다. - 복잡한 조건식에서 정반대의 최종 결과를 원할때 혹은 복잡한 여러 개 조건식이 AND, OR로 묶여 있는 상태에서 정반대 결고를 얻고 자 할 때에는 유용하게 사용할 수 있음 |
NULLL | ||
IS NULL | NULL 이면 TRUE | |
IS NOT NULL |
1. BETWEEN a AND b: a와 b의 사이의 값, a, b 도 포함
BETWEEN, AND, OR
and or
O X -> X / O
X O -> X / O
O O -> O / O
X X -> X / X
문제 4-1) BETWEEN 연산자를 사용하여 몸무게가 50kg에서 70kg 사이인 학생의 학번, 이름, 몸무게를 출력하여라 (현장HW)
SELECT student , name , weight
FROM student
WHERE weight BETWEEN 50 AND 70
;
문제 4-2) 학생테이블에서 81년에서 83년도에 태어난 학생의 이름과 생년월일을 출력해라 (현장HW)
SELECT name , birthdate
FROM student
--WHERE birthdate BETWEEN '91/01/01' AND '93/12/31'
WHERE birthdate BETWEEN '81' AND '83'
;
문제 4-3) 학생테이블에서 81년에서 83년도에 태어난 학생의 이름과 생년월일을 출력해라 (현장HW)
SELECT studno , name , birthdate
FROM stedent
WHERE birthdate BETWEEN '81/01/01' AND '83/12/31'
--WHERE birthdate BETWEEN to_date('81/01/01') AND ('83/12/31')
;
2. IN(a, b, c,…, n): a, b, c, …, n 중의 하나와 일치하면 참
문제 4-4) IN 연산자를 사용하여 102번 학과와 201번 학과 학생의 이름, 학년, 학과번호를 출력하여라(현장HW)
SELECT name , grade , deptno
FROM student
--WHERE deptno IN(102,201) : OR문에 권장되는 예시
WHERE deptno = 102
OR deptno = 201
;
>> %
문제 4-5) 학생 테이블에서 성이 ‘김’씨인 학생의 이름, 학년, 학과 번호를 출력하여라
SELECT name , grade , deptno
FROM student
WHERE name LIKE '김%'
;
문제 4-6) 학생 테이블에서 이름중 '진'이 들어간 학생의 이름, 학년, 학과 번호를 출력하여라
SELECT name , grade , deptno
FROM student
WHERE name LIKE '%진%'
;
문제 4-7) 학생 테이블에서 이름중 '진'이 들어간 학생의 이름, 학년, 학과 번호를 출력하여라
SELECT name , grade , deptno
FROM student
WHERE name LIKE '%진'
;
문제 4-8) 학생 테이블에서 이름이 3글자, 성은 ‘김’씨고 마지막 글자가 ‘영’으로 끝나는 학생의 이름, 학년, 학과 번호를 출력하여라
SELECT name , grade , deptno
FROM student
WHERE name LIKE '김%영'
--WHERE name LIKE '김_영' 위와의 차이: 가운데에 꼭! 한글자가 더 들어가야 한다는 뜻
;
>> NULL
SELECT empno , sal , comm
FROM emp;
SELECT empno , sal , comm , sal + comm
FROM emp; --null값이 나와 원하는 값이 안나와서 해결 불가
--위에서 null값이 나오는 것에 대한 해결방안
SELECT empno , sal , comm , sal + NVL(comm,0)
FROM emp;
문제 4-9) 교수 테이블에서 이름, 직급, 보직수당을 출력하여라(현장HW)
SELECT name, position , comm
FROM professor
;
문제 4-10) 교수 테이블에서 보직수당이 없는 교수의 이름, 직급, 보직수당을 출력하여라(현장HW)
SELECT name , positon , comm
FROM professor
--WHERE comm = null : 이러면 안됨
WHERE comm IS null
;
문제 4-11) 교수 테이블에서 급여에 보직수당을 더한 값을 sal_com이라는 별명으로 출력하여라
교수의 이름, 직급, sal , 보직수당, sal_com 을 출력 (현장HW)
SELECT name , position , sal , comm , sal + comm sal_com
FROM professor
;
문제 4-12) 위 문제에 조건추가: sal_com 항목은 comm이 NULL이면 0로 취급 (현장HW)
SELECT name , position , sal , comm , sal + NVL(comm,0) sal_com
FROM professor
;
문제 4-13) 102번 학과의 학생 중에서 1학년 또는 4학년 학생의 이름, 학년, 학과 번호를 출력하여라 (현장HW)
SELECT name , grade , deptno
FROM student
WHERE deptno = 102
AND (grade = 1 OR grade = 4)
;
5) 집합 연산자
- 정의: 테이블을 구성하는 행집합에 대해 테이블의 부분 집합을 결과로 반환하는 연산자
- 합병 가능 : 집합 연산의 대상이 되는 두 테이블의 칼럼수가 같고, 대응되는 칼럼끼리 데이터 타입이 동일
- UNION: 두 집합에 대해 중복되는 행을 제외한 합집합, 중복된거 제거하고 모두 나와라
- UNION ALL: 두 집합에 대해 중복되는 행을 포함한 합집합, 중복된것도 빠지지 말고 모두 나와라
- MINUS: 두 집합간의 차집합
- INTERSECT: 두 집합간의 교집합
문제 5-1) 1학년 이면서 몸무게가 70kg 이상인 학생의 집합 --> Table stud_heavy (현장HW)
CREATE TABLE stud_heavy
AS
SELECT *
FROM student
WHERE weight > = 70
AND grade = 1
;
문제 5-2) 1학년 이면서 101번 학과에 소속된 학생(stud_101) (현장HW)
>> UNION
SELECT studno , name , userid
FROM stud_heavy
UNION
SELECT studno , name
FROM stud_101
;
-- 오류나는 이유: 동일 컬럼의 수가 아니기 때문
--올바른 코드 ↓↓↓
SELECT studno , name
FROM stud_heavy
UNION
SELECT studno , name
FROM stud_101
;
>> UNION ALL
SELECT studno , name
FROM stud_heavy
UNION ALL
SELECT studno , name
FROM stud_101
;
>> MINUS
SELECT studno , name
FROM stud_heavy
Intersect
SELECT studno , name
FROM stud_101
;
>> INTERSECT
SELECT studno , name
FROM stud_heavy
Minus
SELECT studno , name
FROM stud_101
;
6) 정렬(sorting)
- SQL 명령문에서 검색된 결과는 테이블에 데이터가 입력된 순서대로 출력
하지만, 데이터의 출력 순서를 특정 컬럼을 기준으로 오름차순 또는 내림차순으로 정렬하는 경우가 자주 발생
여러 개의 칼럼에 대해 정렬 순서를 정하는 경우도 발생 - ORDER BY : 칼럼이나 표현식을 기준으로 출력 결과를 정렬할 때 사용
- ASC : accending, 오름차순으로 정렬, 기본 값
- DESC : descending, 내림차순으로 정렬하는 경우에 사용, 생략 불가능
문제 6-1) 학생 테이블에서 이름을 가나다순으로 정렬하여 이름, 학년, 전화번호를 출력하여라
SELECT name , grade , tel
FROM student
--ORDER BY name :asc(오름차순)가 기본값이라 빼도 값은 같다
ORDER BY name asc
;
SELECT name , grade , tel
FROM student
ORDER BY name desc
;
문제 6-2) 학생 테이블에서 학년을 내림차순으로 정렬하여 이름, 학년, 전화번호를 출력하여라 (현장HW)
SELECT name , grade , tel
FROM student
ORDER BY grade desc
;
문제 6-3) 모든 사원의 이름과 급여 및 부서번호를 출력하는데, 부서 번호로 결과를 정렬한 다음 급여에 대해서는 내림차순으로 정렬하라. (현장HW)
SELECT ename , job , deptno , sal
FROM emp
ORDER BY deptno , sal DESC
;
수업교재
0) DB
- ODB(object Database): 객체 지향형 데이터베이스,
- 상속의 개념을 가진 트리구조, 직접 경로를 찾지 않아도 객체를 통해서 접근 가능
단점: 개발, 관리가 어려움 - NDB(Network Database): 네트워크형 데이터베이스, Graph형(순환형), 모든 노드가 연결되어 있음
단점: 복잡함, 관리가 불편함, 빠른 길을 찾기 위해선 빠른 길 찾기 알고리즘이 필요 -> 실질적 활용X - RDB(Relational Database): 관계형 데이터베이스, Table형(field < record < table(파일) < DB
가장 성공적인 방식, 행과 열을 나누어 데이터를 보관
1) DB Language⭐⭐⭐⭐⭐ ===> 면접 필수 질문!! 얘를 모르는 것은 말도 안되는 일, 모든 정의 암기
- DDL(Data Definition Language)
- 데이터 정의어
- 데이터 베이스의 스키마를 정의하고,명시된 문장이 입력되어지면 DBMS가 스키마에 대한 명세를 시스템
- 스키마
- 스키마에서 primitive를 어떻게 정의하는가?
- commit과 rollback없이 실행
- 성능이 좋고 속도가 빠르다
- DEPT
- ex) Create table, Alter table
- DML(Data Manipulation Language)
- 데이터 조작어, 최종사용자
- 데이터 베이스의 원하는 데이터를 수정하고, 삽입하고, 삭제하는 언어
- ⭐DML만 commit과 rollback이 먹여짐
- ex) Select, Insert,Delete,Update
- DCL(Data Control Language)
- 데이타베이스의 규정이나 기법을 정의하고 제어하는 언어
- 권한부여 or 취소, 보안, 병행수행 제어
- ex) Grant, Revoke
- Grant: scott에게 숨결을 불어넣는 역할
- Revoke:
2) DataBase 구성
- DBA
- DDL
- DCL
- Optimizer
- 질의 최적화(Query Optimization)는 주어진 질의 처리 방식 중 가장 효율적인 실행계획을 선택하는 과정
- 실행계획 수립은 옵티마이저 고유 기능으로 개발자가 직접 수정/편집할 수 없음
- 개발자는 SQL/INDEX 튜닝이나 HINT 사용을 통해 개선된 실행 계획을 옵티마이저에게 권고할 수 있음
- 종류
구분 | CBO(Cost Based Optimizer) | RBO(Rule Based Oprimizer) |
특징 | - 실행계획을 미리 예측하기 힘들고, 실행 계획을 특정한 처리 경로로 유도하는 등의 제어가 어려움 - 최적화된 결정을 위해 정기적으로 통계정보의 갱신이 필요함 |
- 통계정보를 사용하지 않고 SQL문 실행시 사전에 정의된 규칙에 따라 실행 - 사후에 RBO 규칙을 변경하기가 어려움 |
경로 | 처리방법에 대한 비용을 산정한 후 최소 비용이 소요되는 방법 선택 | 인덱스 구조나 비교 연산자에 따른 순위여부를 기준으로 최적 경로 설정 |
동작방식 | - 시스템 통계정보(CPU, 디스크 엑세스타임)를 이용해서 처리시간으로 환산한 방식을 사용, SQL문장에 대한 여러가지 경우의 수별로 처리시간에 비례한 비용을 산출해내고 이들 비용에서 가장 작은 비용을 갖는 플랜을 결정 |
- ROWID를 이용한 직접 접근, INDEX를 이용한 Random Access, Full Table Scan을 이용하는 순차 Scan으로 구분 - 각 경로의 분류는 하나 이상의 경로가 유용할 때 한 경로를 선택하기 위한 규칙-기반 접근 방식에 의해 사용 |
장점 | - 최적화를 깊이 이해하고 있지 않더라도 최소 성능 보장 | - 판단이 매우 규칙적이고 분명하여 수립될 실행계획이 예측 가능하기 때문에 사용자가 원하는 처리 경로로 유도하기에 용이 |
단점 | - 실행 계획을 미리 예측, 제어가 어려움 | - 통계 정보를 반영하지 않으므로 오차 발생 가능 |
- 시스템 카탈로그 = 데이터 사전 = 데이터 딕셔너리(dictionary)
3) DBMS (DataBase Management System)란? (책 p20참고)
- DBMS란?
- 미국의 Oracle(Oracle Corporation)이라는 기업에서 만든 데이터 베이스 관리 시스템
- 연관성 있는 데이터들의 집합 + 이들 데이터를 효율적으로 응용하기 위해 구성된 소프트웨어들의 집합체
즉, 데이터와 응용프로그램의 중간에서 응용프로그램이 요구하는 대로 데이터를 정의하고, 읽고, 쓰고, 갱신하는 등의 데이터를 조작하고 이들을 효율적으로 관리하는 프로그램들을 지칭함 - 1. 사용자가 새로운 데이터베이스를 생성하고
2.데이터베이스의 구조를 명시할 수 있게 하고
3. 사용자가 데이터를 효율적으로 질의하고 수정할 수 있도록 하며
4.시스템의 고장이나 권한이 없는 사용자로부터 데이터를 안전하게 보호하며
5. (동시에) 여러 사용자가 데이터베이스르 접근하는 것을 제어하는 소프트웨어 패키지 - 현재 Oracle, MySQL 등은 4세대 관계형
5세대의 객체지향형 DB가 등장하나 복잡성 때문에 확산이 저조함(예: Object Store, UniSQL)
대부분 객체지향 개발 언어(C++, JAVA)로는 응용시스템을 갭라하며 DB는 RDBMS로 가는 추세
- Oracle: Database에서 가장 많이 쓰이며, 기능 또한 가장 좋은 것으로 알려진 최고의 Database
Microsoft사의 MS-SQL 버전이 높아지면서 향상된 많은 기능들과 편리한 기능들 그리고 Microsoft의 OS와 접목한 최적화된 설계로 Oracle의 시장을 넘보고 있지만, 아직까지 Oracle은 Datavase 분야에서 선두의 자리를 고수 - Database: 기업/기관이 관심 있는 특정(특별) 정보 담고 있는 것
5) SQL
- SQL이란?
- DESC
- SQL 명령문의 표준형식
- SELECT절: 질의 결과를 포함 하려는 애트리뷰트들의 리스트 열거
- DISTINCT 절을 사용해서 중복 제거
- FROM절: 질의에서 필요로 하는 릴레이션들의 리스트 열거
- WHERE절: 관계 대수의 셀렉션(Select) 연산의 조건에 해당
- 중첩질의: 다른 질의의 WHERE절에 포함된 SELECT문
- GROUP BY절: 동일한 값을 갖는 튜플들을 한 그룹으로 묶는다
- HAVING절: 튜플들의 그룹이 만족해야 하는 조건
- ORDER BY절: 결과 튜플들의 정렬 순서
- distinct
- ,가 나타나기 전까지는 하나의 column
6) 데이터 타입의 종류
- NUMBER 데이터 타입
- ,는 전체 자릿수
- DATA 데이터 타입
- LOB 데이터 타입
7) CHAR 데이터와 Varchar2⭐⭐⭐
===> 이 둘을 비교할 줄 알아야함, 면접 질문!
항목 | Char | Varchar2 |
크기 | 4K | 4K |
공간⭐⭐⭐ | 전체 사용, 하드디크스의 낭비가 아주 심하다 | 사용후 나머지 system 반납 |
실무 | - 주소를 사용 - pk 등 일부 |
전반적으로 사용 |
8) WHERE 절을 이용한 조건 검색
- WHERE절
–테이블에 저장된 데이터중에서 원하는 데이터만 선택적으로 검색하는 기능
–WHERE 절의 조건문은 칼럼 이름, 연산자, 상수, 산술 표현식을 결합하여 다양한 형태로 표현 가능
–WHERE 절에서 사용하는 데이터 타입은 문자, 숫자, 날짜 타입 사용 가능
–문자와 날짜 타입의 상수 값은 작은 따옴표(‘’)로 묶어서 표현하고 숫자는 그대로 사용
–상수 값에서 영문자는 대소문자를 구별
9) SQL 연산자
10) NULL⭐⭐
- 정의: NULL은 미확인 값이나 아직 적용되지 않은 값을 의미
- 0도 아니며 스페이스도 아닌 정의되지 않은 값
- NULL 값과 다른값과의 연산 결과는 NULL
- NULL은 단독으로 인덱스를 사용할 수 없으므로 가능한 정의가능한 값(특정값)으로 정한다면 ( ‘0’,’99’ 등 ) 인덱스를 이용할 수 있다. 그렇다고 생각없이 NULL을 특정 값으로 변환하는 것은 향후 큰 문제를 일으킬 수 있으므로 주의 깊게 사용해야 함.
- NVL:
- ex1) 학생 테이블에서 학생의 몸무게가 NULL인 경우 그 학생의 몸무게가 0이라는 의미가 아니라 현재 시점에서 그 학생의 몸무게를 모른다는 의미
- ex2) 학생 테이블에서 학생의 지도교수 코드가 NULL인 경우에는 그 학생은 아직 지도교수가 배정되지 않았음을 의미
오늘의 숙제
scott>>scott_0625_
문제 13-1. 부서 10과 30에 속하는 모든 사원의 이름과 부서번호를 이름의 알파벳 순으로 정렬되도록 질의문을 형성하라.
내가 한 것>> 다 못품
SELECT ename , deptno
FROM emp
WHERE deptno = 10 AND 30
ORDER BY ename
;
정답↓↓↓
SELECT ename,deptno
FROM emp
WHERE deptno IN (10,30)
ORDER BY ename
;
문제 13-2. 1982에 입사한 모든 사원의 이름과 입사일을 구하는 질의문
내가 한 것>> 선생님의 주석: 이렇게 해도 괜찮음
SELECT ename , hiredate
FROM emp
WHERE hiredate BETWEEN '1982/01/01' AND '1982/12/31'
;
정답↓↓↓
SELECT ename , hiredate
FROM emp
WHERE TO_CHAR(hiredate,'yymmdd') LIKE '82%'
;
문제 13-3. 보너스를 받는 모든 사원에 대해서 이름, 급여 그리고 보너스를 출력하는 질의문을 형성하라. 단 급여와 보너스에 대해서 내림차순 정렬
내가 한 것>> 선생님의 주석: WHERE 자리에 오류가 생길수 있어 보인다, 아래의 답으로 공부할 것
SELECT ename , sal , NVL(comm,0)
FROM emp
WHERE comm > 0
ORDER BY sal , NVL(comm,0) desc;
정답↓↓↓
SELECT ename,sal, comm
FROM emp
WHERE comm is not null
--WHERE ( comm is not null AND comm <> 0)
ORDER BY sal DESC, comm DESC;
문제 13-4. 보너스가 급여의 20% 이상이고 부서번호가 30인 모든 사원에 대해서 이름, 급여 그리고 보너스를 출력하는 질의문을 형성하라
내가 한 것
SELECT ename , sal , comm
FROM emp
WHERE deptno = 30
AND comm >= sal * 0.2;
정답↓↓↓
SELECT ename,sal, comm
FROM emp
WHERE comm >= sal*0.2
AND deptno=30;
'DB > Oracle' 카테고리의 다른 글
2024_06_27_목 (0) | 2024.06.27 |
---|---|
2024_06_26_수 (0) | 2024.06.26 |
2024_06_26_수 (0) | 2024.06.26 |
2024_06_12_수 (0) | 2024.06.12 |
2024_06_11_화 (0) | 2024.06.11 |