1. MySQL 설치
   - http://www.mysql.com
   - mysql-noinstall-5.1.61-win32.zip
     . setup폴더에 다운 받은후 압축풀기
     . MySQL 5.1설치


2. MySQL root계정 비번 변경

   - MySQL 서버 실행
   - root계정으로 접속 : 최고 관리자 계정이며,
     처음 MySQL설치시 패스워드가 지정되어 있지 않다

   - d:\ERPJava_04\setup\doc\my.ini 복사
      d:\ERPJava_04\mysql 붙여넣기

   - port=3306 (56번 라인 포트번호 확인)
   - D:/JSP_201202AM/mysql51/my.ini"로 작성후 저장
     (74, 77번라인 경로 수정)
   - my.ini 파일은 mysql 폴더 내에 있어야
     서버 기동시 환경정보를 읽어 들일 수 있다.

   - MySQL 데이터베이스 서버 시작
      (D:\ERPJava_04\mysql\bin\mysqld.exe)

   - MySQL 종료는
      작업관리자에서 -> mysqld.exe 선택 -> 프로세스 끝내기 !!

   - cmd창에서
     d:
     cd d:\ERPJava_04\mysql\bin 폴더 이동
     D:\ERPJava_04\mysql\bin>mysql -u root    //-u: 계정지정

 

   - mysql>show databases;

   - mysql>use mysql;      //mysql 데이터베이스 사용

   - mysql>show tables;   //mysql 데이터베이스에 있는 테이블 보기

   - mysql>select host,user,password from user; //user테이블의 레코드 보기

   - mysql>update user SET password=PASSWORD('1234')
                where user='root';
                //root계정의 비밀번호 '1234'를  암호화해서 수정한다.

   - mysql>flush privileges;  //권한 및 계정 정보를 서버에 재적용한다.

   - mysql>select host,user,password from user; //user테이블의 수정된 레코드 보기

   - mysql>exit //MySQL 빠져 나가기
 

   //비밀번호 지정후 다시 root계정으로 접속

   //-u: 로그인 계정 지정
   //-p: 패스워드를 입력받는 계정임을 명시,
           패스워드가 있으면 반드시 명시 

 

  - d:\ERPJava_04\mysql\bin>mysql -u root -p

  - create database erpjavadb;
  - use erpjavadb;

 

create table tb_sungjuk(
  sno      int            not null,
  hakno   char(5)      not null,
  uname varchar(20) not null,
  kor      tinyint        default 0,
  eng     tinyint        default 0,
  mat     tinyint        default 0,
  aver    int             null,
  address varchar(20) null
);

 

insert into tb_sungjuk
values(1,'g1001','홍길동',50,60,70,0,'안양');

 

update tb_sungjuk
set aver=(kor+eng+mat)/3;
 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[07] 오라클 조인  (0) 2012.05.11
[06] 오라클 제약조건  (0) 2012.05.10
[05] 오라클 함수  (0) 2012.05.10
[04] where조건절  (0) 2012.05.10
[03] 오라클 자료형  (0) 2012.05.08

-- tb_student테이블에 레코드 추가하기

insert into tb_student(hakno,uname,address,phone)
values('g1001','홍길동','서울','111-5558')

insert into tb_student(hakno,uname,address,phone)
values('g1002','홍길동','안양','787-8877') 

insert into tb_student(hakno,uname,address,phone)
values('g1003','개나리','서울',554-9632)

insert into tb_student(hakno,uname,address,phone)
values('g1004','홍길동','부평','555-8844')

insert into tb_student(hakno,uname,address,phone)
values('g1005','진달래','서울','544-6996')

insert into tb_student(hakno,uname,address,phone)
values('g1006','개나리','안양','777-1000')

 

-- tb_gwamok테이블 행 추가하기
insert into tb_gwamok(gcode,gname,ghakjum)
values('p001','OOP',3)

insert into tb_gwamok(gcode,gname,ghakjum)
values('p002','Oracle',3)

insert into tb_gwamok(gcode,gname,ghakjum)
values('p003','MVC1',2)

insert into tb_gwamok(gcode,gname,ghakjum)
values('d001','웹표준',2)

insert into tb_gwamok(gcode,gname,ghakjum)
values('d002','포토샵',5)

insert into tb_gwamok(gcode,gname,ghakjum)
values('p004','MVC2',3)


문)각 주소별로 학생이 몇명인지 갯수를 구하시오

select address,count(*)
from tb_student
group by address
order by count(*) desc

 

문) 각 주소에 3명이하만 살고 있는 학생이 누구인지?

select address,uname
from tb_student
where address in (
                         select address
                         from tb_student
                         group by address
                         having count(*)<3
                        )


---------------------
-- tb_sugang 행 추가하기

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1001','p001')

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1002','p002')

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1002','p001')

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1001','p003')

-----------------------

 

[JOIN]
- 테이블과 다른 테이블을 조합하는 것
- 테이블명 join 테이블명 on 조건

 

select * from tb_student join tb_sugang
on tb_sugang.hakno=tb_student.hakno

select * from tb_gwamok join tb_sugang
on tb_sugang.gcode=tb_gwamok.gcode


-- 별칭 사용
select * from tb_student AA join tb_sugang BB
on AA.hakno=BB.hakno

select CC.*
from (
         select * from tb_student AA join tb_sugang BB
         on AA.hakno=BB.hakno
        ) CC
where CC.address='안양'


select CC.*
from (
         select AA.hakno,AA.uname,AA.address,BB.gcode from tb_student AA join tb_sugang BB
         on AA.hakno=BB.hakno
        ) CC
where CC.address='안양'

 

-- (1)
select DD.uname,CC.*
from (
        select AA.gname,BB.* from tb_gwamok AA join tb_sugang BB
        on AA.gcode=BB.gcode
        where BB.hakno='g1002'
       ) CC join tb_student DD
on CC.hakno=DD.hakno


-- (2)
select * from tb_gwamok AA join tb_sugang BB
on AA.gcode=BB.gcode join tb_student CC
on BB.hakno=CC.hakno
where BB.hakno='g1002'

----------

 

문) 각 학생별로 수강신청한 총학점, 이름, 학번을 검색

(1)
select CC.hakno,sum(CC.ghakjum) as gsum
from (
        select BB.hakno,AA.ghakjum from tb_gwamok AA join tb_sugang BB
        on AA.gcode=BB.gcode
       ) CC
group by CC.hakno


(2)
select DD.*,ST.uname
from
(
  select CC.hakno,sum(CC.ghakjum) as gsum
  from (
          select BB.hakno,AA.ghakjum from tb_gwamok AA join tb_sugang BB
          on AA.gcode=BB.gcode
         ) CC
  group by CC.hakno
) DD join tb_student ST
on DD.hakno=ST.hakno

 

(3)학번 'g1002'
select DD.*,ST.uname
from
(
  select CC.hakno,sum(CC.ghakjum) as gsum
  from (
          select BB.hakno,AA.ghakjum from tb_gwamok AA join tb_sugang BB
          on AA.gcode=BB.gcode
         ) CC
  group by CC.hakno
) DD join tb_student ST
on DD.hakno=ST.hakno
where DD.hakno='g1002'

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[My-SQL 서버 설치 및 환경 구축]  (0) 2012.05.11
[06] 오라클 제약조건  (0) 2012.05.10
[05] 오라클 함수  (0) 2012.05.10
[04] where조건절  (0) 2012.05.10
[03] 오라클 자료형  (0) 2012.05.08

 

[제약조건]

- 데이터 무결성을 위해 강제성을 테이블의 칼럼에 부여
- 자료의 무결성을 테이블 설계에서 강제하여 지킴으로서
   보다 효율적으로 데이터관리의 중요한 역할을 함.(강제성)

 

1. primary key 기본키
  - 테이블의 내용에서 각각의 레코드(인스턴스)를 대표하는
    유일한 컬럼은 반드시 존재해야 됨.
    why? 해당 레코드만 딱 꼬집어서 수정, 삭제, 조회하기 위해
    즉 where절에 걸릴수 있는 대표적인 컬럼을 미리 강제한다.
  - primary key는 테이블당 1개씩 반드시 존재해야 한다.
  - primary key는 null값을 넣을수 없다.
  - 유일성 보장, not null 속성을 포함

 

2. not null
  - null값(빈값)을 허용하지 않겠다.
    (해당컬럼에 무조건 데이터 입력해라)
    예)아이디,주민번호,패스워드,취미(x)

 

3. default 제약조건
  - 사용자가 값을 안넣으면 해당컬럼이 정의한 기본값을
     자동으로 넣어준다.

 

4. unique 

  - 중복된 컬럼내용을 허용하지 않는다

  - 유일성 보장

  - 단 1회 null 값 허용

  - 테이블당 여러 칼럼 가능

    예) jumin varchar2(13) unique

 

5. check

  - 데이터의 범위를 제한시키는 제약조건)

     예) marry varchar2(10) check(marry in ('기혼','미혼'))

          kor    number(3)    check(kor between 0 and 100) --0~100

 

6. 참조무결성 Foreign Key 제약조건

  - 부모:Primary Key---자식:Foreign Key

   - 부모테이블의 PK를 참조하는 자식테이블의 해당 칼럼

      이때 자식테이블의 FK는 부모테이블의 PK와 자료형이 일치되야 한다.

 

---------------------------------------------------학생테이블
create table tb_student(
   hakno   char(5)      not null
  ,uname  varchar(10) not null
  ,address varchar(20) not null
  ,phone   varchar(20)
  ,regdt     date          default sysdate
  ,primary key(hakno)
)

 

---------------------------------------------------과목테이블
create table tb_gwamok(
   gcode    char(4)      not null
  ,gname   varchar(10) not null
  ,ghakjum number(2)  default 1
  ,regdt     date          default sysdate
  ,primary key(gcode)
)

 

---------------------------------------------------수강테이블
create table tb_sugang(
   sno number(3) not null
  ,hakno char(5)  not null
  ,gcode char(4)  not null
  ,primary key(sno)
)


---------------------------------------------------시퀀스 생성

자동으로 일련번호를 부여

 

create sequence 시퀀스이름
start with 1       --시작값
increment by 1  --증가값
nocycle            --반복안함
nocache           --캐시 사용안함 cache 2


create sequence sugang_seq
start with 1
increment by 1
nocycle
nocache

 

insert into tb_sugang(sno,hakno,gcode)
values (sugang_seq.nextval,'g1001','p001')

위의 insert명령어를 3번정도 반복한 후 레코드 조회

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[My-SQL 서버 설치 및 환경 구축]  (0) 2012.05.11
[07] 오라클 조인  (0) 2012.05.11
[05] 오라클 함수  (0) 2012.05.10
[04] where조건절  (0) 2012.05.10
[03] 오라클 자료형  (0) 2012.05.08

 

-----------------------------------------------------group by
- 동일한 내용의 칼럼끼리 묶어주는 기능
- 그룹을 지었을 경우 대표성을 가질만한 값(집계함수)이나
   칼럼에 한해서 select할수 있다.
- group과 * 안 친하다
- 2차, 3차 그룹을 지을 수 있다.

 

select uname
from tb_sungjuk
group by uname

 

-----------------------------------------------------오라클 함수

- max() 칼럼가운데 가장 큰값
- min() 칼럼가운데 가장 큰값
- sum() 해당칼럼의 전체 합계
- avg() 해당칼럼의 전체 평균
- count() 레코드 갯수. 단 null값이 있는 칼럼은 제외
   count(*) 전체레코드갯수 확인할 때 주로 사용한다.

 

select max(kor)  from tb_sungjuk
select min(kor)   from tb_sungjuk
select sum(kor)  from tb_sungjuk
select avg(kor)    from tb_sungjuk
select count(kor) from tb_sungjuk
select count(*) from tb_sungjuk

 

- upper() 대문자로 바꾸기
select upper(hakno)  from tb_sungjuk

 

- lower() 소문자로 바꾸기
select upper(hakno)  from tb_sungjuk

 

- substr() 문자열 자를때
   index는 1부터 시작, 한글 1자

- length() 문자갯수
   한글, 영숫자모두 1자 처리

 

- as 칼럼명, 테이블명에 대해서 별칭을 부여할 수 있다.
   논리적테이블(재가공된 테이블)에서 부여된 칼럼명, 테이블명은
   사용자가 접근해서 사용가능하다

 

select substr(hakno,3), hakno, length(hakno)
from tb_sungjuk
order by substr(hakno,3)

 

select substr(hakno,3) as str, hakno, length(hakno) as len
from tb_sungjuk
order by str


- ROUND() 반올림
select round(aver,1)
from tb_sungjuk -- 소수 첫째 자리까지 반올림

select round(tot,-1)
from tb_sungjuk -- 1의 자리, 10의 자리에서 반올림(절삭)


- to_char() 문자열로 형변환
SELECT regdt, TO_CHAR(regdt, 'yyyy-mm-dd')
FROM tb_sungjuk;

SELECT regdt, TO_CHAR(regdt, 'yyyy-mm-dd hh:mi:ss')
FROM tb_sungjuk;

SELECT regdt,
substr(TO_CHAR(regdt, 'yyyy-mm-dd hh:mi:ss'),12)
FROM tb_sungjuk;


- CASE 문
SELECT uname,aver,kor,hakno,
            CASE hakno WHEN 'g1001' THEN kor+10
                             WHEN 'g1002' THEN kor+20
                             WHEN  'g1003' THEN kor+30
            ELSE kor+50 END bonus
FROM tb_sungjuk
order by bonus

 

-----------------------------------------------------[예제]

문) 이름이 동일한 사람들끼리 국어점수,수학점수,영어점수 평균

select uname,avg(kor),avg(mat),avg(eng)
from tb_sungjuk
group by uname

select uname,
         round(avg(kor),2) as k_avg,
         round(avg(mat),2) as m_avg,
         round(avg(eng),2) as e_avg
from tb_sungjuk
group by uname

 

--------------------------------------------------------

[서브쿼리]
- 자신의 테이블에서 데이터를 가공을 해서 자신의 테이블에서 검색하는 것
- 집계함수에서 나온 결과값을 () 묶어서 해석
 
[Join 조인]
- 두개의 테이블을 하나의 테이블로 합쳐서 꼭 한개의 테이블처럼 사용하는 것

 

-------------------------------------------------------[예제]

문) 우리반 학생들의 국어점수평균보다 낮은 학생들 검색

select *
from tb_sungjuk
where kor<(select avg(kor) from tb_sungjuk)

 

select count(*)
from tb_sungjuk
where kor<(select avg(kor) from tb_sungjuk)

 

select *
from tb_sungjuk
where kor<(select avg(kor) from tb_sungjuk)
and uname='개나리'

 

문) 학번 'g1002'의 합계점수보다 잘한 학생들 검색

select *
from tb_sungjuk
where tot >( select tot
                 from tb_sungjuk
                 where hakno='g1002' )

 

---------------------------------------------------having 조건절
  - group by에 의해서 나온 레코드에 조건을 추가할때

 

문) 이름이 동일 것끼리 국어점수를 평균을 구한 후,
     그 평균이 60점이상인 레코드 검색

select avg(kor)
from tb_sungjuk
group by uname
having avg(kor)>=60

 

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[07] 오라클 조인  (0) 2012.05.11
[06] 오라클 제약조건  (0) 2012.05.10
[04] where조건절  (0) 2012.05.10
[03] 오라클 자료형  (0) 2012.05.08
[02] 오라클 설치  (0) 2012.05.08

 

* 주제별 테이블

create table 성적테입블명()
drop table 테이블명

create table 회원테입블명()

create table 게시판테입블명()

create table 쇼핑카트테입블명()

-------------------------
* 데이터베이스 생성
   create database DB명

* 데이터베이스 삭제
   drop database DB명

* 데이터베이스 사용
   use DB명
-------------------------
* 오라클 관리 툴
   - SQL Explorer
   - 오라클 Developer

------------------------
* SQL 명령
  - create
  - insert
  - update
  - delete
  - select

-----------------------
* 테이블의 종류
1. 물리적 테이블
   - 실제 존재하는,
   - 사용자 create 명령어를 사용해서 생성한 테이블
   - create table tb_sungjuk()

2. 논리적 테이블
   - select명령어를 이용해서 검색된 레코드의 집합
   - 물리적테이블에서 조건에 만족해서 새롭게 가공된 테이블

3. 물리적테이블과 논리적 테이블의 등급은 서로 동등하다
-------------------------
* where 조건절
레코드 전체가 대상이 아니라
조건에 만족하는 레코드만 대상으로 한정하고 싶을때 where 조건절을 사용한다

[연산자]
  산술연산자:
  비교연산자: > < >= <=  <>서로 같지 않다 서로같다=
  논리연산자: and(&&)  or(||) not(!)

  between 시작값 and 끝값

  in (값1,값2,값n~)

  like연산자
     - 비슷한 유형, 패턴을 검색할 때
     - 와일드 문자 : %, _
     - 검색할때 주로 사용된다

 

1) 평균 70점이상 학생이름 검색
select uname
from tb_sungjuk
where aver>=70

 

2) 학번 'g1004' 인 학번,학생이름과 평균 검색
select hanno,uname,aver
from tb_sungjuk
where hakno='g1004'

 

3) 국어 50점이상이고 영어 50점이상인
    학생이름,국어점수,영어점수검색
select uname,kor,eng
from tb_sungjuk
where kor>=50 and eng>=50

 

4) 국어점수가 70~100점사이인 학생이름,국어점수 검색
select uname,kor
from tb_sungjuk
where kor>=70 and kor<=100

 

select uname,kor
from tb_sungjuk
where kor between 70 and 100

 

5) 이름이 '개나리', '무궁화' 인 학번,이름,평균 검색
select hakno,uname,aver
from tb_sungjuk
where uname='개나리' or uname='무궁화'

 

select hakno,uname,aver
from tb_sungjuk
where uname in ('개나리','무궁화')


6) 홍씨성을 검색

select uname
from tb_sungjuk
where uname like '홍%'

 

select uname
from tb_sungjuk
where uname like '%화'  --'화'로 끝나는 것 검색

 

select uname
from tb_sungjuk
where uname like '%홍%'  --'홍'이라는 글자가 들어가 있는것 검색

 

'홍_' 두글자중에서 홍으로 시작하는 것
'_홍' 두글자중에서 홍으로 끝나는 것

 

7) NULL 컬럼만 출력
  - 컬럼의 값이 입력된 적이 없었을 경우 나타나는 기호.

 

select *
from tb_sungjuk
where tot=null --비추천


--tot칼럼에서 null값 검색
select *
from tb_sungjuk
where tot is null --추천

 

--tot칼럼에서 not null값 검색
select *
from tb_sungjuk
where tot is not null


[정렬 sort]
- 오름차순 Ascending ASC
   0->10, A->Z, a->z, ㄱ->ㅎ

- 내림차순 Descending DESC

 

order by 칼럼명 정렬유형(오름,내림)
오름차순 asc 생략가능
내림차순 desc

 

select *
from tb_sungjuk
order by kor  --오름차순

 

select *
from tb_sungjuk
order by kor desc --내림차순

 

문)국어점수가 50점이상인 레코드를 내림차순으로 출력

select *
from tb_sungjuk
where kor>=50
order by kor desc

 

문)2차 정렬
select *
from tb_sungjuk
order by mat, uname desc

insert into tb_sungjuk(hakno,uname,kor,eng,mat,regdt)
values ('g1006','개나리',50,60,70,sysdate)


* distinct 중복 컬럼값의 출력

   select distinct uname
   from tb_sungjuk

 

* group by 칼럼명
  집계함수에 많이 사용 (총점,평균,최대값,최소값,카운트)

  중복칼럼끼리 그룹으로 묶어줌
   select uname
   from tb_sungjuk
   group by uname

 

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[06] 오라클 제약조건  (0) 2012.05.10
[05] 오라클 함수  (0) 2012.05.10
[03] 오라클 자료형  (0) 2012.05.08
[02] 오라클 설치  (0) 2012.05.08
[01] 데이터베이스 개론  (0) 2012.05.08

 

[오라클 자료형]

 

1. char(n):고정길이 문자 데이터 처리
   - name char(10) NOT NULL
   - 1바이트의 문자열이 할당 되더라도 10바이트를 전부 사용한다.
     처리속도가 가장 빠른 문자 타입. 하지만 메모리 낭비가 가장 심함.
     따라서 쓰이는 곳은 코드표,우편번호,주민번호등 길이가 일정한 컬럼에만 사용된다.
     용량이 남는 경우 공백으로 채워진다.
     따라서 검색시 문제가 될 수 있음으로 설계된 크기를 전부 사용하는 것을 권장함.
     "happy     "
     zipcode char(7)
     jumin     char(13)

 

2. varchar, varchar2:가변길이 문자 데이터 처리
   - name varchar(10) NOT NULL
   - 1바이트를 사용하면 나머지 9바이트는 재사용 가능. 용량을 많이 절약할 수 있다.
     하지만 사용된 사이즈를 계산해야 함으로 속도가 느린 문자 타입.
     주로 길이가 심하게 변하는 게시판의 제목등에 많이 사용된다.
     "happy"

 

3. number(n), number(p,s): 숫자를 10^-38 ~ 10^38,
   p는 전체 자리수, s는 소수점 이하의 자리 수
   . kor number(5) NOT NULL: -99999 ~ +99999
     숫자 5자리를 저장할 수 있다.
   . varchar와 같은 가변길이 타입을 지원한다.
   . kor number(3) -999~+999
   . aver number(5,2)

 

4. Date: 날짜형
   . regdt date not null

 

--------------------------------------

 

* 테이블(table)의 구조

  - 자유게시판 (제목,내용,작성자,작성일,조회수)
  - 회원    (이름,아이디,비번,주소,핸드폰,이메일)
  - 성적    (학번,이름,국어,영어,수학,총점,평균)
  - 데이터를 저장하고자 하는 기본 구성 단위
  - 테이블 table : 데이터베이스의 구성요소. 엔티티(entity)
  - 칼럼 column, 필드field, 열
  - 레코드 record, row 행
  - 테이블명, 칼럼명의 한글이름은 절대 불가
  - SQL문 대소문자 구분 안함.


* 테이블 생성 형식
   create table 테이블명(
       칼럼명1 자료형1 조건1
      ,칼럼명2 자료형2 조건2
      ,칼럼명3 자료형3 조건3
   );
  
* 테이블 삭제
drop table 테이블명;
drop table tb_sungjuk;

 

------------------------------

 

* 성적테이블 설계
create table tb_sungjuk(
   hakno   char(5)      not null --학번
   ,uname varchar(10) not null -- 이름
   ,kor      number(3)  not null
   ,eng     number(3)  not null
   ,mat     number(3)  not null
   ,tot      number(3)   default 0 --기본값 0
   ,aver    number(5,2) default 0
   ,regdt   date            not null --등록일
);

 

* 레코드 조회 및 검색
select 칼럼명1,칼럼명2,칼럼명n~ from 테이블명 where 조건절

 

select hakno,uname,kor,eng,mat
from tb_sungjuk;

select *
from tb_sungjuk;


* 레코드 추가 및 삽입

insert into 테이블명(칼럼명1,칼럼명2,칼럼명n~)
values (값1, 값2, 값n~)

 

insert into 테이블명
values (학번값1, 이름값2, 국어점수값3, 영어점수값4, 수학점수값5
           ,총점값5,평균값6,등록일값6)
추가하고자 하는 칼럼명이 생략이 되면
모든칼럼에 값을 칼럼명 순서대로 입력해야 한다.


* sysdate : 현재 DB서버의 날짜(년월일시분초)값을 읽어올수 있다.

 

insert into tb_sungjuk(hakno,uname,kor,eng,mat,regdt)
values('g1001','홍길동',40,50,70,sysdate);

insert into tb_sungjuk(hakno,uname,kor,eng,mat,regdt)
values('g1002','개나리',60,50,80,sysdate);

insert into tb_sungjuk(hakno,uname,kor,eng,mat,regdt)
values('g1003','무궁화',90,60,70,sysdate);

insert into tb_sungjuk(hakno,uname,kor,eng,mat,regdt)
values('g1004','봉선화',100,55,70,sysdate);

insert into tb_sungjuk(hakno,uname,kor,eng,mat,regdt)
values('g1005','진달래',30,90,80,sysdate);

 

* 레코드 수정
update 테이블명
set 칼럼명1=값1,칼럼명2=값2,칼럼명n=값n~

 

update tb_sungjuk
set tot=kor+eng+mat, aver=tot/3;

 

* 레코드 삭제
delete from 테이블명

delete from tb_sungjuk;

 

* 날짜형 형변환
SELECT TO_CHAR(regdt, 'YYYY-MM-DD')
from tb_sungjuk


SELECT TO_CHAR(regdt, 'YYYY-MM-DD HH:MI:SS')
from tb_sungjuk


* where 조건절
레코드 전체가 대상이 아니라 조건에 만족하는 레코드만 대상으로 한정하고 싶을때
where 조건절을 사용한다

 

* 연산자
산술연산자:
비교연산자: > < >= <=  <>서로 같지 않다 서로같다=
논리연산자: and(&&)  or(||) not(!)

 

* 국어점수가 70점이상 레코드 검색
select hakno,uname,kor
from tb_sungjuk
where kor>=70


* 국어점수 50점이하, 수학점수 50점이하, 영어점수 50점이하
select *
from tb_sungjuk
where kor<=50 and mat<=50 and eng<=50

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[05] 오라클 함수  (0) 2012.05.10
[04] where조건절  (0) 2012.05.10
[02] 오라클 설치  (0) 2012.05.08
[01] 데이터베이스 개론  (0) 2012.05.08
오라클 기본  (0) 2011.06.21

 

[Oracle Database XE 설치]

-  http://www.oracle.com 회원가입후 다운

- 오라클은 데이터베이스를 처음 사용하는소규모 환경을 위한 엔트리 레벨 솔루션으로
   Oracle Database 10 g Express Edition(Oracle Database XE)

- Oracle Database XE는 다음과 같은 환경의 사용자에게 매우 적합한 솔루션
   데이터베이스를 필요로 하는 PHP, Java, .NET 등의 애플리케이션을 개발하는 개발자

- Oracle Database XE를 이용하여 애플리케이션을 개발하는 경우,
   데이터베이스 라이센스 비용이 전혀 들지 않음

 

 

[OracleXE설치후 환경설정]
  시작->Oracle Database 10g Express Edition-> Database 홈페이지로 이동

   -> system(아이디) -> 1234(비번)
  관리 -> 데이터베이스 사용자 -> 생성

  아이디 : hr
  암호 :  hr
  계정상태 : 잠금해제
  사용자권한 : 모두선택
  사용자변경
  ->로그아웃
  hr 로그인->SQL명령

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[04] where조건절  (0) 2012.05.10
[03] 오라클 자료형  (0) 2012.05.08
[01] 데이터베이스 개론  (0) 2012.05.08
오라클 기본  (0) 2011.06.21
쿼리문  (0) 2011.03.29

 

1. 데이터베이스의 개념

  - 데이터의 중복을 막을 수 있고 자료의 일관성을 유지할 수 있다.
  - 데이터를 쉽게 검색 할 수 있고 데이터의 통합이 쉽다.
  - 여러 사람이 함께 자료를 열람 할 수 있고 보안을 적용 하기가 쉽다.
  - 대용량의 저장 공간을 제공 받을수 있다.

 

2. DBMS의 규모 (DataBase Management System)
   Mysql : 중소 기업, PHP, JAVA.
   SQLite: 스마트폰 및 임베디드 기기의 내장 데이터베이스로 사용, Android, iPhone.
   Oracle: 중대규모 기업의 데이터베이스로 사용, JAVA.
   MS-SQL: 중소 기업, MS기반 운영체제만 사용 가능, ASP.NET.
   Access : 소규모 .mdb
   Google Cloud: Java, Perl

 

-----------------------------------

 

[SQL 문] Structured Query Language

 

어떻게 작업을 수행할지가 아니라
무엇을 해야할지에 관해 정의하는 결과중심적 언어.
절차적은 아님.
cf)자바는 절차적언어 (순서대로 읽음)
 

1. DCL명령어 (Data Control Language 제어어)
   - 사용자가 별로 쓸일 없음. 호스팅업체가 주로 사용
   - grant 사용자 접근 권한부여
   - revoke 사용자 접근 권한 취소
   - deny 특정사용자만 접근차단


2. DDL명령어 (Data Definition Language 정의어)
   - DB및 TABLE에 대한 정의
   - Create 생성
   - Drop 삭제
   - Alter 수정


3. DML명령어 (Data Manipulation Language 조작어)
   - 레코드작업
   - Select 조회, 검색, 가공
   - insert 삽입, 추가
   - update 수정
   - delete 삭제

 

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[03] 오라클 자료형  (0) 2012.05.08
[02] 오라클 설치  (0) 2012.05.08
오라클 기본  (0) 2011.06.21
쿼리문  (0) 2011.03.29
테이블  (0) 2011.03.29

create table tb_student(

   hakno     char(4)          primary key

,  uname    varchar2(10)   not null

,  phone    varchar2(15)   not null

,  address  varchar2(20)


--과목테이블

create table tb_gwamok(

   gcode char(4) primary key

,  gname varchar2(10) not null

,  hakjum number default 0

)


select * from tb_student;

select * from tb_gwamok;


insert into tb_student(hakno,uname,phone,address)

values('1001','홍길동','555-8798','서울')


insert into tb_student(hakno,uname,phone,address)

values('1002','민들레','444-8745','서울');


insert into tb_student(hakno,uname,phone,address)

values('1003','개나리','333-8965','제주');


insert into tb_student(hakno,uname,phone,address)

values('1004','무궁화','222-4125','대전');


insert into tb_student(hakno,uname,phone,address)

values('1005','라일락','111-8963','서울');


select * from tb_student


insert into tb_gwamok(gcode,gname,hakjum)

values('P01','자바',3);

insert into tb_gwamok(gcode,gname,hakjum)

values('D01','포토샵',2);

insert into tb_gwamok(gcode,gname,hakjum)

values('C01','바리스타',1);

insert into tb_gwamok(gcode,gname,hakjum)

values('P02','오라클',2);

insert into tb_gwamok(gcode,gname,hakjum)

values('P03','JSP',5);


select * from tb_gwamok


create table tb_sugang(

   sno      number     primary key

,  hakno   char(4)      not null

,  gcode  char(4)      not null

,  sdt      date         default   sysdate --현재 시스템 날짜

)


create sequence sugang_sno

insert into tb_sugang(sno,hakno,gcode)

values(sugang_sno.nextval,'1001','P01')

insert into tb_sugang(sno,hakno,gcode)

values(sugang_sno.nextval,'1001','P02');

insert into tb_sugang(sno,hakno,gcode)

values(sugang_sno.nextval,'1001','P03');

insert into tb_sugang(sno,hakno,gcode)

values(sugang_sno.nextval,'1002','D01');

insert into tb_sugang(sno,hakno,gcode)

values(sugang_sno.nextval,'1003','P01');


delete from tb_sugang


select * from tb_sugang







insert into tb_sugang(sno,hakno,gcode)

values(1,'1001','P01')


select * from tb_sugang


1) 학번 1001 입력하면 학생 정보 출력


select *

from tb_student

where hakno='1001'



2) 과목이름 입력하면 과목정보 출력


select *

from tb_gwamok

where gname='오라클'



select *

from tb_gwamok

where gname like '자%' --비슷한 유형


like '%자'

like '%자%'




3) 학번 1001 입력하면 수강정보 출력

select *

from tb_sugang

where hakno='1001'

================================================

*조인형식

select 칼럼명

from 테이블명 join 테이블명

on 조건절


select *

from T1 join T2

on T1.x=T2.y


select T1.*,T2.*,T3.*

from T1 join T2

on T1.x=T2.y join T3

on T2.y=T3.z



==============================================


4)수강신청을 한 학생의 학번과 이름 출력


select tb_sugang.*, tb_student.*

from tb_sugang join tb_student

on tb_sugang.hakno=tb_student.hakno

where tb_sugang.hakno='1001'



select AA.*, BB.uname

from tb_sugang AA join tb_student BB

on AA.hakno=BB.hakno

where AA.hakno='1001'



5)수강신청을 한 학생들의  이름, 수강과목이름, 학점을 출력

select tb_sugang.*, tb_student.uname, tb_gwamok.gname,tb_gwamok.hakjum

from tb_sugang join tb_student

on tb_sugang.hakno=tb_student.hakno join tb_gwamok

on tb_sugang.gcode=tb_gwamok.gcode

where tb_sugang.hakno='1001'

=============================================================


select tb_sugang.*, tb_student.uname, tb_gwamok.gname,tb_gwamok.hakjum

from tb_sugang join tb_student

on tb_sugang.hakno=tb_student.hakno join tb_gwamok

on tb_sugang.gcode=tb_gwamok.gcode


================================================================


1)과목코드 P01를 입력하면 학번,이름,과목이름,학점 출력


select tb_sugang.hakno,tb_student.uname,tb_gwamok.gname,tb_gwamok.hakjum

from tb_sugang join tb_student

on tb_sugang.hakno=tb_student.hakno join tb_gwamok

on tb_sugang.gcode=tb_gwamok.gcode

where tb_sugang.gcode='P01'





2)학번 1001이면서 과목코드 P01를 수강신청했는지 수강정보 출력

select AA.*, BB.uname,CC.gname

from tb_sugang AA join tb_student BB

on AA.hakno=BB.hakno join tb_gwamok CC

on AA.gcode=CC.gcode

where AA.hakno='1001' and AA.gcode=upper('p01')

--upper()대문자로 변경/lower()소문자로 변경


select count(*) from tb_sugang --레코드갯수


select sum(hakjum),avg(hakjum),min(hakjum),max(hakjum)

from tb_gwamok --집계함수



select *

from tb_sugang

order by sno desc


정렬:오름차순 asc, 내림차순 desc


형식)동일한 칼럼의 내용끼리 묶어주는 쿼리문

select 칼럼명 or 집계함수 from 테이블명 group by 칼럼명

group  by절과 * 는 절대 같이 사용할수 없다.

대부분의 group by절은 집계함수와 많이 사용된다.




*수강신청을 한 각각의 학생들이 몇과목을 신청했는지?

select hakno, count(hakno) as 과목수

from tb_sugang

group by hakno

order by count(hakno) asc



3)학번 1001를 입력하면 총 몇학점인지 출력


select SU.hakno,sum(hakjum)

from tb_sugang SU join tb_gwamok GW

on SU.gcode=GW.gcode

group by SU.hakno



having sum(hakjum)<5


select AA.*, BB.uname

from (

          select SU.hakno,sum(hakjum)

          from tb_sugang SU join tb_gwamok GW

          on SU.gcode=GW.gcode

          group by SU.hakno

) AA join tb_student BB

on AA.hakno=BB.hakno

where AA.hakno='1001'




select KK.uname,EE.*

from (

        select hakno,sum(hakjum)

        from (

                 select *

                from tb_sugang AA join tb_gwamok BB

                on AA.gcode=BB.gcode

        ) DD

        group by hakno

) EE join tb_student KK

on EE.hakno=KK.hakno


================================================================

4)각 과목당 수강신청 인원수 출력

select AA.*, BB.gname

from (

      select gcode,count(gcode)

      from tb_sugang SU

      group by gcode

) AA join tb_gwamok BB

on AA.gcode=BB.gcode




5)각 과목당 수강신청 인원수가 1명인 수강정보 출력


select gcode, count(gcode)

from tb_sugang

group by gcode

having count(gcode)=1


6) 수강신청한 학생들 중  총학점의 평균보다 낮게 신청한 학생들의 정보 출력

이영례=========================================================

select AA.*,BB.uname

from (

  select SU.hakno,sum(hakjum)

  from tb_sugang SU join tb_gwamok GW

  on SU.gcode=GW.gcode

  group by SU.hakno

  having sum(hakjum)< (  select avg(hap)

                                from

                                  (   select sum(hakjum) as hap

                                      from tb_sugang SU join tb_gwamok GW

                                      on SU.gcode=GW.gcode

                                      group by SU.hakno

                                  ) --총학점누적

                              ) --총학점에 대한 평균값을 구하고

) AA join tb_student BB

on AA.hakno=BB.hakno


================================================


select *

from tb_gwamok

where hakjum > (select avg(hakjum) from tb_gwamok)



where <

                select avg(hap)

                from      (

                                  select sum(hakjum) as hap

                                  from tb_sugang SU join tb_gwamok GW

                                  on SU.gcode=GW.gcode

                                  group by SU.hakno

                            ) AA


===================================================


혜선=====================================================

select AA.*, ST.uname

from (  select SU.hakno, sum(GW.hakjum) hak

       from tb_sugang SU join tb_gwamok GW

       on SU.gcode=GW.gcode

       group by SU.hakno

        ) AA join tb_student ST

on ST.hakno=AA.hakno

where AA.hak < (   select avg(BB.hak) avghak

                   from  (   select sum(GW.hakjum) hak

                              from tb_sugang SU join tb_gwamok GW

                              on SU.gcode=GW.gcode

                              group by SU.hakno

                                    ) BB

                       )

 

승현========================================================

select uname,s.* 

from ( select s.hakno,sum(hakjum) from tb_sugang s,tb_gwamok g 

         where s.gcode=g.gcode 

         group by s.hakno 

         having sum(hakjum)<(

                                        ( select sum(hakjum) from tb_sugang s,tb_gwamok g 

                                          where s.gcode=g.gcode) / ( select count(distinct hakno) 

                                                                                from tb_sugang)

                                      )

        ) s,tb_student                  

where s.hakno=tb_student.hakno


현국========================================================

select SU.hakno, sum(GW.hakjum), ST.uname

from tb_sugang SU join tb_gwamok GW

on SU.gcode=GW.gcode join tb_student ST

on SU.hakno=ST.hakno

group by SU.hakno, ST.uname

having sum(GW.hakjum) < (  select avg(hap)

                                        from 

                                        (   select SU.hakno, sum(hakjum) as hap

                                            from tb_sugang SU join tb_gwamok GW

                                            on SU.gcode=GW.gcode

                                            group by SU.hakno

                                        )

                                    )


=======================================================================

distinct 동일칼럼에서 중복한 값이 있을경우 대표로 1개만 출력

select hakno from tb_sugang

select distinct(hakno) from tb_sugang


=====================================================================


select count(*) from zipcode

select top 10 *  from zipcode


1) 동이름 '구로'로 시작되는 레코드 갯수

select count(dong) from zipcode where dong like '구로%'


2) 동이름 '사서함'을 끝나는 레코드 갯수

select count(*) from zipcode where dong like '%사서함'

3) 우편번호가 '100'으로 시작하고, 동이름에 '중앙'이 들어가는 레코드 갯수

select count(*) from zipcode where zipcode like '100%' and dong like '%중앙%'

4) 번지에 데이터가 입력되지 않은 레코드 검색

select count(*) from zipcode where bunji is null --is not null

select count(*) from zipcode where bunji=''


5) 서울시중에서 영등포구,구로구,마포구만 검색

select count(*)

from zipcode

where sido='서울'

and  (gugun='영등포구' or gugun='구로구' or gugun='마포구')


select count(*)

from zipcode

where sido='서울'

and gugun in ('영등포구','구로구','마포구')


select * from zipcode where sido='경기' and gugun in ('영등포구','구로구','마포구')



6)서울시의 각각의 구 중에서 구이름, 동갯수를 내림차순으로 출력

select AA.gugun, count(AA.gugun)

from(

      select gugun,dong

      from zipcode

      where sido='서울'

      group by gugun, dong

) AA

group by AA.gugun

order by count(AA.gugun) desc


select gugun, count(distinct(dong))

from  zipcode

where sido='서울'

group by gugun order by count(distinct(dong)) desc





7)전국의 시도별로 각각의 시, 구, 군이 몇개씩 존재하는지 내림차순으로 출력


select AA.sido, AA.gugun, count(AA.gugun)

from(

      select sido, gugun,dong

      from zipcode

      group by sido, gugun,dong

) AA

group by AA.sido, AA.gugun

order by AA.sido,  count(AA.gugun) desc




8)각 도별 시중에서 동갯수가 50이하의 레코드의 도이름, 시이름, 동갯수 내림차순 출력

select AA.sido, AA.gugun, count(AA.gugun)

from(

      select sido, gugun,dong

      from zipcode

      group by sido, gugun,dong

) AA

group by AA.sido, AA.gugun

having count(AA.gugun)<50

order by count(AA.gugun) desc





select * from zipcode


==============================================================

* SQL injection


[제약조건]

- 데이터의 무결성을 위해 강제성을 테이블에 부여한다.

- 자료의 무결성을 테이블 설계단계에서 강제하여 지킴으로써

   보다 효율적으로 데이터 관리의 중요한 역할을 함.(강제성)

   데이터의 결점이 없는 상태를 무결성이라 한다.

   

1. default 제약조건

    사용자가 값을 입력하지 않으면 해당 컬럼이 정의한 기본값으로

    자동으로 넣어준다.

    예) 등록일(현재시스템의 날짜)

         regdt date      default sysdate      오라클 방식

         regdt datetime default getdate()      MS-SQL 방식



2. primary key 기본키

   테이블의 내용에서 각각의 레코드를 대표하는 유일한 칼럼은

   반드시 존재해야 한다.

    왜? 해당 레코드만 꼭 집어서 수정,삭제,조회하기 위해

    즉, where조건절에서 걸릴수 있는 대표적인 칼럼을 미리 강제한다.

    - primary key는 테이블당 1개씩 반드시 존재해야 한다.

    - 조회가 자주 일어나는 칼럼이 primary key의 대상이 된다.

    - primary key 로 설정된 칼럼은 빨리 조회할 수 있는 기능이 추가된다

    - primary key는 null값을 넣을수 없다.

    - 유일성 보장, not null 속성을 포함

    - index (조회를 빠르게 하는 기능)가 해당 컬럼에 적용

    - 오라클(넌클러스터드 인덱스),MS-SQL(클러스터드 인덱스)

    

3. unique 

  - 중복된 컬럼내용을 허용하지 않는다

  - 유일성 보장

  - 단 1회 null 값 허용

  - 테이블당 여러 칼럼 가능

    예) jumin varchar2(13) unique

    

4. not null

  - null값(빈값)을 허용안함(해당 컬럼에 무조건 데이터 입력해야함)

    예)아이디, 비번, 주민번호.....취미(X)

         upw   varchar2(8)      not null   --비번

         habbit varchar2(8)                   --취미

         

5. check

  - 데이터의 범위를 제한시키는 제약조건)

     예) marry varchar2(10) check(marry in ('기혼','미혼'))

          kor    number(3)    check(kor between 0 and 100) --0~100



6. 참조무결성 Foreign Key 제약조건

   - 부모테이블의 PK를 참조하는 자식테이블의 해당 칼럼

      이때 자식테이블의 FK는 부모테이블의 PK와 자료형이 일치되야 한다.

      

      

      create table student(

         hakno char(4) primary key

         ,regdt date    default sysdate

      )

      

      create table sugang(

         sno     number primary key

         ,hakno char(4)  references student(hakno)

                              on delete cascade

      )

  --hakno char(4)  foreign key references student(hakno) MS-SQL문법

drop table sugang

insert into student(hakno) values('1001');

insert into student(hakno) values('1002');


select * from student


insert into sugang(sno,hakno) values(1,'1001');  --잘된 예

insert into sugang(sno,hakno) values(1,'1004');  --못된 예


=============================================================


           부모테이블                                      자식테이블

-------------------------------------------------------------

입력     상관없음                                         반드시 부모테이블에 있는

                                                                데이터가 들어간다


수정    수정하려는 데이터가 자식테이블에서    부모테이블에 존재하는                

          참조하고 있는지 검증                          다른 데이터로 변경가능


삭제    삭제하려는 데이터를 자식테이블이        제약없음

          참조하고 있는지를 검증

-------------------------------------------------------------


[관계형 데이터베이스]

개념:데이터베이스내의 테이블은 최소한의 의미(주제)를 가지고

       테이블을 나누어서 구성하되, 그 테이블에 있는 컬럼을 연결한 것이다.

       (부:PK-자:FK)

       

* 주제별 테이블은 서로 관계가 형성되는 총3가지가 있다.

1) 1:1 두 테이블간 어떤 테이블의 PK라도 다른 테이블에 전이되어도 상관없다.

2) 1:N 두 테이블간의 관계를 위해서 교차테이블을 만들 필요가 없다.

         단, 1관계에 있는 PK를 N관계에 있는 테이블에 컬럼으로 전이시켜

         관계를 맺는다.

3) N:M 두 테이블간의 관계를 위해서 교차테이블을 반드시 만든다.

          제4정규화작업


* 부모테이블(1관계)의 PK가 자식테이블(N관계)의 FK로 전이된다.

* FK로 두 테이블간의 데이터 무결성을 강제할 수 있다.

* JOIN작업으로 원하는 작업을 처리할 수 있다.

=================================================================

- 뷰 View

테이블 전체를 보여 줘서는 안되는 경우, 보여줄 컬럼들만 가져오는 뷰를 만들어서

사용한다. 사용의 편의성, 보안상의 이유

이미 존재하는 혹은 그 이상의 테이블에서 원하는 데이터만 정확히 가져올 수

있도록 미리 원하는 컬럼만 모아 가상적으로 만든 테이블이다. 가상테이블


- 트리거 Trigger

자동화와 연결, 연쇄반응, 목적은 무결성의 원칙을 유지


- 인덱스 index

데이터베이스내의 테이블에서 원하는 정보를 좀더 빨리 찾아줄수 있게 데이터의

위치정보를 모아놓은 데이터베이스내의 개체.

빠르게 찾자. 조회를 빠르게 하자.

DB성능튜닝에서의 핵심기술.


* 인덱스는 정렬되어 있다.

1)사전자체가 인덱스 : 클러스터드clustered 인덱스

2)책뒤에 인덱스 페이지를 따로 만든다 : 넌클러스터드nonclustered 인덱스


=========================================================

create table 테이블명

create view 뷰이름

create trigger 트리거이름

create index 인덱스명

=========================================================

drop table 테이블명

drop view 뷰이름

drop trigger 트리거이름

drop index 인덱스명

=========================================================

* 포인트point 쿼리

조회되는 데이터가 한두개

select * from tb_member where id='kim5'


* 범위range 쿼리

조회되는 데이터가 다수

select * from tb_member where dong like '구로%'


* 커버드covered 쿼리

조회의 대상과 조회의 결과가 컬럼이 일치되는 형태

select id from tb_member where id='kim5'

select id,pw from tb_member where id='kim5' and pw='1234'

========================================================

select * from zipcode


create table w_zipcode

as

select * from zipcode  --테이블 복사




인덱스형식)

create index 인덱스이름

on 테이블명 (칼럼명)


create index idx_zip

on w_zipcode(zipcode)


create unique index idx_zip

on w_zipcode(zipcode)


drop index idx_zip

select * from w_zipcode 


drop table w_zipcode


* 테이블복사

MS-SQL 형식

select * into 새테이블 from 원본테이블

select * into w_zipcode from zipcode where zipcode='000-000'

--테이블 구조복사


오라클 형식

create table 새테이블

as

   select * from 원본테이블



create table w_zipcode

as

   select * from zipcode



create index zip_index

on w_zipcode(dong)


select * from zipcode     where dong='개포1동';

select * from w_zipcode  where dong='개포1동';

select * from w_zipcode  where zipcode='135-805';

select * from w_zipcode  where dong like '개포1%'

select * from w_zipcode  where dong like '%개포1%' --비추천


* 자동인덱스

primary key 제약조건에 의해 자동적으로 생성되는 인덱스

클러스터드 인덱스, 사전인덱스


* 수동인덱스

create index명령을 실행해서 만드는 인덱스

넌클러스터드 인덱스, 인덱스 페이지 추가


* 인덱스를 생성하는 것이 좋은 컬럼

1)where조건절 또는 join 조건 안에서 자주 사용되는 컬럼

2)패턴조회시 쿼리문에 %는 뒤에 붙여야 성능발휘

3)where절에 사용되는 컬럼에서는 함수를 가급적 쓰지 말것

   where day(regdt)=12

   

* 인덱스를 사용하지 말아야 할 컬럼

1)좀처럼 검색되지 않는컬럼

2)전체중 상당부분을 가져오는 질의에 사용되는 컬럼

3)같은값이 많은 컬럼






'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[02] 오라클 설치  (0) 2012.05.08
[01] 데이터베이스 개론  (0) 2012.05.08
쿼리문  (0) 2011.03.29
테이블  (0) 2011.03.29
PL/SQL  (0) 2011.03.29

select * from jsp_board order by idx desc;


select ename,job,hiredate

from emp
where hiredate >= '81/02/20' and hiredate <='81/05/01'

order by hiredate desc;

 

select ename,hiredate

from emp
where to_char(hiredate,'YYYY') ='1987';

 

select lower('HAPPY DAY') from dual;
select initcap('char') from dual;
select 2*9 from dual;

 

select empno,ename,lower(job),deptno

from emp

where ename=upper('scott');

 

select concat('abcd','가나달') FROM dual;

select concat(name,age) as newcol from member;

select concat(a,b) as "고객정보"
from (
        select concat(name,': ') a,concat(age,'세') b
        from member

       );

select substr('ABCDEFG',-3,3) FROM DUAL;
SELECT SUBSTR('890312-7899105',-2,2) FROM dual;
  
SELECT ENAME FROM EMP
WHERE SUBSTR(ENAME,1,1) >'K'  AND substr(ENAME,1,1) <'Y'
ORDER BY ENAME;
  
SELECT ENAME,LPAD(ENAME,15,'*') FROM EMP;
SELECT SAL,rPAD(SAL,15,'-') "A" FROM EMP;
 
  select deptno,ename,sal, first_value(sal)

            over(partition by deptno order by sal desc) "부서 최고 급여"
  from emp;


  select ename,sal from emp order by sal;
  select empno,ename,sal, count(*) over(order by sal) "cnt"
  from emp;


  select deptno,ename,sal, sum(sal) over(order by deptno) a,
           sum(sal) over(partition by deptno order by empno) b
  from emp;
 
  select empno,ename,deptno,sal,
            rank() over(partition by deptno order by sal desc) r
  from emp;
 
  select round(4567.678), round(4567.678,2), round(4567.678,-2)

  from dual;
 
  select hiredate, sysdate, trunc(sysdate-to_date('11/03/24/01/51',
           'YY/MM/DD/hh12/mi'))||'일' "차이"
  from emp;
 
  select hiredate, sysdate, trunc(sysdate-hiredate)||'일' "차이"
  from emp;


  select hiredate,sysdate,sysdate-hiredate,
           (sysdate-hiredate)/365 "년",
           (sysdate-hiredate)/7 "주",
           mod(sysdate-hiredate,7) "days"
  from  emp;
 
  select  months_between(sysdate, '11/02/25') "월"
  from emp;


select add_months(sysdate, -3) from dual;
select last_day('12/02/01') from dual;

 

select ename,hiredate,last_day(hiredate) , last_day(hiredate)-hiredate "근무일수"
from emp

order by 4 desc;

 

select to_char(sysdate) from dual;
select to_char(to_date('11/03/27'),'cc yyyy-mon-dd day hh:mi:ss') from dual;
select to_char(100.23456,'$999999.999') from dual;
select job,sum(sal) from emp group by job;

select job,sum(sal) from emp group by rollup(job);

 

select b.dname,a.job, sum(a.sal),count(a.empno)
from emp a, dept b
where a.deptno=b.deptno
GROUP by rollup(b.dname, a.job);


select a.*, b.*
from supply_comp a,
                              (select ep_code_fk, avg(input_price)
                               from products group by ep_code_fk) b
where a.ep_code=b.ep_code_fk;


select empno,ename,sal, deptno, s.grade

from emp e join salgrade s on e.sal
between s.losal and s.hisal

where deptno=10;

select ep_code_fk, input_price from products order by ep_code_fk;

select * from supply_comp;
select ep_code_fk,count(*) from products group by ep_code_fk;
select count(*) from products where input_price>=100000;
select ep_code_fk,input_price from products;

select p.products_name, s.ep_name, p.input_price
from products p join supply_comp s
on s.ep_name='공급업체B' and p.input_price>=100000;

select p.products_name, s.ep_name, p.input_price
from products p, supply_comp s
where s.ep_name='공급업체B' and p.input_price>=100000;

select ep_code_fk from products where input_price=5000000;

select * from dept;
select deptno from emp;

 

select e.deptno,e.ename, d.deptno,d.dname
from emp  e
full outer join dept d
on e.deptno=d.deptno order by d.deptno;

 

select distinct(a.deptno), b.deptno, a.ename
from emp a, dept b
where a.deptno(+)=b.deptno
and a.ename(+) like '%';

select distinct(a.deptno), b.deptno, a.ename
from emp a right outer join dept b
on a.deptno=b.deptno and a.ename like '%';

 

select empno,ename,job, sal
from emp where sal >
                              (select sal from emp where ename='SCOTT');

 

select empno,ename,job,hiredate,sal
from emp where job =
                               (select job from emp where empno=7521) and
                                 sal > (select sal from emp where empno=7934);

 

select empno,ename,job,sal,deptno
from emp where sal <
                                (select avg(sal) from emp) order by deptno;

 

select deptno,min(sal) from emp
group by deptno
having min(sal) >
                        (select min(sal) from emp where deptno=20);

 

select ename,job,sal from
emp where (job,sal) in
                                (select job, max(sal) from emp
                                 group by job);

 

SELECT EMPNO,ENAME,SAL,DEPTNO,
COUNT(*) OVER(PARTITION BY DEPTNO ORDER BY SAL) "CNT"
FROM EMP;

 

SELECT EMPNO,ENAME,SAL,DEPTNO,
             SUM(SAL) OVER (ORDER BY SAL),
             SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY SAL) "CNT"
FROM EMP;

 

SELECT b.dname, a.job, SUM(a.sal) sal,
            COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job);

 

 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[01] 데이터베이스 개론  (0) 2012.05.08
오라클 기본  (0) 2011.06.21
테이블  (0) 2011.03.29
PL/SQL  (0) 2011.03.29
오라클 함수  (0) 2011.03.29

+ Recent posts