Programming/SQL 34

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

문자열 함수 LOWER,UPPER, PAD, INSTR. 2021-07-30

우선 그나마 실용적으로 쓰이는 함수는 LOWER과 UPPER이다. 일단 칼럼 제한 조건부분에서는 칼럼명은 소문자로 쓰든 대문자로 쓰든 오라클에서는 대/소 문자를 구별하지 않지만, WHERE 절 뒤 ROW를 제한하는 조건을 쓸떄 비교연산자 '=' 을 쓰는 경우에는 문자 리터럴로 대/소문자를 구별한다. 이떄 대/소 문자 가리지않고 ROW를 제한하는 방법에 이것을 쓴다. 예를 들면, 이렇게 HUN이라는 이름속에는 대/소문자가 혼재되어 있을경우 구별없이 출력하고자한다면 어떤 쿼리를 써야 할까? select name||id as "이름(회사명)" from member where UPPER(name)='HUN'; 이렇게 해당 칼럼을 아예 대문자로 다 바꾼뒤에 비교연산자 '='를 통해 비교하면 된다. 그다음 많이쓰는..

Programming/SQL 2021.07.30

ROWNUM을 이용한 페이징 출력, 중복제거 distinct 키워드, 문자열 자르기 SUBSTR 함수. 2021-07-29

우선 페이징 이라 함은, 한번에 테이블 중 몇개씩 끊어서 나열하는 것인지 기준에 따라 정렬시키는 방법이다. 이런 페이징을 하기 위해서는 테이블을 특정 기준에 따라 나눌수 있어야 한다. 그런데 일반적으로 생성한 테이블들을 보면 어떤 추가된 순서에 따라 숫자를 부여하는 칼럼을 사용자가 만들어놓지 않은 이상 그런 순차적으로 뚜렷하게 나눌수 있는 기준이 되는 칼럼을 찾기 어렵다. 예를 들면 저번에 내가 만들어놓은 이런 칼럼에서, 기준으로 잡을 것이 안보일 것이다. 이때 순차적으로 페이징할수 있는 기준을 만드는 것이 바로 ROWNUM을 이용하는 것이다. 바로 위 사진의 제일 왼쪽에 1 부터 4까지 붙여진 것이 있는데 이것은 오라클에서 자체적으로 select 문을 통해 결과집합을 생성하면서(where절 단계에서) ..

Programming/SQL 2021.07.29

정규식 패턴 + 특수문자가 포함된 칼럼 검색 2021-07-28

select * from member where REGEXP_LIKE(email,'\w+@\w+.(com|org|net)'); 우선 내가 저번에 저장한 member 테이블에서 전화번호를 검색한다고 하자. 우선 이전 포스트에서 설명한 단순 패턴비교 연산으로도 검색이 가능하다. select *from member where phone like '%-%-%'; 이렇게 말이다. 그런데 이럼 문제가 있다. 범위가 너무 넓다는 것이다. %는 숫자 문자, 영어 등 모든 문자를 포함한 값이 올수 있다는 것인데, 숫자뿐 아니라 김치-바나나-학성고 등의 문자열도 검색되버릴수 있다는 것이다. 그래서 우리는 좀더 정교한 검색을 위해 정규식을 사용할 수 있다. 우선 [ ] 연산자는 1자리를 나타낸다. 예를들면. select *..

Programming/SQL 2021.07.28

비교연산자, 관계연산자, 패턴 연산자 실습+ 테이블 스페이스가 저장되는곳. 2021-07-26

우선 비교연산자를 적용해보기 위해선 많은 ROW(레코드) 가 필요하다. 그래서 이전 포스트에서 설명한 쿼리로 레코드를 입력시켜놨다. 여기서 비교 연산자'>'를 통해 PWD가 3보다 큰 레코드 그리고 전화번호가 null 이 아닌 레코드들을 뽑으려 한다. 또한 이전 배운 내용을 응용해서, 출력할때 칼럼명을 이름(회사) 로 별칭 붙여서 출력하려고 한다. SELECT name||'('||id||')' as "이름(회사)" from member where pwd>3 and phone is not null; 이걸 실행하니, 이렇게 나왔다. 여기서 또 알게된 점은 PWD 칼럼은 NVARCHAR 형이라 문자 만 들어가는데 왜 숫자인 3과 비교가 가능하지? 라는 의문을 잠깐 품었지만 어짜피 숫자든 영어든 한글이든 모든 ..

Programming/SQL 2021.07.26

커밋과 롤백, DATE 형 칼럼에 값 insert 하기. 2021-07-23

지난 포스트에서 내가 관련 개념을 설명할 때는, 직접 SQL developer에서 프로그래밍 해 보지는 않았는데, 오늘 직접 해보니, 막연한 개념을 확실히 확인할 수 있었다. **커밋,롤백, 트랜젝션에 대한 자세한 설명은 내 이전포스트 참고바람. 우선 서로다른 세션이 한 저장소에 접근하는것을 보이기 위해 SQL developer를 두번 열었다. 이렇게 연 다음, Session2에서 ID 가 newlec인 레코드의 칼럼을 update 한 뒤 Session1에서 해당 레코드의 칼럼중 하나인 gender에 접근하여 바꾸려 하자 보이는 것처럼 바로 ROCK이 걸렸다. 이유는 Session2가 아직 commit 하지 않았으므로, 해당 레코드에 관한 트랜젝션이 완료되지 않았다고 간주하고, 해당 테이블이 Sessio..

Programming/SQL 2021.07.23

insert, update, delete 쿼리의 실행.2021-07-21

오늘은 오전공부는 SQL로 40분정도 했는데 어짜피 이전에 적었던 포스트라 중복되서 짧게 복습용으로 적겠다. insert into member(id,pwd) values('dragon','111'); insert into member(id,pwd) values('newlec','111'); insert into member(id,pwd) values('dragon','222'); 위 쿼리 실행결과 이렇게 row가 저장된다. update member set pwd='222',name='손오공' where id='dragon' and pwd='111'; delete member where id='dragon' and name is null; 이렇게 쿼리를 실행하면, 같은 dragon id 이지만, 손오공이라..

Programming/SQL 2021.07.21