본문 바로가기

SQL

[SQL] 기본부터 심화까지 간단 정리

SQL을 뿌셔봅시다 :) 

SQL 명령문 개괄


1. From -where -group by - having - select - order by
2. DML - select, insert, delete, update


DDL - alter, create, modify, drop
TCL - rollback, commit
DCL - grant, revoke


Select 
distinct(집약) > (10,10,20,20,30,...) > 10,20,30
distinct(deptno, mgr) = group by (deptno, mgr)
AS
select 
1. as 생략가능
2. 컬럼명에 띄어쓰기 사용가능 예(직원 번호)
from
as 상용불가
concat 
+ - sql server
|| - oracle
concat(( ),( )) 인수가 두개

 

논리연산자
and - A and B (AB 둘다)
or - A or B (A이거나 B)
not - AB 둘다 아님

연산 순위 
1 not 
2 and
3 or

 

Not <조건> and <조건> and Not <조건> or <조건>
조건 and 조건 and 조건 or 조건

 

SQL 연산자
A between 1 and 2 > 1 (크거나 같다) A (크거나 같다) 2
A IN (1, 2, 3) > A=1 or A=2 or A=3

 

(중요)Like _ : 미지의 한 글자
% : 0이상 글자
_L% 이름의 두번째 글자가 L인것을 모두

 

escape 와일드카드( _, %) 문자로 취급 해주는 함수
ename like 'A_A' ('A@_A' _를 문자로 취급할때) @,# 등등 아무것이나 가능)
escape '@'
Rownum (oracle)
where 조건절에서 Rownum : 1 포함
TOP (sql server)
select TOP(n) (컬럼명) 칼럼명의 상위 n개를 가지고 온다

 

select empno,sal 
from emp 
where rownum < 3 

 

order by sal (가장 마지막 실행)

 

sal 정렬 전 (1900, 1300, 1500)
sal 정렬 후 (5000, 3000, 3000)
정렬전의 값을 가지고와 정렬 수행하여
(1900, 1500, 1300)

 

NULL
1.부재, 모르는값
2. 연산

 

산술연산
null +2 , null -4, null x null  = null 

 

비교연산
null = null, null = 2 값은 false 알수없음(unknown) 
where (조건) unknown

 

3. 정렬상 의미 
-oracle : 무한대
-sqlserver : -무한대

 

nvl (값1, 값2) 값1이 isnull 값2 아니면 값1
nvl2 (값1, 값2, 값3) 값1이 isnull 값3 아니면 값2
isnull (값1, 값2) 값1이 isnull 값2 아니면 값1
nullif (값1, 값2) 두개의 값이 같으면 null 다르면 값1
coalesce (값1, 값2, ..........) null 이 아닌 첫번째 값 (앞의 널을 무시하고 값을가져옴)

정렬
1. 정렬의 특성
1- 가장 마지막 실행
2- 성능이 느려질수있다
3- null값 과의 관계
2. 컬럼번호 정렬
출력되는 컬럼의 수보다 큰값 불허
3. 인수두개 정렬
sal desc, ename asc
sal이 같으면 ename 오름차순
4. select ename
order by sal 정렬 가능

 

숫자함수
Round 자릿수 Round(138.94)(인수중요!)
      0|12
ceil / ceiling
oracle / sqlserver

문자열 함수
upper 대문자로 변경
lower 소문자로 변경
Lpad
Rpad
Ltrim 공백제거
Rtrim 공백제거
substr 문자열 자르기
rstr 문자열자르기

 

날짜함수
To_char
TO_date 형변환 관련문제
sysdate - oracle
Getdate() - sqlserver

날짜데이터 +100 100일 이후(day로 인식)

 

decode/case
case
when then 1조건 만족시
when then 2조건 만족시
else  없을때 1,2조건 만족안할시 null
else
end

 

집계합수
null과의 관계
A(null, 3, null)
B(null, 2, 2)
C(1, 2, 3)
A+B+C(null, 7 ,null)
sum(A+B+C) = 7
sum(A+B+C) 의 차이 sum(A)sum(B)sum(C)
sum(A) = 3
sum(B) = 4
count(A) =1 
count(B) = 3
group by 
집약가능
그룹수준의 정보를 바꿈

 

join
1. natural join > alias 사용안됨
   using > alias 사용안됨
중복된 컬럼 하나 
제일 앞에 등장

2. left outer join
A left outer join B
A col1 = B col1(+)
조인하면 할수록 ()()()()()() 뚱뚱해진다
조인 순서 From ((A, B,) C)

 

서브쿼리
select - Scalar
from - inline view : 메인쿼리의 컬럼 사용가능
where - 거의 모든 서브쿼리(중첩서브쿼리)
group by - X
having - 거의 모든 서브쿼리(중첩서브쿼리)
order by - Scalar

select 
from A
where (select
            from B col1
            A col1)
B col1 중에서 A col1 인경우를 다 추려냄

IN
any/some
all
exist '1''x''a' 존재하면 True 없으면 False
메인쿼리 한데이터에 대해서 서브쿼리를 실행함

집합연산자
union - 정렬작업 집합을 합침
intersect - 정렬작업 교집합
minus - 정렬작업  집합의 유니크값?
unionall - 중복데이터 존재 정렬작업 없이 빠르다
unionall이 넷중에서 빠르다

DDL
TCL
Truncate(입주민 퇴거 구조남음 로그정보가 남는다) vs drop(철거 - 구조도 삭제)
Truncate vs delete
DDL vs DML(rollback과 commit이 연관되서 나옴)

DML
(insert, update, delete) TCL commit rollback 과 연관지어 나옴
insert (_, _, _)
values(_, _) 오류에 대해서 공부
merge 신유형

제약조건 
P.K = unique + notnull
unique
notnull

DCL
Grant, revoke 문법
role 특징 객체
View 테이블보다는 데이터용량이 적게 든다

 

독편부(그냥 외워야 함)
독립성 - 기존테이블의 구조가 변경되어도 뷰도 같이 변경됨
편리성 - 계속 테이블을 조작할 필요없음
보안성 - 원하는데이터만 보여주고 나머지는 숨겨서 보여줄수있다

그룹함수 중요!
roll up - rollup (A,B) rollup(B,A) 계층구조여서 다르다
cube - cube (A,B) cube (B,A) 같다
groupingsets
grouping 요즘 잘 안씀.
1. null 다찾기
2. 총합행 있을때 행의수가 많은면 cube 적으면 rollup
없을때 groupingsets

TCL
commit
rollback
(auto commit off 
and 
begin transaction)
DDL의 commit 기능없앰