DATABASE DML SELECT
SELECT
정의 : 데이터를 검색할때 사용되는 문법
SELECT FROM
기본 포멧
SELECT <column_name_1>, <column_name_2>, ... FROM <table_name>
전체 컬럼 데이터 조회
1
2sql> SELECT *
FROM world.country
code, name 세개의 컬럼 데이터 조회
1
sql> SELECT code, name FROM world.country
데이터 베이스 선택 : FROM 절에 world. 을 사용할 필요가 없다.
1
2sql> USE world;
sql> SELECT * FROM countryalias : 컬럼의 이름을 변경할수 있습니다.
1
sql> SELECT code as country_code, name as country_name FROM country
데이터 베이스, 테이블, 컬럼 리스트 확인
1
2
3sql> SHOW DATABASES;
sql> SHOW TABLES;
sql> DESC city;
WHERE
특정 조건을 주어 데이터를 검색하는데 사용되는 문법
비교연산 - 인구가 1억이 넘는 국가를 출력
1
SELECT * FROM country WHERE Population >= 100000000
논리 연산 : AND, OR - 인구가 7000만에서 1억인 국가를 출력
1
2SELECT * FROM country
WHERE Population >= 70000000 AND Population <= 100000000범위 연산 : BETWEEN
인구가 7000만에서 1억인 국가를 출력
1
2SELECT * FROM country
WHERE Population BETWEEN 70000000 AND 100000000아시아와 아프리카 대륙의 국가 데이터를 출력
1
2SELECT * FROM country
WHERE Continent = "Asia" OR Continent = "Africa"
특정 조건을 포함 : IN, NOT IN
아시아와 아프리카 대륙의 국가 데이터를 출력
1
2SELECT * FROM country
WHERE Continent IN ("Asia", "Africa")아시아와 아프리카 대륙의 국가가 아닌 데이터를 출력
1
2SELECT * FROM country
WHERE Continent NOT IN ("Asia", "Africa")아시아와 아프리카 대륙의 국가가 아닌 데이터를 출력 (논리연산 사용)
1
2SELECT * FROM country
WHERE Continent != "Asia" AND Continent != "Africa"
특정 문자열이 포함된 데이터 출력 : LIKE
- 정부형태에 Republic이 포함된 데이터 출력
1
2SELECT * FROM country
WHERE GovernmentForm LIKE "%Republic%"
- 정부형태에 Republic이 포함된 데이터 출력
ORDER BY
특정 컬럼의 값으로 데이터 정렬에 사용되는 문법
오름차순 인구순으로 국가의 리스트를 출력 (ASC는 생략이 가능)
1
SELECT * FROM country ORDER BY population ASC
내림차수 인구순으로 국가의 리스트를 출력
1
SELECT * FROM country ORDER BY population DESC
국가 코드를 알파벳 순으로 정렬하고 같은 국가 코드를 가지면 인구순으로 내림차순으로 정렬
1
SELECT * FROM city ORDER BY CountryCode ASC, Population DESC
LIMIT
LIMIT은 조회하는 데이터의 수를 제한할수 있습니다.
인구가 많은 상위 5개 국가 데이터를 출력
1
SELECT * FROM country ORDER BY population DESC LIMIT 5
인구가 많은 상위 6위 ~ 8위의 3개 국가 데이터를 출력
1
SELECT * FROM country ORDER BY population DESC LIMIT 5, 3
GRUOP BY, HAVING
GROUP BY는 여러개의 동일한 데이터를 가지는 특정 컬럼을 합쳐주는 역할을 하는 명령입니다.
SQL에는 아래와 같은 그룹함수가 있습니다.
COUNT, MAX, MIN, AVG, VAR_SAMP, STDDEV
COUNT
- city 테이블의 CountryCode를 묶고 각 코드마다 몇개의 데이터가 있는지 확인
1
2sql> SELECT CountryCode, COUNT(CountryCode) FROM city
GROUP BY CountryCode - countrylanguage 테이블에서 전체 언어가 몇개 있는지 구하시오.
- DISTINCT 중복을 제거해주는 문법
1
2sql > SELECT COUNT(DISTINCT(Language)) as language_count
FROM countrylanguage
- DISTINCT 중복을 제거해주는 문법
- city 테이블의 CountryCode를 묶고 각 코드마다 몇개의 데이터가 있는지 확인
MAX
- 대륙별 인구수와 GNP 최대 값을 조회
1
2
3
4
5
6
7
8sql> SELECT continent, MAX(Population) as Population, MAX(GNP) as GNP
FROM country GROUP BY continent
```
- MIN
- 대륙별 인구수와 GNP 최소 값을 조회 (GNP와 인구수가 0이 아닌 데이터 중에서)
```
sql> SELECT continent, MIN(Population) as Population, MIN(GNP) as GNP FROM country
WHERE GNP != 0 AND Population != 0 GROUP BY continent
- 대륙별 인구수와 GNP 최대 값을 조회
SUM
- 대륙별 총 인구수와 총 GNP
1
2
3sql> SELECT continent, SUM(Population) as Population, SUM(GNP) as GNP
FROM country
WHERE GNP != 0 AND Population != 0 GROUP BY continent
- 대륙별 총 인구수와 총 GNP
AVG
- 대륙별 평균 인구수와 평균 GNP 결과를 인구수로 내림차순 정렬
1
2
3
4sql> SELECT continent, AVG(Population) as Population, AVG(GNP) as GNP
FROM country
WHERE GNP != 0 AND Population != 0 GROUP BY continent
ORDER BY Population DESC
- 대륙별 평균 인구수와 평균 GNP 결과를 인구수로 내림차순 정렬
HAVING
GROUP BY에서 반환되는 결과에 조건을 줄수 있습니다.
대륙별 전체인구를 구하고 5억이상인 대륙만 조회
1
2
3sql> SELECT continent, SUM(Population) as Population FROM country
GROUP BY continent
HAVING Population > 500000000대륙별 평균 인구수, 평균 GNP, 1인당 GNP한 결과를 1인당 GNP가 0.01 이상인 데이터를 조회하고 1인당 GNP를 내림차순으로 정렬
1
2
3
4
5sql> SELECT continent, AVG(Population) as Population, AVG(GNP) as GNP, AVG(GNP) / AVG(Population) * 1000 as AVG
FROM country
WHERE GNP != 0 AND Population != 0 GROUP BY continent
HAVING AVG > 0.01
ORDER BY AVG DESC
WITH ROLLUP
- 고객과 스탭별 매출과 고객별 매출의 총합을 출력
1
2sql> SELECT customer_id, staff_id, SUM(amount) as amount FROM payment
GROUP BY customer_id, staff_id WITH ROLLUP
- 고객과 스탭별 매출과 고객별 매출의 총합을 출력