일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- BFS
- 공개키 암호화
- cloud computing
- python
- JDBC
- 자바의정석
- 클라우드 컴퓨팅
- 생성자
- Algorithm
- DB
- 자료구조
- Java
- 코딩테스트
- dfs
- Stack
- dbms
- Queue
- generic class
- MVC
- sql
- 가상컴퓨팅
- data structure
- jsp
- spring
- 알고리즘
- 암호학
- javascript
- JPA
- 코테
- 크루스칼
- Today
- Total
PLOD
SQL QUERY [SELECT] 본문
SQL(Structured Query Language)
MySQL 같은 DBMS를 사용하면 쿼리문을 사용하지 않고 테이블을 생성하고 제거할 수 있지만 쿼리문을 사용하여 DB를 관리하는 것이 쉽기 떄문에 SQL쿼리문은 알아 두어야 한다.
SELECT(검색)
테이블에 있는 데이터를 불러오는 쿼리이다.
select * from emp;
EMP테이블에 있는 모든 데이터를 조건없이 불러온다
SELECT ENAME FROM EMP;
EMP테이블에 있는 데이터 중 ENAME(사원이름) attribute 값만 추출해서 출력해 준다.
위의 데이터 문을 활용하면 원하는 테이블의 원하는 데이터 값만 추출해서 출력 할 수 있다.
SELECT 컬럼명1,컬럼명2 FROM 테이블명;
이런식으로 사용하면 된다.
*WHERE (조건)
select empno,ename,job, sal,mgr,deptno
from emp where job = 'MANAGER';
WHERE 구문을 추가하여 해당 조건이 참인 데이터만 불러온다 . 위의 데이터 문에서 JOB(직무)이 'MANAGER'인
데이터만 출력해준다. WHERE 조건에서 특정 컬럼의 내용을 지칭할 때는 그냥 따옴표(' ')를 사용한다.(NUMBER 값은 따옴표 필요 없음, VARCHAR만 해당)
ORDER BY(오름차순,내림차순)
-- ORDER BY
SELECT *
FROM EMP
ORDER BY HIREDATE ASC;
-- 오름차순 정렬
SELECT * FROM EMP ORDER BY SAL
LIMIT 5;
-- 내림차순 정렬
SELECT * FROM EMP ORDER BY SAL DESC
LIMIT 5;
ORDER BY 구문을 사용하면 출력한 데이터를 원하는 값의 데이터를 원하는 순서로 정렬할 수 있다
예를 들면 ASC를 붙이면 오름차순 DESC를 사용하면 내림차순으로 정렬해 준다.
ORDER BY 뒤에 LIMIT [숫자]를 사용하면 출력되는 데이터의 양을 선택 할 수 있다.
ex) 프로그래머스 - 인기있는 아이스크림
https://school.programmers.co.kr/learn/courses/30/lessons/133024
SELECT FLAVOR FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC
AS(컬럼 별칭)
AS(Alias) 와 집계함수를 사용하면 Attribute의 이름을 바꿔서 데이터를 더 쉽게 관리 하고 보기 편하게 할 수 있다.
별칭을 사용할 때는 쌍따옴표(" ")를 사용한다.
SELECT EMPNO,ENAME,SAL, (SAL * 12) AS 연봉
FROM EMP
ORDER BY 연봉;
집계함수는 평균을 구하는 AVG, 최소값을 구하는 MIN, 최대값을 구하는 MAX, 행의 개수를 구하는 COUNT등이 있다.
BETWEEN
BETWEEN은 ** 이상 ** 이하 에 있는 값을 출력하게 해준다
-- BETWEEN
select ename,job,sal,deptno from emp
where sal between 1300 and 1700;
IN(in-list)
IN은 쿼리에 특정 값이 포함될 때 출력 할 수 있다. 여러 값들 중 하나와 일치하는 값일 때 출력한다.
-- IN
select empno,ename,job,sal,hiredate from emp
where empno in (7902,7788,7566);
DISTINCT(중복값 제거)
DISTINCT는 같은 컬럼에 있는 동일한 값은 한번만 출력하게 해주는 명령이다. DISTINCT는 SELECT 바로 뒤에 사용된다.(컬럼 사이에 끼우면 ERROR) ,DISTINCT는 여러 컬럼에 할당할 수 있는데 중복값을 제외 했을 때 가장 많은 튜플을 가지고 있는 컬럼 위주의 개수로 출력한다.
SELECT DISTINCT ENAME,JOB,SAL
FROM EMP;
ex) 프로그래머스 - 중복제거하기
https://school.programmers.co.kr/learn/courses/30/lessons/59408
SELECT COUNT(DISTINCT NAME) AS count FROM ANIMAL_INS
WHERE NAME IS NOT NULL;
LIKE
LIKE 문자의 패턴이 일치하는 값을 출력하게 해주는 명령이다. 패턴에 사용하는 만능문자는 '%' , '_' 가 있다. 먼저 '% '는 CHARACTER 개수가 0개 이상인 여러개의 모든 문자(숫자,특수문자)를 의미한다. '_' 는 CHARACTER 개수가 1개 , 모든 문자를 의미한다.('_'는 몇 번째 글자수를 알 때 ,'%'는 글자수를 모를 때 사용한다.)
-- LIKE
select empno, ename,job,sal,hiredate,deptno
from emp
where hiredate like '%82%';
SELECT ENAME,SAL FROM EMP
WHERE ENAME LIKE 'M%';
SELECT ENAME, JOB FROM EMP
WHERE ENAME LIKE '%L%'
SELECT ENAME, SAL FROM EMP
WHERE ENAME LIKE '%N';
코딩테스트 연습 - 강원도에 위치한 생산공장 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT FACTORY_ID,FACTORY_NAME,ADDRESS FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%';
escape
특수문자가 포함된 컬럼의 레코드를 검색하려면 escape 문자를 사용하여 검색해야 한다.
CREATE TABLE TEST(
NAME VARCHAR(10)
);
INSERT INTO TEST VALUES ('ABC');
INSERT INTO TEST VALUES ('A%BC');
INSERT INTO TEST VALUES ('A_BC');
INSERT INTO TEST VALUES ('ABC123');
SELECT * FROM TEST
WHERE NAME LIKE '_$%%' ESCAPE '$';
IS NULL
IS NULL 명령어는 WHERE에서 값이 NULL인 값을 출력할 수 있다. 반대로 IS NOT NULL은 값이 NULL 값이 아닌 값을 출력하게 해준다.
-- IS NULL
SELECT EMPNO, ENAME, JOB, SAL, COMM, DEPTNO
FROM EMP
WHERE COMM IS NULL;
-- NOT NULL
SELECT EMPNO, ENAME, JOB, COMM, DEPTNO
FROM EMP
WHERE COMM IS NOT NULL;
||' '||(컬럼 모아 출력)
컬럼끼리 분리하지 않고 데이터의 내용을 모아서 출력해야 되는 경우가 간혹 있다. 그런 경우에 ||' '||를 사용하여 다른 컬럼의 내용을 출력할 수 있게 해준다.
SELECT ENAME||' '||JOB "EMPLOYEE AND TITLE"
FROM EMP;
SELECT EMPNO ||' '||ENAME||' '||JOB||' '||DEPTNO||' '||HIREDATE||' '||SAL||' '||MGR||' '||COMM
AS RESULT FROM EMP;
지금까지 SQL에서 select 구문을 배워보았다. SQL 질의문을 사용할 때 문법은 아래의 문법을 참고해서 작성해보면 대충 다 맞더라.
NOT(논리 부정 )
NOT을 사용하면 where 절의 조건문에서 false에 해당하는 조건들을 효과적으로 출력할 수 있다. NOT 연산자는 IN,BETWEEN, IS NULL 연산자와 함께 복합적으로 사용하는 경우가 많다.
SELECT * FROM EMP WHERE NOT SAL = 3000;
SELECT * FROM EMP
WHERE SAL NOT BETWEEN 1000 AND 2000;
SELECT * FROM EMP
WHERE MGR IS NOT NULL;
날짜 자료형(date)
SELECT 문 사용시 날짜(DATE) 조건을 사용하여 데이터를 검색 할 수 있다. WHERE 조건문에서 특정 날짜와 일치하거나 ,부등호(<,>) BETWEEN 명령어를 사용하여 특정 날짜 이전 또는 이후 범위를 지정하여 레코드를 조회할 수 있다.
코딩테스트 연습 - 조건에 부합하는 중고거래 댓글 조회하기 | 프로그래머스 스쿨 (programmers.co.kr)
SELECT B.TITLE , B.BOARD_ID, R.REPLY_ID , R.WRITER_ID,
R.CONTENTS , DATE_FORMAT(R.CREATED_DATE,"%Y-%m-%d") FROM USED_GOODS_BOARD B,
USED_GOODS_REPLY R
WHERE B.BOARD_ID = R.BOARD_ID AND B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY R.CREATED_DATE, B.TITLE ASC
만약 연도에 상관없이 3월에 태어난 사람들을 출력하고 싶을 때는 WHERE 절에 DATE_FORMAT(R,CREATE_DATE,'%m') = '03'을 사용하여 출력하면 된다.
select (컬럼명 OR *(전체 출력))
from (테이블 명)
[where ~] (FILTER (출력)조건)
[group by ~] (컬럼명)
[having ~] (그룹 조건)
[order by ~] (출력 방법(오름차순, 내림차순))
'개발 공부 > Database' 카테고리의 다른 글
[DB Modeling] Re-introduction to Database (0) | 2022.10.25 |
---|---|
SQL QUERY [JOIN] (0) | 2022.09.25 |
SQL QUERY [DDL, DML] (0) | 2022.09.23 |
[DB] 데이터베이스의 정의와 용어 (0) | 2022.09.23 |
[DB]DB와 DBMS (0) | 2022.09.23 |