[SQL_조회 명령문 SELECT]
SELECT [DISTINCT] 컬럼명,...
FROM 테이블명(DUAL)
WHERE 조건절
ORDER BY 컬럼명 [DESC | ASC], 컬럼명[DESC | ASC]
DISTINCT: 중복제거
DUAL: 가상의 테이블, 실제로 테이블이 존재하면 필요 없다.
[비교연산자]
= 같다
!= 같지 않다
>= 크거나 같다
<= 작거나 같다
> 크다
< 작다
IS NULL
IS NOT NULL
[타입]
1. 문자열
: 고정길이 문자열(CHAR(n), 메모리가 낭비되는 단점이 있다.)
: 가변길이 문자열(VARCHAR(n), 남은 데이터를 세이브할 수 있다.)
: 자바와 달리 문자열을 나타낼 때는 '홍길동', '작은 따옴표', 'T'와 같이 ' ' 를 사용해야 한다.
2. 숫자
: NUMBER(n) n이 2라면 2자리 숫자까지 가능 12, 56
: NUMBER(n, p) p는 소수점 아래 몇 자리까지 나타낼지에 대한 것이다.
: NUMBER
3, 날짜 DATE
: '21/05/18' --YY/MM/DD
: SYSDATE
[SELECT 명령문 복습]
조건을 걸고 싶을 때는 WHERE절에 비교연산자를 사용하여 조건문을 만든다.
정렬이 필요할 경우, ORDER BY와 내림차순 DESC, 오름차순 ASC을 이용해 정렬하고 1개 이상의 컬럼으로 정렬할 수 있지만 일반적으로 기준으로 2개 이상의 컬럼을 설정하지는 않는다.
날짜 쓸 때 ' '하는 것 잊지말기!
[수업 진도]
[논리연산자]
: and, or, not
[산술연산자]
+, -, *, /
: 연산을 할 경우 무조건 실수형으로 나온다는 것!
별칭을 줄 때는 특수문자가 있을 경우, 혹은 문자열의 띄어쓰기가 있을 경우에만 "큰 따옴표"를 사용하고 그외에는 그냥 사용해도 된다.
[2교시]
[논리연산자]
[AND]
10000~11000 사이의 급여를 받는 사람들을 조회
위의 코드처럼 겹치는 것이 싫고 예쁘게 바꾸고 싶다면 ↓
[BETWEEN A AND B]
WHERE 컬럼명 between A and B
[OR]
[IN]
: ~이거나 ~이다
: WHERE 컬럼명 in (값1, 값2)
[NOT]
: 모든 연산자를 쓰고 나서 가장 맨 앞에 NOT을 쓰면 된다.
[문자열]
: 문자열 데이터가 영문자일 경우, 조건(where절)에서 대소문자를 완벽하게 맞춰야 한다. 그렇지 않으면 컴퓨터가 인식하지 못한다.
[Like]
: 와일드 카드와 함께 사용
와일드 카드란? 치트키, 글자수를 모를 경우 사용할 수 있는 치트키
% : 0개부터 시작해 여러 개의 문자열
_ : 글자 한 개를 의미
[와일드 카드 % 의 예]
<s로 시작하는 문자열>
이름을 내림차순으로 정렬
select first_name, salary, department_id
from employees
where first_name like 'S%'
order by first_name desc;
<a로 끝나는 문자열>
[%]: 0개부터 시작해 여러 개의 문자열
소문자 l이 들어가는 경우 %l% : 문자열 안에 해당 문자가 있는지 확인할 수 있다.
보통 단어를 찾아줌 ex) 카카오톡에서 자바책추천
%코로나% → '%' || subject || '%'
여기서 subject는 변수
[와일드 카드 _ 의 예]
_ : 글자 한 개를 의미
[연습문제]
1번) 부서번호가 30, 50, 70 부서인 사람들 조회 이름, 직급, 급여, 부서번호
or를 사용해 부서번호가 30이거나 50이거나 70인 사람을 찾을 수 있지만 in을 사용할 수도 있다.
2번) 이름이 't'로 끝나는 사람의 이름 부서 직급 조회
Like는 "%"이나 "_"와 같은 와일드카드와 함께 사용한다.
3번) 커미션의 액수가 2000 이상인 사람의 이름, 급여, 커미션비율, 커미션 액수 조회
산수연산자를 이용해 기존의 컬럼의 정보의 데이터를 연산해 새로운 컬럼으로 만들어 낼 수도, 그 새로운 컬럼에 별칭을 줄 수도 있다.
만약 새로운 컬럼에 붙여준 별칭을 조건식 안에서 컬럼으로 쓰고 싶다면 서브쿼리로 해야 한다. 새로운 컬럼을 기준으로 조건을 주고 싶다면 commission_pct*salary와 같이 조건절에 그대로 사용해도 된다.
4번) 직급이 'ACCOUNT'이거나 'CLERK'인 직원의 이름, 직급, 부서 조회
조건절에서 where job_id like '%ACCOUNT%' or job_id like '%CLERK%;와 같이 조건 하나에 컬럼명 + Like를 각각 써줘야 한다.
문자열이기 때문에 대소문자를 맞춰줘야 함
'%'와 같은 와일드 카드를 사용하기 위해서는 like를 사용해야 한다.
5번) 입사일이 07년도인 직원이름, 부서, 입사일 조회를 입사일 순으로 오름차순
날짜 역시 문자열처럼 사용 가능하다. like '07%';
정렬 시 최근 입사일 순으로 하는 조건이 있다면 desc 내림차순을 해주면 된다.
[집합 연산자]
- 합집합(Union,), 교집합(Intersect), 차집합(Minus)
원 A, B
합집합(Union,) : A ∪ B
교집합(Intersect) : A ∩ B
차집합(Minus) : A - B or B - A
원 하나가 select
합집합(Union,), 교집합(Intersect), 차집합(Minus)을 사용할 때는 컬럼명이 같아야 한다.
실제로 많이 사용하지는 않는다.
정처리 기사 시험에 나온다.
[정리]
SQL :
▶ DDL(create, alter, drop)
- Object : table, view, index, sequence, user, synonym와 같은 것을 생성, 수정, 삭제할 때 사용하는 명령어
▶ DML(I, U, D, S) : 데이터의 삽입, 수정, 삭제 조회 시 사용하는 명령어
→ SELECT의 경우에는 쿼리문을 저장할 뿐 데이터를 저장할 것은 없다.
▶ DCL(grant, revoke) : 데이터 접근 권한을 주거나 뺏는 것
▶ TCL(commit, rollback, savepoint)
[테이블 생성 및 삭제]
create table 테이블명
(
컬럼명1 데이터 타입 constraint constraint_name 제약 조건,
컬럼명2 데이터 타입 constraint constraint_name 제약 조건,
컬럼명3 데이터 타입 constraint constraint_name 제약 조건,
);
[제약조건을 부여해서 만들기(pk, fk, uq, nn, ch, defalut]
[제약조건 6가지(Constraints)] Constraints(제약)
- PK
- FK
- NN : ex) 이메일을 보낼 때 제목을 작성하지 않은 경우 비어있지 않게 "제목없음" 입력해주세요.
- Check : 데이터를 한정시키는 것(남자, 여자, 남, 여, W, M)
- Unique
- defalut : 사용자가 값을 입력하지 않으면 자동으로 들어가는 값!
스키마 : 특정 테이블이 가지고 있는 상태 정보를 가지고 있는 것
내가 만든 제약 조건을 스키마가 기억한다.
메타 테이블 : 정보를 위한 정보
메타 테이블을 만들 때 주의할 것
[select * from user_constraints;]
: 제약 조건을 조회하는 명령문
위의 코드로 조회해보면 나열됨
constraint_name는 내가 넣든 안넣든 반드시 존재하고, 컴퓨터가 준 constraint_name은 데이터의 특징을 알 수 없기때문에 직접 넣는 것이 더 유리하다.
내가 넣지 않으면 위와 같이 임의의 constraint_name가 주어진다.
[constraint_name 규칙]
- constraints를 코드 삽입시 컬럼명 타입 constraints + 테이블명_컬럼의 특징_제약조건
DDL(create, alter, drop)의 명령문 drop을 이용해 생성한 테이블을 삭제할 수도 있다. drop table + 테이블명
constraint_name이 수정된 것을 아래에서 확인할 수 있다. 컬럼명 타입 테이블명 제약조건을 적은 후 컬럼명과 제약조건을 참고하여 constraint_name를 부여한다.
특정테이블의 제약조건을 조회하고 싶다면 아래와 같이 조회할 수 있다.
select * from user_constraints where table_name = ‘MYTABLE’;
[데이터 삽입 insert] DML 중 하나 :
열어보기 ↓
insert into 테이블명
(컬럼명1, 컬럼명2, 컬럼명3, 컬럼명4...)
values
(value1, value2, value3, value4... );
문자열과 날짜를 적을 때는 '작은 따옴표' 표시해주기, 자바랑 헷갈리지 말기!
"1행이 삽입되었습니다."라는 코멘트가 있어야 데이터 삽입 완료!
저장할 때는 commit하는 것 잊지말기!
아래와 같이 테이블 카테고리 안에 mytable이 생성되어 있는 것을 확인할 수 있다.
'개발자로 가는 길(국비지원과정) > 2. Oracle' 카테고리의 다른 글
9주차 질문 (0) | 2021.05.23 |
---|---|
[210521금] 오라클 SQL 복습 겸 연습문제, 오라클 함수(문자열, 날짜) (0) | 2021.05.21 |
[210520목] 관계형성(foreign key), 시퀀스 생성, on delete cascade (0) | 2021.05.20 |
[210517월] 오라클 데이터베이스의 특징, SELECT 조회명령문, (0) | 2021.05.17 |
[210514금] 오라클 설치, 데이터베이스 제약조건 6가지, DDL, DML, DCL, 데이터 이상현상 (0) | 2021.05.14 |