SQL

SQL SELECT / DML

딩관 2022. 5. 12. 18:41
  • 요구하는 데이터를 가져오는 구문
  • 일반적으로 가장 많이 사용된다.
  • 데이터베이스 내 테이블에서 원하는 정보를 추출
SELECT 속성
    [FROM 테이블이름]
    [WHERE where_condition]
    [GROUP BY {col_nam | expr | position}]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}]

SELECT *

SELECT * FROM 테이블이름

테이블이름에 해당하는 테이블의 모든 데이터를 가져와라

SELECT 속성,속성 - 속성(컬럼)에 제약을 둠

SELECT 속성,속성 FROM 테이블이름

테이블이름에 해당하는 테이블에서 속성,속성에 해당하는 데이터를 가져와라 (속성 = 컬럼)

 

WHERE - 특정한 조건으로 원하는 데이터만 뽑아내기

  • 관계 연산자를 사용한다 (OR , AND)
  • 조건 연산자도 사용가능 (!= , < , >)
SELECT * FROM 테이블이름 WHERE 조건문;

예시

SELECT * FROM city WHRE population >= 8000;

city 테이블에 population 이 8000이상인 데이터만 뽑아줘

BETWEEN

  • where 문뒤에 조건식으로 사용
  • 연속적인 범위를 지정 (숫자로 구성되어야 함)
SELECT * FROM city WHERE population BETWEEN 5000 AND 8000

파퓰레이션이 5000에서 8000사이인 데이터를 출력

IN() - 이산적인 값의 조건에서 사용

SELECT * FROM city WHERE name IN ('New York','Japan' ,'KOREA')

데이터 중에 Japan , New York , KOREA 의 값이 있는 친구들만 보여줘

LIKE - 문자열 내용 검색하기 위해 사용

  • _ : _부분에 문자열이 매칭되는것을 가져온다 _ 1개당 한글자만 가능 
SELECT * FROM city WHERE CountryCOde LIKE'KO_'

KOR , KOO ,KOA ,KOT 등 글자수에 제한이있다.

 

  • % - 무엇이든 허용
SELECT * FROM city WHERE CountryCOde LIKE'KO%'

KOASAQ ,KOREA , KOAAWA 등 글자수에 제한이 없다. 단 위치에는 제한이있다

 

Sub Query - 중첩 질의문

  • 서브쿼리의 결과가 둘 시앙이 되면 에러 발생
  • 괄호를 사용함
  • WHERE절 뒤에 속성과 서브쿼리 의 SELECT 문 뒤에 나오는 속성은 같아야함
SELECT * FROM city WHERE CountryCode * 
(SELECT CountryCode FROM city WHERE name = 'seoul')
  • 2번째줄 코드 : city테이블의 name이 'seoul'인 컨튜리코드들
  • 1번째 줄 코드 : 괄호안에 코드에 해당하는 Country Code를 모두 찾아줘

ANY - 서브쿼리의 결과중 한가지만 만족해도 가능은 

  •  = ANY 구문은 IN과 동일한 의미
  • SOME은 ANY와 동일한 의미
SELECT * FROM city WHERE population > ANY
(SELECT Population FROM city WHERE District = 'New York')
  • 2번째 코드 DIstirict 가 'New York' 인 Population을 보여줘
  • 해당 결과는 여러개이다. 
  • Population > ANY : New York 를 가지고있는 데이터의 Population보다 하나라도 Population이 높으면 출력해줘
  • 이문구같은경우는 최소값보다 높은 경우로 해석 가능

ALL - 서브쿼리의 모든 결과를 만족시켜야함

SELECT * FROM city WHERE population > ALL
(SELECT Population FROM city WHERE District = 'New York')
  • 2번째 코드 DIstirict 가 'New York' 인 Population을 보여줘
  • 해당 결과는 여러개이다. 
  • Population > ANY : New York 데이터를 가지고 모든 Population 보다 Population이 높으것만 출력해줘
  • 이문구같은 경우는 최대값보다 높은 경우로 해석 사능

ORDER BY - 결과의 출력되는 순서를 조절하는 문구

  • 기본적으로 오름차순(ASCENDING)
  • 열이름뒤에 DESC(DESCENDING) 적으면 내림차순으로 가능
  • ASC는 default 이므로 생략가능
SELECT * FROM 테이블이름 ORDER BY 속성 DESC or 생략

ORDER BY 뒤에 나오는 속성을 기준으로 정렬

 

혼합하여 사용하기

SELECT * FROM 테이블이름 ORDER BY 속성 DESC , 속성 ASC

첫번째 속성순으로 DESC으로 안에서 두번째 속성순으로 ASC으로

DISTINCT - 중복된것을 제외하고

SELECT DISTINCT 속성 FROM 테이블

SELECT 다음에 온다

LIMIT - 출력 개수를 제한

SELECT * FROM 테이블 이름 LIMIT 30;
  • LIMIT N ; : 상위 N개만큼 출력

GROUP BY - 그룹으로 묶어서 출력

  • 집계 함수를 함께 사용
SELECT CountryCode, MAX(Population) FROM city
GROUP BY CountryCode

CountryCode 별로 묶어서 출력하는데 Population 이 제일큰것만 보여줘

 

AS로 별칭사용

SELECT CountryCode, MAX(Population) AS '맥스!' FROM city
GROUP BY CountryCode

맨위의 코드 결과에 속성(컬럼)은 MAX(Population)으로 나온다 AS를 사용하면 AS 뒤에 문자열이 속성이름으로 대체된다.

HAVING - GROUP BY에 조건을 거는 문

  • WHERE과 비슷한 개념으로 조건 제한
  • HAVING절은 반드시 GROUP BY절 다음에 나와야함
  • 집계 함수에 대해서 조건제한하는 편리한 개념
SELECT CountryCode, MAX(Population) AS '맥스!' FROM city
GROUP BY CountryCode HAVING MAX(Population) > 500

MAX(Population)이 500이상인 것만 출력

ROLLUP - 중간합계 or 총합이 필요한 경우

  • GROUP BY 절과 함꼐 WITH ROLLUP문을 사용
SELECT CountryCode , Name , SUM(Population) FROM city
GROUP BY CountryCode , Name WITH ROLLUP

이럴경우 GROUP BY CountryCode 별 Population이 출력되고 아래 쪽에 합계 (SUM()함수)가 또한줄 출력된다.

JOIN -  데이터베이스의 여러 테이블에서 가져온 레코드를 조합하는 문