테이블의 구조를 확인할 때 실행
테이블 열의 이름을 지정할 수 있음
AS 테이블명 지정을 Order by에서 사용할 수 있으나, group_having 안에서는 사용되지 않음 ?
like'A%0'식으로 했을 때의 %와, 문자로의 %가 같으므로,
\%: ESCAPE 문자임을 나타냄
A\%0: A%로 시작되는 데이터를 출력한다는 의미
A%: A로 시작되는 모든 데이터 출력한다는 의미
쿼리할 대상들을 그룹으로 묶는데 사용
쿼리문으로 얻은 결과를 group by 절에 명시한 사항으로 그룹화한 뒤, 그룹에 SQL 집합 함수를 사용해서 다양한 결과를 얻을 수 있음
즉 단일 쿼리를 사용하지 못할 경우, 여러개의 행을 집합함수를 사용하고자 할 때에는 Group by로 지정된 컬럼만 사용 가능
Group by 다음에 오는 조건절은 where이 아닌 having 절로 작성함
DB에서는 데이터가 어떠한 형태라도 입력되어져 있으면 목적에 맞게, 변형해서 원하는 형태로 만들어 볼 수 있음
데이터가 없는 가짜 테이블, SQL 구문에서는 SELECT FROM 테이블명 이므로 테이블이 필요하기 때문에, 가짜 테이블 둠
테이블에서 값을 가져오는게 아니라, 값을 구하기만 할거면 DUAL TABLE을 사용하여 실행
함수가 한번에 하나의 행에 적용되어 하나의 결과를 반환
MOD(M,N)
round, trunc
WIDTH_BUCKET(값,범위의 시작, 범위의 끝, 분할값)
LOWER(CHAR): 소문자로 정렬
UPPER(CHAR): 대문자로 정렬
SUBSTR(str, 시작자리수,추가자리수) 시작자리수부터 추가자리수까지 출력
시작지라수가 -일 경우 끝에서 이동한 후 추가자리 수 만큼 우측으로 이동
REPLACE(str,변경될 문자,변경할 문자): 지정한 문자열을 변경
변경할 문자열에 아무것도 입력하지 않을 경우 변경될 문자를 삭제한다는 의미가 될 수 있음
LTRIM,RTRIM
INITCAP(str): 첫번째 단어를 대문자로 입력
LENGTH(str): 문자열에 길이 호가인
INSTR
LPAD('str',설정 자리 수,'빈칸에 입력'): 왼쪽으로 쪽수를 맞춰줌
RPAd:LPAD와 유사하나 오른쪽으로 쪽수를 맞춤
CONCAT(데이터항목,데이터항목): 데이터를 합쳐서 출력
=> ||''|| = concat(,concat('',)) 중간에 띄어쓰기를 입력하여 데이터 출력
SYSDATE: 오늘 날짜 출력
ADD_MONTHS(지정한 날짜, 더하고자 하는 달의 수)
: 지정한 날짜+ 더하고자하는 달의 수
LAST_DAY(): ()안에 넣어진 날부터 월 마지막
=> last_dat(sysdate)-sysdate: 월의 마지막 날까지 날은 날 출력
MONTHS_BETWEEN:
TO_CHAR: 문자로 변경하여 출력
123.45를
999.999 = 123.450
9999= 123
999,999 = 12,345
시간 출력 시= HH24:MI:SS 년월일요일= YY-MM-DD-DY
TO_DATE: 문자를 날짜 데이터로 변환
TO_NUMBER(TO_CHAR) 문자를 숫자로 변경 -> 계산을 위해 변경
CAST
CONVERT
DECODE(EXPR,조건,참,거짓) 조건? 참: 거짓 구문과 같음
DECODE함수로 처리 할 수 없는 부분은 CASE WHEN으로 처리할 수도 있음
위의 함수를 CASE WHEN 함수로 처리한 코드
NVL: null 값 처리
함수를 적용할 때 over(partition by ~:gruop by 와 유사함), over (order by~) ()안에 대상으로 해서 분석함수를 적용
over 를 통해 department_id를 파티션하며 avg(salary)값을 구함
group by를 사용할 경우 개인의 salary값과 avg (salary)가 같이 쿼리되기에 에러가 발생
AVG,SUM,MAX,MIN
COUNT
ROWNUM
RANK
select to_char(hire_date,'yyyy'), count(employee_id), max(salary), min(salary) from employees1
group by to_char(hire_date,'yyyy')
order by to)char(hire_Date, 'yyyy')
LANK를 사용할 땐 정렬을 해야 사용할 수 있음
OVER 함수 안에 order by를 사용하여 정렬이 필요
LANK 안에 인자값을 주고 사용할 경우 within group을 사용하면 됨
![](https://velog.velcdn.com/images/dawon22/po
숫자, 문자 ,기호 등을 주어진 패턴으로 찾아내서 적용시키는 기법
대부분 프로그래밍 언어와 유사
REGEXPLIKE: 검색 값은 검색할 문자열, 패턴은 검색할 특정문자, 매치옵션은 찾고자 하는 문자 등
REGEXP_SUBSTR: 문자열 일부 추출
REGEXP_REPLACE: 구문은 특정 패턴과 매치되는 부분을 바꿔준다.
클래스 [[:digit:]] 숫자, [[:alpha:]] 문자, [[:alnum]:] 숫자와 문자를 대표
{3} 3개의 숫자이고, () 하나의 그룹으로 처리
데이터는 테이블의 형태로 관리되는데 테이블 구성하는 요소 지정하고 필요하면 컬럼에 제약 조건 지정이 가능
데이터가 없으면 빈칸이나 널 값을 입력해서 열의 갯수를 맞추어야함
10개의 데이터에 6개의 데이터를 지정한뒤 테이블에 넣어주면 됨
데이터에는 다양한 값이 존재하므로 데이터를 입력할 때에는 데이터 타입을 지정하는데, (char), 숫자 number, date 등을 저장하는 LOB가 있음
A. 문자 고정길이 문자를 정하는 CHAR, 한글의 1자는 영어의 2자이므로 CHAR(10)으로 데이터 크기 지정할 시 영어는 10개의 문자가 들어가지만, 한글은 5개의 문자만 들어 갈 수 있음을 유의해야됨, 가변길이의 VARCHAR, VARCAHR2(한글)
B. 숫자: 정수는 NUBMER 실수의 경우 FLOAT
숫자는 NUMBER로 지정하는 것이 좋음 왜? 가변적으로 사용하기위해?
C. 날짜와 시간: DATA타입인 SYSDATE 사용, SYSTIMESTAMP 소수점 이하 6자리까지 반환, -> 별도의 테이블 생성없이, 바로 쿼리해서 사용할 수 있음
메모리에 들어가 있는 걸 마무리 해주어야, 똑같은 USER로 들어가도 다른 노드에서 접속하게 되면 확인 할 수 없음 이를 보이게 하기 위해 테이블을 COMMIT해야함
테이블을 update 하고자 할 때 특정 컬럼의 변경과 입력을 update명령어를 입력하여 변경
ALTGER TABLE ()
ADD(addr varchar2(30)) : addr라는 이름을 가진 열을 테이블에 추가하게 됨
rename column (바꾸고자 하는 열 이름) to (변경할 열 이름)
delete는 데이터만 삭제하지 틀은 그대로 두고, 테이블 전체를 삭제하는 것은 drop
where절을 이용해 복사하고자 하는 테이블 뒤에 거짓 조건을 넣어,
틀만 있고 데이터가 복사가 되지 않음을 확인 할 수 있음
원본 데이터 열들에서 원하는 열 항목만 빼서 빈 테이블을 만들 수 있음
거짓 조건이 없으면 테이블의 데이터까지 가져 올 수 있음
빈테이블과 복사해오는 데이터의 항목명과 데이터 타입이 일치하면, 테이블에 데이터를 입력할 수 있음
select문을 이용하여, 입력하고자 하는 데이터를 넣을 수 있음
rename colum과 다름: 컬럼을 변경하는 것이기 때문, 테이블의 열의 이름을 변경하는 것