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 - 데이터베이스의 여러 테이블에서 가져온 레코드를 조합하는 문