반응형

정렬 : order by 칼럼or숫자 (되도록이면 숫자 쓰지말아야 함, 반드시 맨뒤로 옴)

asc(기본값으로 정해져있음) 오름차순 정렬 1,2,3,4,5...
desc 내림차순 정렬 10,9,8,7,6,5...

사회에선 일반적으로 내림차순을 많이 쓴다.

기수가 많다 = 중복이 적다
기수가 적다 = 중복이 많다


선택 (selection) : 원하는 행만 검색
select 컬럼,컬럼....
from 테이블
WHERE 조건
order by 컬럼

WHERE 컬럼 =(부등호연산가능) '문자타입'or 숫자
WHERE !(부정연산자) = '문자타입' >>>> '문자타입' 제외 하고 출력

ex) 보너스가 200 이하인 사원 검색 (데이터에 null이 있는 경우)
select eno 사번, ename 이름, comm 보너스
from emp
where comm <= 200;     
= 데이터에 null 있으면 데이터를 신뢰할 수 없다.

select eno 사번, ename 이름, comm 보너스
from emp
where nvl(comm,0) <= 200;
=null값을 다른값으로 치환 해줘야 한다.

ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS';
-> 날짜 출력 형식을 정의하는 명령어

입사일이 1996년 이후인 사원의 정보를 검색한다.
select * from emp
where hdate >= '1996/01/01';

널과 비교 연산
널은 결정된 값이 아님으로 '=','<' 등의 비교 연산자를 사용할 수 없다.
널에대한 직접적인 검색은 다음과 같이 특별한 연산자를 이용한다.
IS NULL : 널을 검색한다.
IS NOT NULL : 널이 아닌 값을 검색한다.

 

예제)
1. 화학과 학생을 검색한다.
select * from student where major = '화학';  


2. 평점이 2.0 미만인 학생을 검색한다.

select * from student where avr < '2.0'; 


3. 권현 학생의 평점을 검색한다.

select sname 이름, avr 평점 from student where sname = '권현'; 


4. 정교수의 명단을 검색한다.
select pname 이름, orders 직위 from professor where orders = '정교수';  


5. 화학과 소속 교수의 명단을 검색한다.
select pname 이름, orders 직위 from professor where section = '화학';


6. 송강 교수의 정보를 검색한다.
select * from professor where pname = '송강'; 


7. 학년별로 화학과 학생의 성적을 검색한다.
select syear 학년, sname 이름, avr 성적 from student where major = '화학' order by 학년;


8. 2000년 이전에 부임한 교수의 정보를 부임일순으로 검색한다.
select * from professor where hiredate <= '2000/01/01';


9. 담당 교수가 없는 과목의 정보를 검색한다.
select  * from course where pno is null;


10. 보너스가 급여의 10% 이상인 사원을 검색한다.
select ename 이름, sal 급여, comm 보너스 from emp where nvl(comm,0) >= sal/10;

반응형
반응형

SELECT     -  테이블에서 행을 검색

INSERT      -  테이블에 행을 입력
UPDATE     -  테이블의 데이터(행)을 수정
DELETE     -  테이블의 행을 삭제

CREATE    -  테이블을 생성
ALTER       -  테이블을 구조 수정
DROP        -  테이블을 삭제

GRANT       -  권한을 할당    
REVOKE    -  권한을 해제

 

SELECT tname FROM tab;   -> 테이블 목록을 확인할 수 있다.

DESC 테이블명;                    -> 테이블의 구조 ( 테이블의 컬럼 구성)

 

VARCHAR2 (숫자->사용 할 수 있는 바이트 수)
DATE (연원일시분초 저장되어있음)

 

dept       (부서)
emp        (사원)
student    (학생)
professor  (교수)
course     (과목)
score      (기말고사 점수)

SQL 명령어

as생략가능
" " 공백이 들어갔을 때, 별명이 숫자로 시작할 때 씀 = 공백자리에_써도 된다.
null은 연산시 값이 null로 되는데 더하거나 뺄때는 숫자 0으로
곱하거나 나누는것이면 1로 항등원으로 바꿔준다.
NVL(comm,0) , NVL(comm,1)

연결 연산자와 중복 제거
 ' '안에는 대소문자 구분한다.

SELECT [DISTINCT | ALL] 컬럼, 컬럼, ... DISTINCT 중복되지않게 한번만 출력



실습
1. Student, course, professor, score table의 구조를 검색한다. 

2. 모든 학생의 정보를 검색한다. 

SQL> SELECT FROM ;
3. 모든 교수의 정보를 검색한다. 

SQL> SELECT * FROM professor;
4. 모든 과목의 정보를 검색한다. 

SQL> SELECT * FROM course;
5. 기말고사 시험 점수를 검색한다. 

SQL> SELECT result 시험_점수 FROM score;
6. 학생들의 학과와 학년을 검색한다. 

SQL> SELECT major 학과, syear 학년 FROM student;
7. 각 과목의 이름을 검색한다. 

SQL> SELECT cname 과목명 FROM course;
8. 모든 교수의 직위를 검색한다. 

SQL> SELECT pno 교수번호, pname 이름, orders직위 FROM professor;
9. 각 과목의 학점수와 담당교수 번호를 검색한다. 

SQL> SELECT cname 과목명, pno 담당_교수_번호, st_num 학점수 FROM course; 
10. 각 학생들이 속한 학과와 학년을 검색한다. 

SQL> SELECT sname 이름, major 학과, syear 학년 FROM student; 

1. 각 학생의 평균 평점을 검색한다.(별명을 이용)
select sno 학번, sname 이름, avr 평균평점 from student;
2. 각 과목의 학점수는 검색한다.(별명을 이용)
select cname 과목명, st_num 학점수 from course;
3. 각 교수의 지위를 검색한다.(별명을 이용)
select pname 이름, orders 직위 from professor;
4. 급여를 10% 인상했을 때 연간 지급되는 급여를 검색한다. 
select (sal*1.1)*12 급여 from emp;
5. 현재 학생의 평균 평점은 4.0 만점이다. 이를 4.5 만점으로 환산해서 검색한다.
select avr*4.5/4.0 환삼평점 from student;
6. 급여가 10% 인상될 경우 각 사원의 연봉을 검색한다. 
select (sal*1.1)*12 연봉, ename 이름 from emp;
7. 1년 동안 지급되는 급여와 10% 인상되어 1년 동안 지급되는 급여 간에 차액을 검색한다. 
select (sal*1.1*12)-sal 차액 from emp;
8. 각 학생들의 평균평점을 4.5 만점으로 환산한 경우 각각 평점의 상승폭은 얼마인지 검색한다.
select (avr*4.5/4.0)-avr 상승폭  from student;

1. '____학과인 ____학생의 현재 평점은 __입니다.' 형태로 학생의 정보를 출력한다.
select major||'학과인'||sname||'학생의 현재 평점은'||avr||'입니다.' from student;
2. '____과목은 ____학점 과목입니다.' 형태로 과목의 정보를 출력한다. 
select cname||'과목은'||st_num||'학점 과목입니다.' from course;
3. '____교수는 ____학과 소속입니다.' 형태로 교수의 정보를 출력한다.
select pname||'교수는'||section||'학과 소속입니다.' from professor;
4. 학교에는 어떤 학과가 있는지 검색한다.(학생 테이블 기반으로 검색한다.)
select DISTINCT major from student;
5. 학교에는 어떤 학과가 있는지 검색한다.(교수 테이블 기반으로 검색한다.)
select distinct section from professor;
6. 교수의 지위는 어떤 것들이 있는지 검색한다. 
select distinct orders from professor;
7. '____학생의 4.5 환산 평점은 ____입니다.' 형태로 학생의 환산 평점을 출력한다. 
select sname||'학생의 4.5 환산 평점은'||(avr*4.5/4.0)||'입니다.' from student;
8. '____과목의 담당 교수 번호는 ____입니다.' 형태로 과목의 정보를 출력한다. 
select section||'과목의 담당 교수 번호는'||pno||'입니다.' from professor;
9. 학교에 개설된 과목들은 몇 학점짜리인지 검색한다. 
select distinct cname 과목, st_num 학점 from course;
10. 학생들이 수강중인 과목의 과목번호를 검색한다.
select distinct cname 과목명, cno 과목번호 from course; 

1. 성적순으로 학생의 이름을 검색한다.
select avr 성적, sname 이름 from student order BY 성적 desc;
2. 학과별 성적순으로 학생의 정보를 검색한다. 
select avr 성적, sname 이름, major 학과 from student order by 성적 desc;
3. 학년별 성적순으로 학생의 정보를 검색한다. 
select syear 학년, sname 이름, avr 성적 from student order by 학년,성적 desc;
4. 학과별 학년별로 학생의 정보를 성적순으로 검색한다.
select major 학과, syear 학년, sno 학번, sname 이름, sex 성별, avr 성적 from student order by 학과,학년 desc ,성적 desc; 
5. 학점 순으로 과목 이름을 검색한다. 
select cname 과목명, st_num 학점수 from course order by 학점수 desc;
6. 각 학과별로 교수의 정보를 검색한다.
select  section 소속학과, pno 교수번호, pname 이름, orders 직위, hiredate 부임일 from professor order by 소속학과;
7. 지위별로 교수의 정보를 검색한다. 
select orders 직위, pno 교수번호, section 소속학과, pname 이름, hiredate 부임일  from professor order by 직위 desc;
8. 각 학과별로 교수의 정보를 부임일자 순으로 검색한다. 
select section 소속학과, pname 이름, hiredate 부임일 from professor order by 소속학과,부임일 desc;
9. 급여가 10% 인상된 경우 부서별로 각 사원의 연봉을 연봉순으로 검색한다.
select  job 부서, ename 이름, (sal*1.1*12)+NVL(comm,0) "급여가_10%_인상된_연봉" from emp order by 1.3 desc;
10. 보너스가 100% 인상된 경우 업무별로 각 사원의 연봉을 연봉순으로 검색한다.
select job 부서, ename 이름, (sal*12)+NVL(comm,0)*2 "보너스_100%_포함된_연봉" from emp order by 1,3 desc;

반응형
반응형

오라클
오라클 베이스    : C:\app\client\st01
오라클 홈           : C:\app\client\st01\product\19.0.0\client_1
유닉스 $ORACLE_HOME,  윈도우 %ORACLE_HOME
오라클 홈은 오라클 베이스 밑에 있다. (오라클 베이스의 위치는 컴퓨터 사용환경에 따라 위치가 다름)
TNS_ADMIN : C:\app\client\st01\product\19.0.0\client_1\network\admin


sqlplus 계정/패스워드@TNS명(접속식별자/dal, oracle)
명령 프롬프트 : sqlplus st01/st01@dal (or oracle)
                       : @school.sql (예제)
                       :  select * from emp;

 

데이터베이스의는 정렬할 수 있어야 하고 검색이 되어야 한다. (쉽게 컴퓨터의 폴더 처럼 나누어져 있고 검색이 되어야 한다., 데이터보안은 무결성 보안등급을 사용한다.)

종류

1. RDB : 텍스트형에서만 사용

2. 멀티미디어데이터베이스 : 사진으로 검색하거나 추상적인 표현으로 검색, AI가 이 기능을 이용함

 

RDB
columm : 같은 성격을 가진 데이터 (세로축)
row   : 사상하는 데이터(뭔가를 나타낸다, 가로축), 실체
colum + row : table

relationship : 테이블간의 관계

sqlplus 계정/패스워드@TNS명(접속식별자/dal, oracle)
명령 프롬프트 : sqlplus st01/st01@dal (or oracle)
             @school.sql (예제)
             select * from emp;

 

school.sql 예제의 테이블 구조

dept       (부서)
emp        (사원)
student    (학생)
professor  (교수)
course     (과목)
score      (기말고사 점수)

반응형

+ Recent posts