모든열 출력 : SELECTTION
일부열 : 프로젝션
DROP TABLE Account;
CREATE TABLE Account (
id NUMBER not null,
name VARCHAR2(128),
email VARCHAR2 (128) ,
location VARCHAR2 (128)
);
INSERT INTO Account(id, name, email, location) VALUES (1, '나나', 'ss@ss', '서울');
INSERT INTO Account(id, name, email, location) VALUES (2, '다다', 'ss@ss', '부산');
INSERT INTO Account(id, name, email, location) VALUES (3, '가가', 'ss@ss', '여수');
CREATE TABLE account_log (
id NUMBER not null,
user_account_id NUMBER NOT null,
action VARCHAR2(128) not null
);
INSERT INTO account_log (id, user_account_id, action)VALUES (1, 2, 'LOGGED IN');
INSERT INTO account_log (id, user_account_id, action)VALUES (2, 3, 'DELETED ACTION HISTORY');
SELECT * FROM Account;
SELECT * FROM account_log ;
SELECT *
FROM Account a
JOIN account_log al
ON a.id = al.user_account_id;
SELECT *
FROM Account a, account_log al
WHERE a.id = al.user_account_id;
테이블두개만들고 데이터삽입하고 조인과 프롬을 이용해 조인해보기
where절을 빼면 카타시안어쩌구로 엄청 많이 나옴
SELECT * FROM emp ORDER BY sal DESC ;
DESC 내림차순
order by 오름차순 : 사전순
- job이 salesman이면서 salary가 1500이 넘는 사람 출력
SELECT *
FROM emp
WHERE job = 'SALESMAN' and sal = 1500;
- 연봉이 1000이상 1500이하
SELECT *
FROM emp
WHERE sal BETWEEN 1000 and 1500;
- 와일드 카드 종류설명
_ | 종류에 상관 없이 한 개의 문자 |
% | 길이와 종류와 상관 없이 모든 문자 |
- 이름에 ON있는 이름찾기
SELECT * FROM emp
WHERE ename LIKE'%ON%';
- 커미션이 NULL값인 것
SELECT * FROM emp
WHERE comm IS NULL;
UNION : 합집합
UNION : 중복제거된 상태로
UINION ALL :중복다나옴
SELECT 열선택 FROM 테이블1
UNION
SELECT 열선택 FROM 테이블2
열은 같아야함
이름, 자료형도
이름이 달라도 as name해서 같은 이름으로 만들어서 묶을 수도 있음
함수설명
UPPPER | 모든 문자를 대문자로 변환 |
LOWER | 모든 문자를 소문자로 변환 |
INITCAP | 첫 글자를 대문자로 |
LENGTH | 문자열 길이를 반환 |
SUBSTR(origin,begin[,size]) | 문자열 substring |
INSTR | 문자 위치 반환 |
REPLACE | 문자 치환 |
LPAD,RPAD | 문자 패딩 설정 |
CONCAT | 문자열 연결 |
- 선택한 열을 소문자로 바꾸고 싶을때
SELECT lower(ename) as ename_lower FROM emp;
- ename의 length가 4이하인 애들 선택
SELECT * FROM emp WHERE LENGTH(ename)<=4;
= 은 나중에 !
자바는 0부터 시작했지만 sql은 1부터 시작
substr(선택할열, 시작할 문자 위치, 추출할 문자개수)
ename의 두번째부터 네개 추출
- ename에 L이 있으면 몇개있는지 추출, 없으면 0으로 반환
REPLACE(선택할열, '타겟', '바꿀말')
- PAD(선택할열, 채울글자수, '채울문자')
RPAD 오른쪽으로 채움
LPAD 왼쪽으로 채움
- concat(선택할열1, 선택할열2)
열이아니라 값이어도 상관없음
- round(선택할 열 혹은 값)
- trunc(선택할열, 몇번쨰 이후로 버릴것인지)
- mod(나눠질값, 나눌값)
- 오늘날짜
우앙~ 날짜에도 계산을 할 수있다고한다
sysdate를 디폴트로 두면 id만 입력하면 날짜가 나옴
- ADD_MONTHS(날짜타입의 값 혹은 일, 개월수)
3개월 후는 언제인가?
- next_day(날짜타입의 열 혹은 값, '월~일요일')
오늘이 23일이니까 다음 월요일은 언제인가?
SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_LANGUAGE';
이거 치면 KOREAN인지 영어인지 나온다
영어로 돼있으면 월요일이 아니라 mon이렇게 쳐야겠죠
- TO_CHAR(날짜, 포맷문자열)
cc세기
yyyy연도
mm월
dd일
hh24 24시표기
mi분
ss초
- nvl2(선택할 열, NULL이 아닌경우 출력할 값, NULL인 경우 출력할 값);
SELECT 열선택
CASE
WHEN 조건식1 THEN 출력할값1
WHEN 조건식2 THEN 출력할값2
WHEN 조건식n THEN 출력할값3
END
FROM emp;
SELECT sal,
CASE
WHEN sal >= 1000 THEN '1000d이상'
ELSE '1000미만'
END
FROM emp;
SELECT ename, sal,
CASE
WHEN sal >=500 and sal <1000 THEN '500이상 1000미만'
END
FROM emp;
이런식으로 쓸 수 있다
이렇게 나옴
ELSE에 뭐쓰면 null값이 채워지겠죠
'DB > Oracle' 카테고리의 다른 글
20201026_22 계정생성, 제약조건 (0) | 2020.10.26 |
---|---|
20201024_21 Review (0) | 2020.10.23 |
20201023_21 group by (0) | 2020.10.23 |
테스트용 scott 스크립트 (0) | 2020.10.23 |
20201022_20 테이블 만들기, 데이터 삽입, 조인 (0) | 2020.10.22 |
댓글