배움 __IL/TIL 1기

TIL : 42번째- 230201 [1-5-수]

Mo_bi!e 2023. 2. 1. 19:42

I. 프로젝트 피드백

인증과 권한에 대해서도 고려해야하는데, 멤버(인사팀, 근로자)만 고려하고 설정에 대해 다루지 않으면 인증과 권한을 다룰 수 없음 이 점에대해서도 생각해보기

II. JDBC

1.  JDBC

(1) 지난시간

{
		//담아 옴 
			rs.next();
			String nickName = rs.getString("nicname");
			System.out.println(nickName);
		
		}

 

서버 커서 한칸 내리고 그 위치에 레코드 옮겨오는 것이다

이 경우 레코드 하나가 저장되는 공간은 ResultSet이다

 

(2) row 끝까지 해보기

while(rs.next())
{	

   int id = rs.getInt(1);
   String name = rs.getString(2);

   String format = String.format("id: %d, name:%s",id,name);
   System.out.println(format);
 
}

scan.next()처럼 조건문 안에도 쓸수 있다. (본인은 무한루프로 실행함)

getString 외에도 getInt도 가능하다

 

(3) 100이상 row만 출력해보기

while(rs.next())
{	

   int id = rs.getInt(1);
   String name = rs.getString(2);


   if(id > 100) {
   String format = String.format("id: %d, name:%s",id,name);
   System.out.println(format);
   }
}

이 외에 쿼리문으로 where id > 100 으로도 가능하다

또한 100이상일 때 continue; 로도 가능하다

 

그러나 이런 방법들은 바람직하지않다.

회원이 1억명이면 1억개 가져와서 1억번 찾아서 5개 찾는 것은 효율적이지 않다

데이터 만지는건 쿼리문에 맡겨야한다.  (쿼리문은 필터링, 집계, 정렬 의 역할을 함)

ResultSet rs = st.executeQuery("select * from member where id >= 100");

    //while 이 참이면 계속 반복하게

    //필터링, 집계, 정렬
    while(rs.next())
    {	

       int id = rs.getInt(1);
       String name = rs.getString(2);

       String format = String.format("id: %d, name:%s",id,name);
       System.out.println(format);
       }

 

결국 자바하는 역할sql이 하는 역할을 잘 자누어야한다

자바는 사용자 요구사항 입력받아서 요구사항을 쿼리로 한다 결국 입출력으로 한다.

 

결국 필터링, 집계, 정렬을 잘 할수있어야한다

여기에 대해서 공부 해 보자.

 

II. SQL 대하여

연산자 사용법에 대해서 알아보자

1. 사용자의 정보를 조회

특정 컬럼, 로우만 뽑아낼수있다.

그리고 두개의 컬럼을 합쳐서 뽑아내기도 가능하다

 

2. 산술 연산을 이용한 컬럼 연산 추출

(1) 산술연산자

1)

id + 1 로 하면 id에다가 1을 더한값으로 알려준다

컬럼명도 id + 1인데 별칭 설정으로 그냥 id 로 나오게할수있다

 

2)

SELECT 3+4 FROM MEMBER;

그냥 이렇게 하면 MEMBER 테이블에 있는 row 수 만큼 3+4 를 한 결과값이 나오게 된다.

 

SELECT 3+4 ID FROM DUAL;

DUAL 더미 테이블을 만들 수있다

이렇게 하면 하나의 row만으로 그 연산결과값이 나오게 된다.

 

3)

그러면 '' 로 문자열로 해서 더하면 어떻게 될까?

SELECT '5'+4 ID FROM DUAL;

54 가 아니라 9가 나온다

오라클 연산은 +는 정말로 더하는거만 있다.

+가 있으면 '5'가 문자열이라도 숫자로 변환시킨다.

 

 

SELECT 'a'+4 ID FROM DUAL;

숫자가 아니라고 하면서 오류가 뜬다.

'a' + 'b' 로 도 마찬가지이다.

 

 

(2) 문자열 더하기 연산자

1) 연산자

 

SELECT 'a'|| 4 ID FROM DUAL;

이렇게 하면 a4가나온다.

 

2)

이렇게 하면 아이디 닉네임을 결합도 가능하다.

SELECT NAME||'('||nicname||')' as name FROM MEMBER;

 

(3) 비교 관계 연산자

1) 비교연산자

= : 같다

!= (^= , <> : 같음): 같지않다

 

시퀄들 마다 다른데 이런경우 해결하기 위해서 표준안을 마련하게 된다.

ANSI 에서 C나 SQL의 표준을 만들게 된다.

마지막에 null은 가능할까?

SELECT * FROM MEMBER WHERE NAME IS NULL;

IS로 NULL은 가능하다 = 대신에

NULL이 아닌 경우는 IS NOT을 써주면된다.

 

SELECT NAME||'('||nicname||')' as name FROM MEMBER WHERE NAME IS NOT NULL;

이렇게 붙여서 이용해준다

 

정리하면 앞은 컬럼 / 뒤 where 은 row 이다

 

2)관계 연산자

여기서 AND는 범위를 나타낸 것이다 그런데 이거보다 더 쉬운것은 Between이다.

AND가 더 편할 수있는 것은 익숙한경우이고 실제로는 아래가 더 직관적이다.

아래에 0,2 는 포함을 의미한다 

 

<연속적인 숫자인 경우> AND -> BETWEEN

SELECT NAME||'('||NICNAME||')' FROM MEMBER WHERE ID BETWEEN 0 AND 100;

이렇게 가능하다

 

<단속적인 숫자의 경우> OR -> IN

이런경우 이렇게 하기보다는

IN을 쓰면 충분히 가능하다

 

11,19,24 만 뽑아보자

SELECT * FROM MEMBER WHERE ID IN(11,19,24);

 

반대로 11,19,24 외에 다른 row을 뽑아보기

SELECT * FROM MEMBER WHERE ID NOT IN(11,19,24);

 

 

(4) 패턴비교연산자

1) 패턴연산자

같지않는 여백을 만드는 것을 의미한다

 

박 아무개를 의미하는것이 %이다.

이 경우 =가 아니라 LIKE를 써야한다.

 

SELECT * FROM MEMBER WHERE NAME LIKE '%영%';

가운데에만 원할떄는 양쪽에 둔다

 

SELECT * FROM MEMBER WHERE NAME LIKE '_영';

이경우 두글자만 원하는 경우 언더바를 둔다.

 

 

(5) 회원 검색 프로그램 만들기 (조별숙제)

입력받은걸로 SQL을 만듬 그 결과 RS로 결과를 뿌림

더보기

[회원 검색 프로그램]

회원 이름 입력 : SQL -> rs

목록출력
ID NAME NICNAME

 

 

(6) 정규식을 이용한 패턴 연산 : 검색 패턴을 형성하는 문자열

1) 들어가며

정규식은 플랫폼을 떠나서 쓰는 범용적인 패턴문자열

JSON처럼 패턴문자열의 범용표현식이다.

 

예로들어서 전화번호입력을 하는데 전화번호의숫자갯수와 형식도 안맞다 즉 폼형식과 개수, 자료형식도 일치해야한다

이런경우 만들수있는 문자열로서 바로 정규식이다

 

정규식은 형식,자료형,갯수 모두 지정해줄수있다.

이건 지금 배우면 JS 할때에도 쓸 수있다.

 

2) 

www.RegExlib.com

 

 

 

 

 

 


1. 보충

 

 

 

2. 회고 

 

'배움 __IL > TIL 1기' 카테고리의 다른 글

TIL : 44번째- 230203 [1-5-금]  (0) 2023.02.03
TIL : 43번째- 230202 [1-5-목]  (0) 2023.02.03
TIL : 41번째- 230131 [1-5-화]  (0) 2023.01.31
TIL : 40번째- 230130 [1-5-월]  (0) 2023.01.30
TIL : 39번째- 230127 [1-4-금]  (0) 2023.01.28