Programming 95

정규식 체크 제약조건, 체크 제약조건을 편집툴이 아닌 DDL 쿼리로 넣기.2021-08-18

이전 포스팅 에서는 PHONE의 체크 제약조건으로 단순 패턴비교 연산자를 활용하였다. 하지만 조금더 정교한 비교를 위해서 정규식을 활용해보자. 제약조건을 걸때는 간단하게 테이블 편집기도 사용 가능하지만, 연습하는 의미에서 DDL 쿼리로 직접 만들어 보겠다. ALTER table member modify phone nvarchar2(20) check(REG_EXP(PHONE,"$010-%d{4}-%d{4}^"); 이렇게 ALTER 쿼리를 활용해서 기존의 체크 제약조건을 바꾸어 보았다. 안된다.. 이럴줄 알았다... 편집기 도구에 익숙해져서 쿼리치는 법을 까먹었다...이러면 안된다. **내가 이런식으로 쿼리를 잘못 작성하게 된 이유 후술. 다시 처음부터 차근차근 실행 해 보자. 새로운 제약조건은 칼럼에 주기..

Programming/SQL 2021.08.18

데이터 딕셔너리, 도메인 제약조건 2021-08-17

우선 데이터 딕셔너리란 무엇이냐면, user, all, table 이 3가지 범주로 나누어서, 해당 주체가 가진 테이블 등을 뷰 형태로 볼 수 있는 정보이다. DBMS 내부에 자체적으로 포함되어 있는 정보라고 생각하면 된다. 조금더 정확히 설명하자면, 사용자 계정을 통해 사용자가 DBMS에 접근해서 어떤 테이블을 가져오려고 할때, DBMS는 이런 사용자가 만든 테이블의 위치, 크기 등을 알고 있어야 한다. 이렇게 사용자 서비스를 위한 정보들을 저장하고 있는 것이 데이터 딕셔너리 이다. 또 내가 그 전 포스트에서도 강조하다시피 DBMS는 사용자계정 별로 테이블을 저장하기 때문에, 사용자 의 정보 저장이 중요하다. 또한 이 데이터 딕셔너리는 해당 사용자의 정보를 그대로 보여주는것이 아니라, 뷰 형식으로 보여..

Programming/SQL 2021.08.17

UNION, VIEW. 2021-08-13

우선 union 이라는 개념은 집합 개념이라고 생각하면 쉽다. 일단 union의 종류에는 총 4가지가 있다. 바로 union, union all, intersect, minus 드이 있다. 차례대로, 합집합, 중복을 허용하는 합집합, 교집합, 차집합 으로 설명 가능하다. 또한 집합연산의 대상이 되는 테이블은union 연산자 기준 앞에서 선별된 테이블 들이다. select * from member union select * from student; 이렇게 쿼리를 작성하면, member 테이블의 레코드들과 student 테이블의 레코드 들이 '공통된 부분'을 제외하고 합쳐진다. 그런데 조건이 있다. 각 합쳐지는 레코드들의 칼럼 수가 서로 같아야 한다. 왜냐하면, join 키워드는 테이블 두개를 통채로 서로 ..

Programming/SQL 2021.08.13

외부 조인을 활용한 게시글 수 집계, self 조인. 2021-08-12

일단 저번 포스트에서 보다싶이 나는 member 테이블과 notice 테이블을 만들었다. 이번에는 외부조인이 실질적으로 어떻게 활용되는지 보이겠다. 우선, 내부조인(inner join)을 활용해서 게시물 수를 검색해보자. select m.name,count(n.writer_id) from member m inner join notice n on m.name=n.writer_id group by m.name; --count함수 안에 집계하는 칼럼으로는 조인된 테이블의 칼럼의 필드중 무엇이든 올수 있다. --그러나 집계의 기준, 분류의 기준이되는 group by 의 인자로는 무조건 member테이블의 칼럼이 와야한다. --왜냐하면, 인저사항 별, 그 사람의 게시글수를 집계하는것이 목적이기 때문이다. 어? 그..

Programming/SQL 2021.08.12

INNER 조인,outer 조인, 관계형 데이터 베이스. 2021-08-11

우선 DBMS가 발달하기 전에는 데이터베이스중 일부 칼럼이 중복되더라도 각 각 다른곳에 저장했다. 그런데 단점은, 메모리가 너무 많이 잡아먹는 다는 것이고 결함, 실시간 씽크 등의 무결성 측면에서 문제가 되기 때문에, 공통의 부분은 잘라내고 꼭 필요한 부분만 잘라서 따로따로 DBMS가 관리해주기 시작했다. 이것은 내 오라클 첫 포스트에도 설명했던 관계형 데이터베이스의 탄생 내용이다. 이렇게 각각 따로 나누어서 공통된 부분을 서로 참조관계로만 묶여있던 테이블들을 테이블들을 원래대로 합치는 기능을 하는 것이 바로 조인(join) 이다. 간단하게 그림으로 보여주자면, ID 생년월일 글쓴이. 내용, 최동훈 000.131 최동훈 jdbc의 이해... 최동훈 000.131 최동훈 헬스장을 갔다..... 최동훈 00..

Programming/SQL 2021.08.11

구절의 순서와 페이징(서브쿼리 사용), 순위함수ROW_NUMBER() ,HAVING, 서브쿼리. 2021-08-10

우선 나는 HIT 칼럼을 기준으로 내림차순 정렬을 한 뒤에, ROWNUM을 붙이고 싶다. select ROWNUM, member.* from member where rownum between 1 and 5 order by hit desc; 그래서 이런 쿼리를 썼더니 결과는 정렬된 기준으로 ROWNUM이 붙은 것이 아닌, 정렬하기 전 기준으로 붙여져서 뒤죽박죽이 된다. 이런 문제를 해결할려면 어떻게 해야 할까? 두가지 방법이 있는데 그떄 페이징 할때 처럼 서브쿼리로 미리 정렬된 테이블에 ROWNUM을 붙이던가, 아니면 순서함수인 ROW_NUMBER()을 사용하면 된다. 서브쿼리를 이용해서 미리 줄세워 놓은 테이블에 ROWNUM을 붙이는 방법. select rownum, m.* from (select * f..

Programming/SQL 2021.08.10

GROUP BY 절의 활용과 집계함수 count, average, sum. 2021-08-09.

우선 hit 을 위주로 집계함수의 사례를 보이기 위해서 칼럼을 업데이트 했다. 처음에는 insert into 문을 쓰려다가, 이건 행을 업데이트 하는 것이 아닌 새로운 행을 만드는 것이라는 것을 인지하고 update member set hit=1 where pwd=1234; 이 쿼리를 써서 hit 필드를 업데이트 했다. select count(gender) from member; 이러면 원래 6이라는 값이 나와야 하는데 결과는 이렇게 나온다. 위 쿼리의 의미는 member 테이블 중 null 이 아닌 gender 필드의 존재 횟수이다. select name, count(gender) from member group by name; 이렇게 하면, 집계의 주체가 name 이고 집계의 대상이 gender가 된..

Programming/SQL 2021.08.09

SELECT (1) : 구절 순서와 ORDER BY 함수. 2021-08-05

우선 select 절에 올수 있는 함수는 총 5가지 이다. SELECT, FROM, WHERE, COUNTING BY, HAVING COUNT, ORDER BY 가 그것이다. 그리고 이런 함수들이 오는 '순서' 가 매우 중요하다. 이 순서를 지키지 않고 함수를 나열하면, 에러가 난다. 우선 각 키워드의 특징을 나열하겠다. from: 가공할 데이터의 테이블을 가져오는 역할을 한다. where: 가져온 테이블의 어떤 레코드(ROW)를 출력할지 조건에 따라(관계연산자,비교연산자,패턴연산자, 정규식 패턴을 이용) 선별한다. GROUP by: 집계함수 이다. 우선 어떤 기준에 따라 집계하고 예를 들면 납입한 날/시간/이름이 순차적으로 주어진 테이블에서 해당 납입횟수별로 집계하고 싶다면 이 함수를 쓰면 된다. 자세..

Programming/SQL 2021.08.05

형변환 함수 + NULL 처리 함수. 2021-08-03

우선 오라클에서의 데이터 타입은 크게 숫자형, 문자형, 날짜형 으로 나눌수 있는데 이 3개는 서로 형변환 함수를 통해 각각의 타입으로 바꿀수 있다. 대표적으로는 그러나 숫자-> 날짜로는 바꿀수 없고 무조건 문자형을 거친다음 변환시켜야 한다. 간단히 도식으로 표현하자면, 숫자형 -> ->문자형-> -> 날짜형 숫자형 숫자형 : TO_NUMBER() 이렇게 함수가 된다. 또한 각 함수별로, 문자 포맷형식을 지정해서 그 형식에 맞는 문자/날짜/숫자 등을 변환해줄수 있는데 내가 이전 포스트에서 쓴 ALTER session set NLS_DATE_FORMAT = ' yyyy-mm-dd hh24:mm:ss'; 이 형식이 포맷팅 형식의 예이다. 각 함수별 예시. 1.숫자->문자. TO_CHAR() select TO_..

Programming/SQL 2021.08.03

날짜 함수. 2021-08-02

저번부터 궁금했던 것이, 오라클의 DATE형 변수에는 도대체 무슨 함수로 값을 입력해야 하나? 라는 의문이 있었는데, 만약 오라클 자체의 시간으로 입력할려면, SYSDATE 함수를 쓰고, 오라클 DBMS 에 접속한 현지시간을 쓸려면, CURRENT_DATE 를 쓰면 된다. 한번 해보자. INSERT into member(ID,NAME,regdate) values('LG CNS', '최동훈', sysdate); 이 쿼리를 쓰니 된다. !! 그 전에는 무슨 함수를 써야 DATE타입에 값을 넣을수 있는지 몰랐는데, 이제서야 알게됬다. 들어갔다. !! 그런데 난 분명 sysdate 는 년/월/일 뿐만 아니라 시 분 초 까지 다 입력되는것으로 알고 있는데 이런 형식으로 REGDATE 필드(칼럼)값을 보이게 할려면..

Programming/SQL 2021.08.02