C언어
- 하드웨어을 제어할수 있는 명령어를 많이 지원한다
- 공장에서 기계제어할때 주로 사용된다.

자바
- 웹페이지 (.jsp)
- 스마트폰에서 게임프로그램 작성할때 많이 사용한다
- C++문법을 기반으로 한다

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

* 프로그래밍 언어(Language)

- 실행파일을 만들수 있다
   .exe

- 소스프로그램(Source Program)
   .cpp
   사용자가 알아볼수 있는 코드로 작성된다.

- 목적프로그램(Object Program)
   .obj
   컴퓨터가 알아볼수 있는 코드로 작성된다.

- 컴퓨터의 신호체계 0과 1로 구성되어져 있다

- 컴파일(Compile)
   소스프로그램을 목적프로그램으로 번역해 주는 과정이라 한다
   Build->Compile

- 목적프로그램을 만드는 이유는 .exe실행을 만들기 위해서이다

- 프로그램의 작성 순서
   .cpp -> .obj -> .exe

 

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

* C언어 명령어의 규칙
- 대부분 소문자로 구성되어 있다.
- 대소문자를 엄격히 구분한다
- 한행이 종결이 되면 반드시 ;으로 마감해 준다
- voin main(){} 함수안에 코드를 작성한다
- 코드의 맨 첫줄은 header파일이 온다 .h
- header파일이란 사용하고자 하는 명령어의 정의가 작성되어진 파일이다
  
   #include <stdio.h> -> 표준입출력

---------------------
* 프로그램은 위에서 아래로 흘러가고
  왼쪽부터 오른쪽으로 가면서 실행된다.

 

 

'..열심히 공부하세.. > C 입문' 카테고리의 다른 글

[03] 자료형  (0) 2012.05.17
[02] 출력서식문자  (0) 2012.05.15
3) 연산자  (0) 2006.08.16
2) 자료형 Data Type  (0) 2006.07.19
1) C언어 시작...모니터 출력함수...  (0) 2006.07.12

 

* JDBC
- 자바에서 DB연동하는 것
- 데이터베이스를 설치하고 (오라클, My-SQL)
- 자바와 DB를 연결시켜야 한다->드라이버 필요

 

[MySQL 드라이버 다운]

- http://www.mysql.com -> Downloads
   -> Mysql Connectors -> Connector/J
   -> mysql-connector-java-5.1.18.zip 다운받은 후 압축풀기


- My-SQL서버 시작
   D:\ERPJava_04\mysql\bin\mysqld.exe 실행
   My-Sql 서버가 시작된는지 확인하려면
   작업관리자->프로세스 에서 확인 가능

 

- My-SQL서버 종료
   작업관리자->프로세스 에서 종료


- D:\ERPJava_04\mysql\bin>mysql -u root -p 1234
- mysql>show databases; --데이터베이스 보기
- mysql>use erpjavadb;    --사용DB 변경하기
- mysql>exit;                  --mysql 빠져 나오기

 

 

* 이클립스에서 My-SQL 드라이버 지정--------------------

- 이클립스 -> Project -> Properties -> Java Build Path
   -> Libraries -> Add External Jars...
   -> 'mysql-connector-java-5.1.18-bin.jar' 지정

 

* 성적테이블 작성------------------------------------------

create table tb_sungjuk(
  sno  int  NOT NULL AUTO_INCREMENT PRIMARY KEY
  ,uname varchar(20) not null
  ,kor tinyint default 0
  ,eng tinyint default 0
  ,mat tinyint default 0
  ,aver tinyint null
  ,address varchar(10) null
  ,regdt     DATETIME       NOT NULL

);


int  정수형
tinyint 작은 정수형
DATETIME 날짜형
AUTO_INCREMENT 자동으로 일련번호 부여
PRIMARY KEY 기본키, 중복되는 값이 절대로 올수 없다
now() 현재 시스템의 날짜값

 

insert into tb_sungjuk(uname,kor,eng,mat,address,regdt)
values ('홍길동',70,80,90,'안양',now());

 

-------------------------------------------------------INSERT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class InsertTable {
    public static void main(String[] args) {
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(jdbc);
            con=DriverManager.getConnection(url, user, password);
            stmt=con.createStatement();
           
            String sql="INSERT INTO tb_sungjuk";
            sql+=" (uname,kor,eng,mat,address,regdt)";
            sql+=" VALUES('홍길동',90,90,80,'안양',now())";
           
            int rec=stmt.executeUpdate(sql);//쿼리문이 실행
            System.out.println("레코드 "+rec+"개 추가!!");         
           
           
        }catch(Exception e){
            System.out.println("SQLException: " + e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try
    }

}

-------------------------------------------------------UPDATE

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class UpdateTable {
    public static void main(String[] args) {
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String driver = "org.gjt.mm.mysql.Driver";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="UPDATE tb_sungjuk";
            sql=sql+" SET aver=(kor+eng+mat)/3 ";      
                    
            System.out.print(sql);
           
            //DB에 가서 새롭게 명령어(쿼리문)을 인식함
            stmt=con.createStatement();
            stmt.executeUpdate(sql);
            //select -> executeQuery()
            //나머지(create,insert,update,delete)->executeUpdate();      
                       
        }catch(Exception e){
            System.out.println("SQLException: " + e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try


    }

}

-------------------------------------------------------DELETE

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DeleteTable {
    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="DELETE FROM tb_sungjuk WHERE sno=1";
            stmt=con.createStatement();
            stmt.executeUpdate(sql);//쿼리문 실행
           
        }catch(Exception e){
            System.out.println("SQLException: " + e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try
       
    }
}

-------------------------------------------------------CREATE

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class CreateTable {

    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
       
        try{
            Class.forName(driver);//mysql 연결통로 지정. 드라이버로딩
            con=DriverManager.getConnection(url,user,password);
           
            String sql="CREATE TABLE tb_sungjuk(";
            sql=sql+" sno   int  NOT NULL AUTO_INCREMENT PRIMARY KEY";
            sql=sql+",uname VARCHAR(20) not null";
            sql=sql+",kor   tinyint default 0";
            sql=sql+",eng   tinyint default 0";
            sql=sql+",mat   tinyint default 0";
            sql=sql+",aver  tinyint null";
            sql=sql+",address varchar(10) null";
            sql=sql+",regdt DATETIME NOT NULL";
            sql=sql+")";
            //sql+="~~~"
            //System.out.print(sql);
            stmt=con.createStatement();//새로운명령어라고 인식
            stmt.executeUpdate(sql);//쿼리문 실행
            //실행 executeUpdate->create,insert,delete,update,drop
            //실행 executeQuery->select
           
        }catch(Exception e){
            System.out.print(e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try

    }

}
-------------------------------------------------------SELECT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectRecOne {
    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="SELECT * FROM tb_sungjuk order by sno";
           
            stmt=con.createStatement();
            rs=stmt.executeQuery(sql);//select결과값 저장
           
            //rs.next() 첫번째 레코드를 가르킴
            //만일 가르키는 레코드가 있으면 true반환
            //없으면 false반환
            if(rs.next())
            {
                System.out.print(rs.getInt(1)+" ");//1번째 칼럼 sno
                System.out.print(rs.getString(2)+" ");//uname
                System.out.print(rs.getInt(3)+" ");//kor
                System.out.print(rs.getInt(4)+" ");//eng
                System.out.print(rs.getInt(5)+" ");//mat
                System.out.print(rs.getInt(6)+" ");//aver
                System.out.print(rs.getString(7)+" ");//address
                System.out.print(rs.getString(8)+" ");//regdt
               
                System.out.println();
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");//uname
                System.out.print(rs.getInt("kor")+" ");//kor
                System.out.print(rs.getInt("eng")+" ");//eng
                System.out.print(rs.getInt("mat")+" ");//mat
                System.out.print(rs.getInt("aver")+" ");//aver
                System.out.print(rs.getString("address")+" ");//address
                System.out.print(rs.getString("regdt")+" ");//regdt
            }
            else
            {
                System.out.print("조회 행 없음!!");
            }
           
        }catch(Exception e){
            System.out.print(e.getMessage());
        }finally{
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try

    }

}
-------------------------------------------------------SELECT

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectRec {
    public static void main(String[] args) {
        String driver="org.gjt.mm.mysql.Driver";
        String url="jdbc:mysql://localhost:3306/erpjavadb?useUnicode=true&characterEncoding=euckr";
        String user = "root";
        String password = "1234";
       
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
       
        try{
            Class.forName(driver);
            con=DriverManager.getConnection(url,user,password);
           
            String sql="SELECT * FROM tb_sungjuk order by sno";
           
            stmt=con.createStatement();
            rs=stmt.executeQuery(sql);//select결과값 저장
                       
            while(rs.next())
            {
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");//uname
                System.out.print(rs.getInt("kor")+" ");//kor
                System.out.print(rs.getInt("eng")+" ");//eng
                System.out.print(rs.getInt("mat")+" ");//mat
                System.out.print(rs.getInt("aver")+" ");//aver
                System.out.print(rs.getString("address")+" ");//address
                System.out.print(rs.getString("regdt")+" ");//regdt
                System.out.println();
            }          
        }catch(Exception e){
            System.out.print(e.getMessage());
        }finally{
            try{
                if ( rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if ( stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}          
        }//end try
       

    }

}

-----------------------------------------------------[문제]

문)aver들의 평균보다 잘한 레코드 출력

 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectEx1 {
    public static void main(String[] args) {
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=euckr";
            String user="root";
            String password="1234";
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            //문)aver들의 평균보다 잘한 레코드 출력
            String sql="";
            sql=sql+" SELECT * FROM tb_sungjuk ";
            sql=sql+" WHERE aver>= ";
            sql=sql+"             (SELECT AVG(aver) FROM tb_sungjuk) ";

            rs=stmt.executeQuery(sql);

            while(rs.next()){
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");
                System.out.print(rs.getInt("kor")+" ");
                System.out.print(rs.getInt("eng")+" ");
                System.out.print(rs.getInt("mat")+" ");
                System.out.print(rs.getInt("aver")+" ");
                System.out.print(rs.getString("address")+" ");             
                System.out.print(rs.getString("regdt").substring(0,10)+" ");
                System.out.println();
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
        finally{
            try{
                if (rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if (stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if (con != null){ con.close(); }
            }catch(Exception e){}  
        }

    }

}

-----------------------------------------------------[문제]

문)각 주소별 학생의 인원수 내림차순으로 출력

 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectEx2 {
    public static void main(String[] args) {
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=euckr";
            String user="root";
            String password="1234";
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            //문)aver들의 평균보다 잘한 레코드 출력
            String sql="";    
            sql=sql+" SELECT address,count(*) as cnt ";
            sql=sql+" FROM tb_sungjuk ";
            sql=sql+" GROUP BY address ";
            sql=sql+" ORDER BY count(*) DESC ";

            rs=stmt.executeQuery(sql);

            while(rs.next()){
                System.out.print(rs.getString("address")+" ");
                System.out.print(rs.getInt("cnt")+" ");
                System.out.println();
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
        finally{
            try{
                if (rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if (stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if (con != null){ con.close(); }
            }catch(Exception e){}  
        }


    }

}

-----------------------------------------------------[문제]

문)sno 역순으로 정렬한뒤 위에서부터 5개 레코드만 출력

 

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectEx3 {

    public static void main(String[] args) {
        Connection con=null;
        Statement stmt=null;
        ResultSet rs=null;
        try{
            Class.forName("org.gjt.mm.mysql.Driver");
            String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=euckr";
            String user="root";
            String password="1234";
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            //문)
            String sql="";    
            sql=sql+" SELECT * ";
            sql=sql+" FROM tb_sungjuk ";
            sql=sql+" ORDER BY sno DESC limit 0,5 ";
           
            rs=stmt.executeQuery(sql);

            while(rs.next()){
                System.out.print(rs.getInt("sno")+" ");
                System.out.print(rs.getString("uname")+" ");
                System.out.print(rs.getInt("kor")+" ");
                System.out.print(rs.getInt("eng")+" ");
                System.out.print(rs.getInt("mat")+" ");
                System.out.print(rs.getInt("aver")+" ");
                System.out.print(rs.getString("address")+" ");             
                System.out.print(rs.getString("regdt").substring(0,10)+" ");
                System.out.println();
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
        finally{
            try{
                if (rs != null){ rs.close(); }
            }catch(Exception e){}           
            try{
                if (stmt != null){ stmt.close(); }
            }catch(Exception e){}           
            try{
                if (con != null){ con.close(); }
            }catch(Exception e){}  
        }


    }

}

'..열심히 공부하세.. > JAVA 문법' 카테고리의 다른 글

[예제] set, map 예제  (0) 2012.06.26
[Vector 예제] Buyer - 반품 refund() 메소드  (0) 2012.06.26
[34] 제네릭 Generics  (0) 2012.05.08
[33] Java Collections Framework  (0) 2012.05.08
[32] Object 클래스  (0) 2012.05.04

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

+ Recent posts