그냥 3만 쓰면, 시작위치가 3이라 (3부터 나머지) -> LLO 나옴
이거는 지금 보기 어렵다.
기초 체력이 생긴 이후 보기 (뭐가 중요한지 알고 난 이후!)
함수는 따로 공부하기
beginner-sql-tutorial.com/oracle-functions.htm
SELECT 구절, 직계함수는 공부한다~
내가 원하는 데이터를 원하는 방식으로 그루핑, 정렬할 수 있는 것
ODER BY
자바였으면 굉장히 복잡했을텐데, 오라클은 쉽다 쉽다~
Q. 근데 아까 순서로 따지면...
ORDER BY가 다른 거하고 사용될 때는~
'박'씨 성을 가진 회원을, 이름을 오름차순으로 정렬
UPDATE MEMBER SET NAME = '뉴렉' WHERE NAME IS NULL;
이름 입력하지 않은건 다 뉴렉으로 바꾸는 명령
혹시 이름이 같은건, 뒤에 명령어를 더 줘서 나열할 수 있다. (만약에 NICKNAME 정렬도 ASC면 생략 가능!)
손에 익도록 해줘야 합니다.
*GROUP BY절*
일별, 월별 조회수 top 같은거 알고 싶을 때는 '집계'함수인 이 함수를 사용한닷
(?) 쓴 이유는 컬럼 뭘 쓸지 몰라서
(FILESE)하면 -> 0 나옴(다 NULL이어서 이거 나왔던)
(CONTENT) 가지고 개수를 세자 하면 -> 오류 (CLOP이 안되어서?)
() 여기에는 NULL이 들어가지 않는거를 넣어야 한다.
- NULL이 들어간 컬럼을 넣으면 정확한 개수가 안나올 수 있으니
ㅡㅡㅡㅡㅡ
'xx별'
전체 개수 말고 'xx별 개수'를 세고 싶을 때 ex) 지역별, 20대별...
글 2개 쓴 사람이 2명 있구나~
집계, 다른 컬럼 사용 불가
왜냐하면 집계는 말그대로 집계니까 21명이면 21, 22명이면 22 이렇게 보이는 함수인데 다른 컬럼은 여러개니까
근데 GROUP BY를 쓰면 가능해진다!
GROUP BY별! 세는거니까
이거 다시 해보기
- ID를 통해서 COUNT // 한 거를 OREDER하는데 DESC로 하고, WRITER_ID는 ASC로 한다 (코드 해석)
Q. 성별 회원 수를 뽑아달라
Q. 나이대를 알아보자
BIRTHDAY 업데이트
코드가 ... 복잡하다.
그래서 이렇게 보통 나눠쓴다~~
여기서 YEAR는 테이블 이름임
YYY 써주면 표에 YYY 뜸~
ㅡㅡㅡㅡㅡ
* HAVING에 대해 알아보자 *
회원별/ 집계.
집계 결과, 게시글 수가 2 미만인거
GROUP BY 전에! WHERE 한다는게 논리가 이상한것
집계한 결과를 비교하고 싶을 때는
HAVING은 GROUP BY를 위한 WHERE절이라고 생각하면 됨
그리고 (ID) 자리는 앞에랑 맞추어주기...(태희님이 (WRITER_ID) 쓰면 안되냐고 물어봄)
코드 설명 WRITER_ID 별로! 카운드를 센다고 했잖아 WHERE COUNT(ID) 이 의미는 : WRITER_ID 옆에 COUNT들이 표시된 표가 나타날건데~ 그게 <=2인걸 찾겠다는거지 cf) 복습하면서 WHERE WRITER_ID <=2 라고 적어서 정리함. |
"정말 많이 씁니다. 단순 이해가 아니라 정말 활용할 줄 알아야 합니다."
* 서브 쿼리를 알아보자 * (JOIN할 때? 어제 PAGER에서 더 해보기로 했던 내용?)
TABLE을 가지고 만든 결과 집합을! 다시 SELECT할 수 있을까? YES
- 사실 FROM절에 오는건 '격자 형태의 결과물'이 오는 자리
테이블만 있었을 때는 그냥 테이블만 넣어주었던거지
어제 ROWNUM BETWEEN 6 AND 10이 선택 안되었었던 이유를 생각해보면, 이렇게 해주는 이유를 바로 알 수 있음 |
- 대신 ROWNUM 이름은 바꾸어주어야 (안쪽의 ROWNUM을 선택해야 하니!!)
안쪽 별칭을 써서 사용해준다.
-> 그래서 지금 위에 코드는 잘못된 거
ROWNUM이 안쪽인지 바깥쪽인지 모르기에! 그래서 안쪽에 ROWNUM의 별칭을 주어야함!
NOTICE.* 이거 이해하기
- NOTICE 모든 부분 다 가지고 오라는건가?
-> NOTICE의 모든 컬럼! 을 가지고 오라는게 맞다.
원래는 앞에 컬럼들 써줄 때 NOTICE.ID FROM NOTICE 이런식으로 써주는거였는데 삭제한거였음
그래서 NOTICE.다음에 * 을 써줘서는 모든 컬럼들을 가지고 오라는 뜻이 되는 것>.<
cf) 만약 전체가 컬럼이 아니라 content만 가지게 오고 싶으면
SELECT * FROM (SELECT ROWNUM Y, CONTENT FROM NOTICE)
WHERE Y BETWEEN 6 AND 10;
이렇게만 적으면 되지~
() 는 오라클에서도 수학에서와 마찬가지로 먼저 실행하는 것
Q. 1에서 5까지 자르는데, 1페이지가 등록일자 기준으로 제일 최근것부터 나오게 해주기
안에다가 줘야한다고 한다.
근데 결과는 왜 같지?
-> WHERE 절이 먼저 실행됨. 그래서 전체!를 대상으로가 아니라 1-5번 뽑아준 것에 대해서! ORDER했기 때문에 이러면 안 됨. (우연히 심했던거라고 한다 ㅋㅋㅋ) 위에서 먼저! 정렬해주기!
지금 문제는 ORDER NUMBER 때문에 뒤죽박죽 되었다고 함.
//
SELECT / FROM / WHERE / GROUP BY / HAVING / ORER BY
이지만 SELECT가 가장 마지막에 실행
정렬한다음에! 번로 붙이는건 없나.. (지금 문제는 번호 붙이고 정렬해버려서 문제)
정렬 끝내고 번호를 붙이자.
-> 서브쿼리 중첩
FROM절에서 () 미리 정렬해주는 것
정렬 / 번호 붙이고 / 그리고 아래서 번호 자르는 것
AS N 이라고 별칭 붙이고 실행
(왜냐하면 뒤에 ()는 NOTICE가 아니기에)
-> AS N 하면 오류남
결과 집합에는 AS를 쓸 수 없다고 한다.
이거 예제 이해해야해~~~~
코드 내려쓰기 해서 보기 좋게 해주기
지금 SELECT가 3개임
Q. 사용자가 제목으로 검색을 할 경우
- WHERE TITLE LIKE '%A%'
이거를 어디에다가 꽂아야 하나?
1. 제일 바깥에
2. 위에 SELECT
3. 아래 SELECT
-> 무조건 필터링은 제일 안쪽에 해줘야 한다! 3번!
월요일부터는 이 코드를 기준으로 작성할거다~~~
55일차. DB 9 - JOIN (INTRO) (0) | 2021.05.07 |
---|---|
Oracle 기본 함수 정리 (0) | 2021.04.30 |
50일차. DB 7 - 정규식 (REGEXP), 페이징 INTRO (0) | 2021.04.29 |
49일차. DB 6 - || , IS NULL, IS NOT NULL, BETWEEN, % (0) | 2021.04.28 |
48일차. DB 5 - +, -, x, / (0) | 2021.04.27 |