Day 15 SQL

가연·2024년 12월 27일

필드 명은 영어로 설정
대소문자 차이 없음
데이터 형식 : 문자(CHAR), 숫자(INT), 날짜(DATE), ..
+ NULL 허용/비허용 (- 옵션), 글자 수, 종류(한/영, 정수..) 제한

쿼리문은 덩어리로 해석해야한다
select ~Field~ from ~Table~ where ~조건~

PK (Primary Key) : table에서 unique한 키
FK (Foreign key) : table 사이의 관계를 나타내는 키
PK = FK 일 수도 있고 아닐 수도 있음

주의!!

backtick 사용법
'' 와 ``는 다르게 사용된다!
``은 필드명이나 테이블명에 사용

인덱스 작업 처리

속도 면에서 인덱스 처리를 해야함. 파이썬의 Dict 개념

create table indextbl(
	first_name varchar(14),
    last_name varchar(16),
    hire_name date
);

** create index 인덱스이름 on 대상테이블(인덱스 할 컬럼);

다른 DB Data 활용

select * from ~~DB~~ ;

filtering

select column1, column2, column3 from ~~DB~~ limit 개수;
DB에서 원하는 컬럼들만 추출하기 (개수는 제한하고 싶은 만큼)

insert into 테이블 select col1,col2,col3 from DB limit 개수;
table에 필터링된 정보 덩어리로 들어감

where

select * from 테이블 where column1 = " ";
특정 조건을 가진 데이터 찾기
인덱싱 되어있어 빠르게 찾을 수 있다

  • 정확한 값으로 작성할 때 : = 값
  • 조건이 여러개인 경우 : and, or, 부등식 etc
    숫자 범위일 경우 between A and B
    항목 범위일 경우 in
  • 유사 검색인 경우 : like + ( _ , % ) _는 1글자, %는 자유
  • 결측치 : isnull / is not null - 공회전 주의

서브 쿼리()가 2개 이상의 값일 경우

  • any : or. 한 값만 만족
  • all : and. 모든 값 만족

서브 쿼리

select name, height from usertbl where height = (select max(height) from usertbl);
쿼리 내에 쿼리

쿼리문 묶기

모니터링 or 지속적 확인이 필요할 때

DELIMITER // # 쿼리문 끝났다
create procedure myproc()
begin 
select * from membertbl where memberName = " ";
select * from productbl where productName = " ";
end//
DELIMETER ;

다시 돌아옴 쿼리문

변경

Trigger : 생성, 변경, 삭제 - insert, update, delete

  • 생성
    insert into membertbl values("soccer", "손흥민", "강원도 춘천시 모름동");
  • 변경
    update membertbl set memberAddress ="영국 토트넘" where memberName="손흥민";
  • 삭제
    delete from membertbl where memberName="손흥민";

자동적으로 모니터링하는 trigger 생성

DELIMITER //
create trigger trg_delmembertbl  -- 트리거 이름
		after delete             -- delete 쿼리문 실행하고나서
	on membertbl                 -- 트리거 부착 대상(테이블)
    for each row                 -- 각 줄마다 적용
    begin    -- 할 일(모니터링), 변경에 대한 정보 저장
		 insert into delmembertbl values(
				old.memberID,
                old.memberName,
                old.memberAddress,
                curdate()
         );
    end //
DELIMITER ;

테이블

show table status; #tabel명
desc table_name; # =df.info() #table을 속성/필드 중심으로 볼 때

select

select 볼 항목 from 대상;

  • : 모든 항목
    select col1, col2 as " " from 필드;
    as : col2를 " "로 바꿔서 표시 (별칭)

정렬 ( ≈ sorted)

order by ~~

: ~~ 기준으로 오름차순(default)
- order by ~~ asc : 오름차순
- order by ~~ desc : 내림차순
기준이 동일하다면, 뒤에 , ~~ 으로 두 번째 기준

distinct

중복된 값을 제거하고, 유니크한 값만 보게 해준다.
select distinct addr from usertbl order by addr;
addr 순서 반영하여 값들 추출. (1개씩만)

limit

: 개수 제한. 주로 맨 뒤에 붙는다. ex/ limit 5;

Groupby

데이터를 기준별로 묶어서 처리 (집계처리)
여러 개의 값을 대표화 필요
-> avg, min, max, ... / count, count(distinct) - 종류 개수

  • having : data를 필터링.
    where - 원본 데이터의 값을 중심으로 필터링
    having - group by새롭게 만들어진 값을 중심으로 필터링

ex/ groupby+orderby+as+limit

select userID, sum(amount) as `총구매건수` from buytbl group by userID order by `총구매건수` asc limit 5;

user의 총 구매 건수를 오름차순으로 5명까지 나타냄. 별칭을 사용해서 정렬에 적용!
** 순서 주의

counting

select count(*) from usertbl;
-> column이 매우 클 때, 속도 이슈 주의
=> select count(1) from usertbl; or select count(PK) from usertbl;이 좀 더 빠름

having

having (조건)
ex/
select userID, sum(amount*price) as `총구매금액` from buytbl group by userID having `총구매금액` > 1000 order by `총구매금액` asc;

쿼리 순서 주의! select 볼 대상들 from 어디서 where 원본 값 필터링 group by 집계처리 having 집계된 값 필터링 order by 정렬 limit 개수;

순서

0개의 댓글