배열


변수는 하나의 데이터만 저장할 수 있다. 그렇기에 많은 데이터를 저장하려면 많은 변수가 필요하다. 

변수가 많아질수록 코드는 복잡해진다. 그렇기에 같은 타입의 많은 양의 데이터를 다루기 위해서 배열을 사용한다.


간단한 예제를 살펴보겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class add1_1 {
    
    public static void main(String[] args) {
        
        int i;
        int[] arr=new int[3];
        
        for(i=0;i<arr.length;i++)
        {
            arr[i]=i;
            System.out.println(arr[i]);
        }
    }
}
 
cs


위의 코드를 그림으로 설명하자면

 0

 1

 2


모양으로 있다. arr 이라는 배열에 int 형식으로 3개의 공간을 만들어주었다. 

그뒤에 for문을 사용하여 arr의 0번째 자리부터 2번째 자리까지 i의 값을 넣어주고 출력을 했다.


결과를 보면 0 1 2가 출력이 된것을 볼 수 있다.



'JAVA' 카테고리의 다른 글

[java]기초공부하기  (0) 2018.11.13
[JAVA]객체지향프로그래밍(OOP)  (0) 2018.11.10
자바 ,JDK 설치 및 환경변수설정  (0) 2018.09.11

JAVA 계산기 코드


가장 기초적인 연산자, while문, switch문을 사용하여 계산기를 만들어 보았습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.Scanner;
 
 
public class add2 {
    
    public static void main(String[] args) {
        int num1;
        int num2;
        String op;
        char num='y';
        
        Scanner sc=new Scanner(System.in);
        
        while(num=='Y' || num=='y')
        {
            System.out.println("정수 :\n");
            num1=sc.nextInt();
            System.out.println("연산자 :\n");
            op=sc.next();
            System.out.println("정수 :\n");
            num2=sc.nextInt();
            
            switch (op) {
            case "+":
                System.out.println(num1+num2);
                break;
            case "-":
                System.out.println(num1-num2);
                break;
            case "*":
                System.out.println(num1*num2);
                break;
            case "/":
                System.out.println(num1/num2);
                break;
            default:
                System.out.println("연산자 잘못 입력");
                break;
            }
            
            System.out.println("계속?y/Y");
            num=sc.next().charAt(0);
            
            
        }
    }
 
}
 
cs


코드설명


입력받기 위해서  Scanner를 import하였고, 정수는 int 형으로, 연산자는 String형으로 , 그리고 char형으로 하나 만들었습니다.

while문을 이용하여 반복을 하였고, 맨처음에 num을 y로 초기화 시켜 돌아가게 만들었습니다.

정수와 연산자를 입력받고, switch문을 사용하여 연산자에 따라 달라지는 식을 만들었습니다.

그리고 계속할껀지 물어보고 y나Y 이외의 문자가 오면 멈추게 했습니다.



배열

'JAVA' 카테고리의 다른 글

[java] 배열  (0) 2018.11.13
[JAVA]객체지향프로그래밍(OOP)  (0) 2018.11.10
자바 ,JDK 설치 및 환경변수설정  (0) 2018.09.11

JOIN


두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는것




INNER JOIN

-join 중에서 가장 많이 사용한다.

-조건이 일치하는 값이 두 테이블에 모두 존재할 때 결과값이 나온다.


형식



SELECT 컬럼명 FROM 테이블명1 INNER JOIN 테이블명2 ON 조인조건 WHERE 검색조건




일단 테이블을 만들어 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
create table b1(
id varchar(20PRIMARY KEY,
name varchar(20),
addr varchar(20),
age varchar(20));
 
INSERT INTO b1 VALUES('je','재은','울산',21);
INSERT INTO b1 VALUES('yj','유진','부산',21);
INSERT INTO b1 VALUES('sh','서현','부산',23);
INSERT INTO b1 VALUES('sy','승연','대전',23);
INSERT INTO b1 VALUES('jy','종원','경주',25);
INSERT INTO b1 VALUES('hi','홍일','부산',25);
INSERT INTO b1 VALUES('jh','재홍','부산',24);
 
create table b2(
num varchar(20primary key,
id varchar(20),
item varchar(20),
price varchar(20)); 
 
insert into b2 values(1,'je','책',5000);
insert into b2 values(2,'yj','키보드',15000);
insert into b2 values(3,'sy','코트',50000);
insert into b2 values(4,'sh','운동화',10000);
insert into b2 values(5,'jy','음료수',3000);
insert into b2 values(6,'hi','책',6000);
insert into b2 values(7,'jh','스킨',30000);
insert into b2 values(8,'yj','맨투맨',18000);
insert into b2 values(9,'sy','맨투맨',15000);
insert into b2 values(10,'sh','책',12000);
insert into b2 values(11,'je','운동화',22000);
insert into b2 values(12,'yj','책',2000);
cs



그럼 JOIN을 해보겠습니다.

1
2
3
select * from b1
inner join b2
on b1.id=b2.id;
cs


두 테이블이 결합된 것을 볼 수 있습니다.












sum()외에  GROUP BY와 함께 사용되는 함수


함수명 

설명 

AVG 

평균을 구한다. 

MIN 

최소값을 구한다. 

MAX 

최대값을 구한다. 

COUNT

행의 개수를 센다. 

COUNT(DISTINCT) 

행의 개수를 센다(중복은 1개만 인정) 

STDEV 

표준편차를 구한다. 

VARIANCE 

분산을 구한다. 


한번빌릴때 평균적으로 책을 얼마나 빌리는지 알아보겠습니다.


1
select id as "회원",avg(num) as "평균대출권수" from buy group by id; 
cs



쿼리문에 적은 as는 별칭은 정해준것입니다. id 의 별칭은 회원 평균을구한num의 별칭은 평균대출권수로 정해준 것입니다.

한번빌릴때 몇권씩 빌리는지 결과값이 나오는 것을 볼 수 있습니다.

여기서 aa의 결과값은 보기 힘듭니다. 저런 소수점을 조절하고 싶으면 CAST()함수를 사용하면 됩니다.



1
select id as "회원",cast(avg(num) as number(5,3)) as "평균대출권수" from buy group by id; 
cs



보이는 것과 같이 소수 3번째 자리까지 나타나는 것을 볼 수있다.





GROUP BY 


테이블 내의 데이터를 그룹별로 구분하여 통계적인 결과를 내기위해 사용합니다.



먼저 GROUP BY형식부터 알아보겠습니다.



SELECT 컬럼명1,SUM(컬럼명2) FROM 테이블명 GROUP BY 컬럼명1;




여기서 컬럼명1 에는 기준이되는 컬럼명을 넣어주셔야합니다. 그리고 컬럼명2에는 계산 가능한 값을 넣어주셔야 합니다.

도서관을 예를 들면 도서관 회원 번호가 있을것 입니다. 도서관 회원이 한번에 책을 2개 빌릴 수도 있고, 3개 빌릴수도 있고 1개 빌릴수도 있습니다.

그럴 때 회원 번호가 컬럼명1이고 빌린 갯수가 컬럼명 2라고 생각하시면됩니다. 


먼저 테이블을 만들고 데이터까지 넣어보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
create table buy(
id varchar(20),
num varchar(20));
 
insert into buy VALUES('aa',1);
insert into buy VALUES('aa',1);
insert into buy VALUES('bb',6);
insert into buy VALUES('cc',5);
insert into buy VALUES('dd',3);
insert into buy VALUES('aa',8);
insert into buy VALUES('cc',22);
insert into buy VALUES('dd',9);
cs




그리고 select를 해보시면 밑의 결과를 볼 수 있습니다.




보이시는 것과 같이 겹치는 것들이 여러개 있습니다.

aa가 빌린 책의 총합은 num인데 num을 다더하면 10권입니다. 마찬가지로 bb는 6권, cc는 12권, dd는 27권 입니다.

이런것을 좀 더 간편하게 보기 위해 GROUP BY를 사용합니다.


1
select id,sum(num) from buy group by id; 
cs


보이시는 것과 같이 num 안에 있는 데이터들이 ID를 기준으로 다 더해져서 결과 값이 나온 것을 볼 수 있습니다.

aa회원이 몇권을 빌렷는지 bb회원이 몇권을 빌렷는지 알기쉽게 정리해줍니다.

'DataBase' 카테고리의 다른 글

[Oracle] INNER JOIN  (0) 2018.11.12
[Oracle]집계함수  (0) 2018.11.12
[Oracle]테이블 내용을 조회하는 SELECT  (0) 2018.11.11
[oracle]데이터 사전  (2) 2018.11.07
[oracle]테이블의 모든 데이터를 제거하는 TRUNCATE TABLE  (0) 2018.11.07


SELECT

테이블 내의 원하는 정보를 추출하는 명령어



형식



select 컬럼명 from 테이블 이름 where 조건







테이블 검색하기 

1
SELECT * FROM emp;
cs


EMP라는 테이블의 데이터가 나오는 것을 볼 수있습니다. 

쿼리문에서 * 의 뜻은 모든 컬럼을 의미하는 것 입니다.


그러면 테이블 안에서 empno와 ename 의 데이터만 검색해보겠습니다.

1
select empno,ename from emp;
cs



empno와 ename의 내용만 나오는 것을 확인할 수 있습니다.



다음은  where 문까지 사용하여 empno가 7777인 행만 검색 해보겠습니다.

1
select * from emp where empno=7777;
cs


empno가 7777인 행만 나오는 것을 확인할 수 있습니다. 

만약 where 문을 두개 쓰고싶으면 관계연산자(and, or, not )를 쓰고 조건문을 또 써주시면 됩니다.!






BETWEEN


형식



SELECT * FROM 테이블명 WHERE 컬럼명BETWEEN 값 AND 값;





1
select * from emp where empno>=7787 and empno <=7888;

cs


1
select * from emp where empno between 7787 and 7888;
cs


두개의 쿼리문을 다 사용해 봅시다. 결과가 같은것을 볼 수 있습니다.



보이는 것과 같이 BETWEEN 은 ~이상 ~이하의 값을 조회한다.

여기서 empno는 연속적인 값을 가지는 숫자이다. between은 연속적인 값 밖에 조회하지 못한다.

그럼 연속적인 값이 아닌 이산적인 값을 위해서는 무었을 써야할까?






IN


형식



SELECT * FROM 테이블명 WHERE 컬럼명 IN('데이터','데이터'....);





1
select * from emp where job in ('CLARK','MANAGER'); 
cs

1
select * from emp where job='CLARK'or job='MANAGER'
cs


이 두개의 쿼리문 역시 사용하면 똑같이 나오는 것을 볼 수 있습니다.


숫자가 아닌 문자일 경우 연속된 값이 아니기 때문에 between 을 사용하지 못하지만

in 을 사용하게되면 좀더 간단하게 찾을 수 있다.


LIKE


형식



SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '문자%';





이번에는 문자열 내용을 검색해 볼꺼다. 


1
select * from emp where ename like 'A%'
cs


위의 조건은 이름의 맨 앞 글자가 'A'이고, %는 뒤에는 어떤 문자가 있어도 상관이 없다는 말이다. 



ORDER BY


형식



SELECT * FROM 테이블 명 ORDER BY 컬럼명 ASCorDESC;





결과물에 영향을 미치지는 않지만 결과가 출력되는 순서를 조절하는 구문이다.


1
select * from emp order by empno; 
cs


보이는 것과 같이 empno를 중심으로 오름차순으로 정렬된 것을 볼수있다.

order by에는  asc(오름차순), desc(내림차순) 가있는데 기본적으로 오름차순으로 정렬이된다.



DISTINCT


형식



SELECT DISTINCT 컬럼명 FROM 테이블 명 ;






중복된 것을 하나만 남기는 명령어입니다.


1
select distinct job from emp; 
cs


보이는 것 처럼 중복되는 직업을 제외하고 나타내었



OOP(Object Oriented Progarmming)


-객체를 먼저 만들고, 이것들을 하나씩 조립하여 완성된 프로그램을 만드는 기법



객체(Object)란?


-물리적으로 존재하거나, 추상적으로 생각할 수 있는 것 중 자신의 속성을 가지고 있고, 다른 것과 식별 가능한것

-객체는 속성(필드-field)과, 동작(메소드-method)으로 구성되었음 



객체 지향 프로그래밍의 특징


캡슐화(Encapsulation)

-객체의 필드, 메소드를 하나로 묶고 , 실제 구현 내용을 감추는 것

-외부 객체는 객체 내부 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용가능


외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 접근제한자를 사용하여 객체의 필드와 메소드의 사용범위를 제한, 외부로부터 보호한다.



상속(Inheritance)

-부모 역할의 상위 객체가 자기가 가지고있는 필드와 메소드를 자식 역할의 하위 객체에게 물려주는 것


상위 객체를 재사용 해서 하위 객체를 쉽고 빨리 설계할 수 있도록 도와주고, 상위 객체의 수정으로 모든 하위 겍체들의 수정효과를 가져와 유지보수가 간편하다.




다형성(Polymorphism)

-같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질


하나의 타입에 여러 객체를 대입함으로 써 다양한 기능을 이용할 수 있도록 해준다. 

자바는 다형성을 위해 부모클래스 혹은 인터페이스 타입변환을 허용한다.



추상화(Abstraction)

-구체적인 사물의 공통적인 특징(field, method)를 뽑아내는 것


구현하는 객체들이 가진 공통적인 데이터와 기능을 도출해 내는 것을 의미한다. 

'JAVA' 카테고리의 다른 글

[java] 배열  (0) 2018.11.13
[java]기초공부하기  (0) 2018.11.13
자바 ,JDK 설치 및 환경변수설정  (0) 2018.09.11

데이터 사전이란?

-사용자와 데이터베이스의 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블의 집합

-사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신된다(사용자는 데이터 사전의 내용을 직접 수정하거나 삭제할 수 없음) 

-사용자가 이해할 수 있는 데이터를 산출해 줄 수 있도록 하기 위해서 읽기 전용 뷰 형태로 정보를 제공합니다.


데이터 사전은 크게 3가지로 나뉜다.


 접두어

의미 

USER_ 

자신의 계정이 소유한 객체 등에 관한 정보 

ALL_ 

자신 계정 소유 또는 권한을 부여 받은 객체 등에 관한 정보 조회 

DBA_ 

데이터베이스 관리자만 접근 가능한 객체 등의 정보 조회 






USER_데이터 사전


사용자와 가장 밀접하게 관련된 뷰로써 자신이 생성한 테이블, 인덱스, 뷰, 동의어 등의 객체나 해당 사용자에게 부여된 권한 정보를 제공한다.



사용자가 소유한 테이블에 대한 정보 조회

1
select table_name from user_tables;
cs


이 외에도

USER_SEQUENCES - 사용자가 소유한 시퀀스의 정보 조회

USER_INDEXES - 사용자가 소유한 인덱스의 정보 조회

USER_VIEWS - 사용자가 소유한 뷰의 정보 조회


USER_데이터 사전은 USER_뒤에 원하는 객체등을 기술해주면되는데 뒤에 기술되는 명칭은 S 가 붙은 

복수타입이다.






ALL_ 데이터 사전

-전체 사용자와 관련된 뷰로써 사용자가 접근할 수 있는 모든객체에 대한 정보를 조회할 수 있다.

-조회중인 객체가 누구의 소유인지를 확인하도록 하기위해 OWNER칼럼을 제공한다.




all_table로 자신이 소유한 혹은 권한을 부여받은 테이블에 대한 정보 조회


1
select owner, table_name from all_tables;
cs





DBA_데이터 사전


DBA나 시스템 권한을 가진 사용자만 접근이 가능하다.

사용자가 다른경우 DBA로 시작하는 데이터 사전을 조회할 권한이 없기 때문에 SYSTEM계정으로 접속해야한다.


현재 제가 접속한 사용자는 hr인데 hr은 DBA로 시작하는 데이터 사전을 조회할 권한이 없기 때문에 

오류가 난다. 그러므로 권한이 있는 시스템 계정에서 조회 해보겠다.




ㅁㅁㅁㅁㅁㅁㅁ

시스템 계정 접속하기


dba_table로 테이블에 대한 정보 조회하기


1
select owner, table_name from dba_tables;
cs



너무많아서 캡쳐 불가능입니다.

2080개나되는 많은 자료들을 볼 수 있었다.




TRUNCATE TABLE - 기존 사용하던 테이블의 모든 로우를 제거




- 테이블의 구조는 그대로 유지

- 테이블의 데이터와 할당된 공간만 해지

- 테이블에 생성된 제약 조건과 연관된 인덱스, 뷰 , 동의어는 유지


형식



TRUNCATE TABLE 테이블명;




1
truncate table a3;
cs



truncate table 을 사용하고나서 select는 안되지만 desc는 나타나는 것을 볼 수 있다.



DROP TABLE - 기존 테이블과 데이터 모두제거





삭제 불가능한 경우

- 삭제할 테이블의 기본 키나 고유 키를 다른 테이블에서 참조하고 있는 경우 

(참조하는 테이블(자식 테이블)을 먼저 제거후 제거해야한다.)



형식



DROP TABLE 테이블명;




1
drop table b1;
cs


DROP TABLE을 한 이후에는 테이블이 제거되었기 때문에 구조를 확인할 수 없다.





+ Recent posts