SQL DML(SELECT)

yeoni·2024년 1월 12일
0

SQL

목록 보기
3/11
post-custom-banner

SELECT - 데이터 조회

  • WHERE 조건: SQL 문에 조건을 추가하며 SELECT 뿐만 아니라 UPDATE 와 DELETE 에도 사용가능
# 테이블 내의 특정 칼럼에 대한 데이터를 조회
SELECT column1, column2 FROM tablename;

# 테이블 내의 모든 컬럼에 대한 데이터를 조회
SELECT * FROM tablename;

# 테이블 내에서 조건을 만족하는 데이터 조회
SELECT column1, column2 FROM tablename WHERE condition;

1) GROUP BY

  • 그룹화하여 데이터를 조회
  • ORDER BY 가능
SELECT column1, column2,..
FROM tablename
WHERE condition
GROUP BY column1, column2,..
ORDER BY column1, column2,..;

# crime_status 에서 경찰서별로 그룹화 하여 경찰서 이름을 조회
# DISTINCT와 비슷해보이지만 ORDER BY를 사용할 수 있다
SELECT police_station
FROM crime_status
GROUP BY police_station
ORDER BY police_station
LIMIT 5;

# 경찰서 별로 총 발생 범죄 건수를 검색
SELECT police_station, sum(case_number) 발생건수
FROM crime_status
WHERE status_type LIKE '발생'
GROUP BY police_station
ORDER BY 발생건수 DESC
LIMIT 5;

2) HAVING

  • 조건에 집계함수가 포함되는 경우 WHERE 대신 HAVING 사용
SELECT column1, column2,..
FROM tablename
WHERE condition
GROUP BY column1, column2,..
HAVING condition (Aggregate Functions)
ORDER BY column1, column2,..;

# 경찰서 별로 발생한 범죄 건수의 합이 4000 건보다 보다 큰 경우를 검색
SELECT police_station, sum(case_number) 발생건수
FROM crime_status
WHERE status_type LIKE '발생'
GROUP BY police_station
HAVING 발생건수 > 4000;

3) ORDER BY

  • SELECT 문에서 데이터를 특정 컬럼을 기준으로 오름차순 혹은 내림차순 정렬하여 조회
  • ASC(Ascending): 오름차순으로 정렬
  • DESC(Descending): 내림차순으로 정렬
  • ASC를 생략해도 기본은 오름차순 정렬
SELET column1, column2 
FROM tablename 
ORDER BY column1, column2 asc | desc;

# celeb 테이블에서 이름과 나이를 나이의 역순으로 정렬한 뒤 이름순으로 정렬하여 조회
SELECT age, name FROM celeb
ORDER BY age DESC, name ASC;

4) CONCAT

  • 여러 문자열을 하나로 합치거나 연결
SELECT CONCAT('string1', 'string2', ..);
SELECT CONCAT('이름: ', name) FROM celeb;

5) ALIAS

  • 칼럼이나 테이블 이름에 별칭 생성
  • AS는 생략도 가능
SELECT column AS alias FROM tablename;
SELECT column1, column2 FROM tablename AS alias;

SELECT name AS '이름', agency AS '소속사' FROM celeb;
SELECT CONCAT(name, ' : ', job_title) AS profile FROM celeb;
  • snl_korea 에 출연한 celeb 을 기준으로 두 테이블을 조인하여 다음과 같이 각 데이터의 별칭을 사용하여 검색
    • 시즌, 에피소드, 방송일을 합쳐서 ‘방송정보’
    • 이름, 직업을 합쳐서 ‘출연자정보’
SELECT CONCAT(s.season, '-', s.episode, '(', s.broadcast_date, ')') '방송정보',
	CONCAT(c.name, '(', c.job_title, ')') '출연정보'
FROM celeb c, snl_show s
WHERE c.name= s.host;

6) DISTINCT

  • 검색한 결과의 중복 제거
  • ORDER BY 를 사용할 수 없음
SELECT DISTINCT column1, column2.. FROM tablename;

SELECT DISTINCT sex, agency FROM celeb WHERE agency LIKE '%엔터테이먼트' ORDER BY sex, agency;

7) LIMIT

  • 검색결과를 정렬된 순으로 주어진 숫자만큼만 조회
SELECT column1, column2,.. 
FROM tablename
WHERE condition
LIMIT number;

# celeb 테이블에서 남자 연예인 중 나이가 가장 많은 2명을 조회
SELECT * FROM celeb WHERE sex='M' ORDER BY age DESC LIMIT 2;

Reference
1) 제로베이스 강의자료

profile
데이터 사이언스 / just do it
post-custom-banner

0개의 댓글