KoreanFoodie's Study
SQL 기초 - 4. 데이터 읽기(SELECT, 조건문, 정렬) 본문
이 글은 '김상형의 SQL 정복'의 예제 코드를 설명하는 방식으로 SQL 쿼리 예제를 소개하고 있습니다.
SQL 기초 - 4. 데이터 읽기(SELECT, 조건문, 정렬)
-- 원하는 열만 선택해서 가져올 수 있다.
SELECT name, area, popu, metro, region FROM tCity;
SELECT * FROM tCity;
-- AS를 사용하여 새로운 별명을 만들어 줄 수 있다.
SELECT name AS 도시명, area AS "면적(제곱Km)", popu AS "인구(만명)" FROM tCity;
-- AS대신 '='을 활용하여 별명을 붙여 줄 수도 있다.
SELECT 도시명 = name, area '면적(제곱Km)', popu [인구(만명)] FROM tCity;
-- 열을 출력할 때 연산을 할 수 있다.
SELECT name, popu * 10000 AS "인구(명)" FROM tCity;
SELECT name, area, popu, popu * 10000 / area AS "인구밀도" FROM tCity;
SELECT 60 * 60 * 24 AS "하루" FROM dual;
-- 그냥 연산.
SELECT 60 * 60 * 24;
-- WHERE을 이용해 조건문을 생성한다.
SELECT * FROM tCity WHERE area > 1000;
SELECT name, area FROM tCity WHERE area > 1000;
-- 문자열은 '' 로 감싸주어야 한다.
SELECT * FROM tCity WHERE name = '서울' -- 맞음
SELECT * FROM tCity WHERE name = 서울 -- 틀림
SELECT * FROM tCity WHERE name = "서울" -- 틀림. 단, 마리아는 인정한다.
-- 변수=NULL로는 NULL을 찾을 수 없다.
SELECT * FROM tStaff WHERE score = NULL;
-- IS NULL, NOT NULL 을 이용해야 NULL값 체크가 가능하다.
SELECT * FROM tStaff WHERE score IS NULL;
SELECT * FROM tStaff WHERE score IS NOT NULL;
-- AND/OR/!/NOT 등의 논리 연산자를 잘 활용해보자.
SELECT * FROM tCity WHERE popu >= 100 AND area >= 700;
SELECT * FROM tCity WHERE region = '경기' AND popu >= 50 OR area >= 500;
SELECT * FROM tCity WHERE region = '경기' AND (popu >= 50 OR area >= 500);
SELECT * FROM tCity WHERE region != '경기';
SELECT * FROM tCity WHERE NOT(region = '경기');
SELECT * FROM tCity WHERE region = '전라' OR metro = 'y';
SELECT * FROM tCity WHERE region != '전라' AND metro != 'y';
SELECT * FROM tCity WHERE NOT(region = '전라' OR metro = 'y');
-- %를 이용해 REGEX의 *+같은 효과를 만들 수 있다 (와일드 카드).
-- '_'는 한 글자만을 대체한다.
SELECT * FROM tCity WHERE name LIKE '%천%';
SELECT * FROM tCity WHERE name NOT LIKE '%천%';
SELECT * FROM tCity WHERE name LIKE '천%';
SELECT * FROM tCity WHERE name LIKE '%천';
SELECT * FROM tCity WHERE TRIM(name) LIKE '%천';
-- 오라클에서는 BETWEEN이라는 직관적인 문법을 사용할 수 있다.
-- 이는 날짜나 문자열 데이터에도 적용 가능하다.
SELECT * FROM tCity WHERE popu BETWEEN 50 AND 100;
SELECT * FROM tCity WHERE popu >= 50 AND popu <= 100;
SELECT * FROM tStaff WHERE name BETWEEN '가' AND '사';
SELECT * FROM tStaff WHERE joindate BETWEEN '20150101' AND '20180101';
-- 특정 범위가 아닌 요소들의 집합은 IN으로 표현한다.
SELECT * FROM tCity WHERE region IN ('경상', '전라');
SELECT * FROM tCity WHERE region = '경상' OR region = '전라';
SELECT * FROM tCity WHERE region NOT IN ('경상', '전라');
-- LIKE IN 문법은 허용되지 않는다. 대신 LIKE ... OR LIKE ... 로 표현한다.
SELECT * FROM tStaff WHERE name LIKE IN ('이%', '안%');
SELECT * FROM tStaff WHERE name LIKE '이%' OR name LIKE '안%';
-- ORDER BY를 통해 정렬이 가능하고, DESC를 통해 내림차순도 가능하다.
SELECT * FROM tCity ORDER BY popu;
SELECT * FROM tCity ORDER BY popu DESC;
-- 다중 정렬도 가능하다. 먼저 정렬된 요소가 우선순위를 갖는다.
SELECT region, name, area, popu FROM tCity ORDER BY region, name DESC;
SELECT * FROM tCity ORDER BY area;
SELECT * FROM tCity ORDER BY 2;
SELECT name FROM tCity ORDER BY popu;
SELECT name, popu * 10000 / area FROM tCity ORDER BY popu * 10000 / area;
SELECT * FROM tCity WHERE region = '경기' ORDER BY area;
SELECT * FROM tCity ORDER BY area WHERE region = '경기';
SELECT region FROM tCity;
SELECT DISTINCT region FROM tCity;
SELECT DISTINCT region FROM tCity ORDER BY region;
-- ALL은 기본적으로 내재되어 있다. 중복을 허용해 출력한다.
-- DISTINCT는 출력 시 중복된 요소를 제거한다.
SELECT ALL depart FROM tStaff;
SELECT DISTINCT depart FROM tStaff;
-- rowid는 자동생성되는 고유 식별문자열이고, rownum은 행 번호이다(자동).
SELECT name, rowid, rownum FROM tCity;
SELECT * FROM tCity WHERE rownum <= 4;
SELECT * FROM tCity ORDER BY area DESC WHERE rownum <= 4;
SELECT * FROM tCity WHERE rownum <= 4 ORDER BY area DESC;
-- 서브쿼리문을 통해 제일 area가 큰 4개를 고른다. 하지만 이 쿼리는 비효율적이다.
SELECT * FROM (SELECT * FROM tCity ORDER BY area DESC) WHERE rownum <= 4;
-- TOP, PERCENT는 MARIADB에서 사용 가능한 문법이다.
SELECT TOP 4 * FROM tCity ORDER BY area DESC;
SELECT TOP 20 PERCENT * FROM tCity ORDER BY popu DESC;
SELECT * FROM tExam ORDER BY Score DESC;
SELECT TOP 100 * FROM tExam ORDER BY Score DESC;
SELECT TOP 1 PERCENT WITH TIES * FROM tExam ORDER BY Score DESC;
SELECT * FROM tCity ORDER BY area DESC LIMIT 4;
SELECT * FROM tCity ORDER BY area DESC LIMIT 2, 3;
-- SQL 표준에서는 OFFSET 시작지점-1 ROWS FETCH NEXT 갯수 ROWS ONLY 를 이용하여
-- 원하는 행의 갯수를 추출할 수 있다.
SELECT * FROM tCity ORDER BY area DESC OFFSET 0 ROWS FETCH NEXT 4 ROWS ONLY;
SELECT * FROM tCity ORDER BY area DESC OFFSET 2 ROWS FETCH NEXT 3 ROWS ONLY;
SELECT * FROM tCity WHERE metro = 'n' ORDER BY area DESC OFFSET 2 ROWS FETCH NEXT 3 ROWS ONLY;
'Database' 카테고리의 다른 글
SQL 기초 - 6. 데이터 관리(삽입, 삭제, 갱신) (0) | 2021.10.12 |
---|---|
SQL 기초 - 5. 데이터 집계 (집계함수, 그룹핑) (0) | 2021.10.12 |
SQL 기초 - 2. 테이블 생성과 삽입 (2) | 2021.10.12 |
SQL 첫걸음 - 3. 정렬과 연산 (0) | 2021.10.07 |
SQL 첫걸음 - 2. 테이블에서 데이터 검색 (0) | 2021.10.07 |
Comments