[제로베이스 데이터 분석 취업 스쿨]Day14 SQL

Primary key

하나의 기본키 추가

여러개의 기본키 추가

혹은 아래와 같은 양식을 따른다.

ALTER TABLE TABLENAME
ADD CONSTRAINT PK_TABLENAME PRIMARY KEY (COLUMN1, COLUMN2);

 

기본키 삭제

alter table tablename drop primary key;

기본키가 여러개라도 모두 삭제된다. 

 

 

기본키 추가

alter table tablename add primary key (columname);

 

외래키

Constraint를 사용한 외래키 생성

foreign key로 바로 생성

'''
foreign key (column) referencess OtherTableName(column)

'''

 

외래키 삭제/추가 

추가

alter table tablename
add foreign key (column) references OtherTable(column);

삭제

alter table tablename
drop foreign key (foreign key name)

 

Group by, having

crime_status에서 경찰서별로 그룹화하여 경찰서 이름을 조회

select police_station
from crime_status
group by police_station

 

Having

Group by 하위에 조건을 나타날 때 사용한다.

경찰서 별로 발생한 범죄 건수의 합이 4000건보다 큰 경우를 검색

SELECT police_station, sum(case_number) count from crime_status
where status_type like '발생' group by police_station having count > 4000;

 

Scalar Functions

 

MID 함수 

 

FORMAT

FORMAT을 사용하여 천원 단위로 끊기 

소수점 자릿수 끊기 

 

SQL Subquery

하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.

서브쿼리 안에서 order by를 사용할 수 없다.

  • Scalar Subquery -  SELECT 절에 사용, 결과는 하나의 Column이어야 한다. 
  • Inline View - FROM 절에 사용, 메인쿼리에서는 inline view에서 조회한 column만 사용이 가능 
  • Nested Subquery - WHERE 절에 사용
    • single row : 하나 행을 검색하는 서브쿼리
      • 서브쿼리가 비교연산자와 사용되는 경우, 서브쿼리의 검색 결과는 한 개 행의 결과값을 가진다. 
        • multiple row : 하나 이상의 행을 검색하는 서브쿼리
        • multiple column :  하나 이상의 열을 검색하는 서브쿼리 
select name from celab where name = (select host from snl_show where id =1);

 

Scalar Subquery

예제1. 서울은평경찰서의 강도 검거 건수서울시 경찰서 전체의 강도 건 조회

두 가지 쿼리를 한 쿼리로 나타내려고 한다.

 

실습 

   😊실습환경 구축 할 때, 스키마 짤 때 테이블명 제대로 짜야지 시간 낭비 하지 않는다.😊

 

예제 1 

경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회 

 

nested subquery

single row subquery

select name from celab where name = (select host from snl_show where id =1);

name
강동원

행이 하나만 출력된다.

 

multiple row - IN

SNL에 출연한 영화배우 검색

SELECT HOST
FROM SNL_SHOW
WHERE HOST IN (SELECT NAME FROM CELAB WHERE JOB_TITLE LIKE '%영화배우%');

host
강동원
차승원

 

Multiple row -  EXITS (존재하면 출력한다.)

범죄 검거 혹은 발생 건수가 2000건 보다 큰 경찰서 조회

SELECT NAME
FROM POLICE_STATION P
WHERE EXITS (SELECT POLICE_STATION FROM CRIME_STATUS C WHERE P.NAME = C.REFERENCE AND CASE_NUBER > 2000);

 

Multiple row - ANY

SNL에 출연한 적이 있는 연예인 이름 조회 

SELECT NAME
FROM CELAB
WHERE NAME = ANY (SELECT HOST FROM SNL_SHOW);

 

Multiple row - ALL

서브쿼리 결과를 모두 만족하면 출력 (비교 연산자 사용)

SELECT NAME
FROM CELAB
WHERE NAME = ALL(SELECT HOST FROM SNL_SHOW WHERE ID = 1);