전체 글 170

정규식 체크 제약조건, 체크 제약조건을 편집툴이 아닌 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