본 포스팅은 MySQL 8.0.23 버전을 사용중이며, 툴은 Toad for MySQL 8.0 사용 중 입니다.
CRUD 중 READ 에 대해 이야기를 해보자.
Read. 말 그대로 읽는다는 것 이다.
지난 포스팅 부터 말을 시작하자면 데이터베이스를 Create하고 그 데이터베이스에 테이블을 Create
그 후 Data들을 Insert 했다.
내가 넣은 데이터들을 이제는 읽어야 할 차례가 된것이다. 바로 SELECT 구문을 통해 읽어보자.
기존에 썼던 topic 테이블은 데이터양이 적으므로,
bbinya.tistory.com/15포스팅으로 올려놓았던 EMP 테이블 또한 같이 이용해보겠다.
SELECT 기본 문법
🖋 해당 테이블의 전체 데이터 조회
SELECT * FROM 테이블;
* 을 입력하면, 해당 테이블의 전체 데이터를 조회 할 수 있다.
전체 데이터를 조회 할 수 있다면, 당연히 해당 테이블에서 특정 컬럼들 또한 조회 할 수 있다.
SELECT (조회하고 싶은 컬럼 목록) FROM 테이블;
🖋 where 구문을 이용해 특정 조건에서의 데이터들을 얻을 수 있다.
SELECT 조회하고싶은 컬럼 FROM 테이블 WHERE 특정조건;
예를들어, author 가 egoing 인 데이터 들을 조회하고 싶다면, 아래와 같이 입력해주자.
SELECT id, title, created, author FROM topic WHERE author='egoing';
✔ 조건에서 다양한 연산자 이용
비교연산자 =, !=, >, <, >=, <=
+) 같지 않다 !=, <>, ^=
논리연산자 and, or, not
범위연산자 between A and B
목록연산자 in(A,B,C)
특정패턴 검색 like
🔎 Between 쓸때에는 컬럼명이 앞에 나온다.
컬럼명 between A and B
그럼 반대로, sal이 800보다 작고 1100보다 큰 데이터를 찾아보자.
혹은
SELECT ename, job, sal
FROM emp
WHERE sal not between 800 and 1100
ORDER BY empno;
처럼 컬럼명 뒤에 not 을 써주어도 동일한 결과가 나오는걸 확인 할 수 있다.
비교연산자로도 물론 표현이 가능하지만, 수학과는 다르게 800< sal < 1100 같은 형식이 안된다.
SELECT ename, job, sal
FROM emp
WHERE sal>=800 and sal<=1100
ORDER BY empno;
WHERE 구문에서 조건을 연달아쓰고싶다면, and 를 이용해주자.
🔎 목록연산자 in( , ) : ~안에있다 / 목록안에 포함되어 있다 or
emp 테이블에 ename이 'SCOTT' 이거나, 'KING' 인 데이터를 조회하고자 할때,
SELECT * FROM emp WHERE ename in ('SCOTT','KING');
SELECT * FROM emp WHERE ename='SCOTT' or ename='KING';
in 을 사용해주어도 되며, 논리연산자인 or 또한 사용해주어도 동일한 결과를 얻을 수 있다.
🔎 like
= 대신에 like 써준다.
like와 함께 사용 되는 기호 : % , _
% : 글자수 제한 없고 어떤 글자가 와도 된다
_ : 글자수는 무조건 한 글자만 올 수 있고, 어떤 글자가 와도 된다. 단, 무조건 한 글자이다.
ename 에 CO 가 앞 뒤로 들어간 데이터를 조회해볼려면, % % 를 양 옆에 두면 된다.
SELECT * FROM emp
WHERE ename like '%CO%';
_ 를 이용해, CO앞에 한글자, CO뒤에 두 글자가 오는것만 조회도 가능하다.
SELECT * FROM emp
WHERE ename like '_CO__'; -- 언더바 두개
🔎 is null, is not null
null : 어떤 값인지 모른다는 의미. 즉, 데이터가 없음을 의미한다. 아직 정의되지 않은 미지의 값
null 에는 어떤 연산을 수행해도 결과값은 항상 null이 나온다.
null값은 '=' 연산을 사용할 수 없다!
즉, is null, is not null을 이용해야 함
select * from emp where comm is null;
오름차순 정렬 (기본값) asc, 내림차순 정렬 desc
SQL문장의 가장 마지막에 적어야 한다.
order by 구문은 SQL에서 최대한 피해야 하는 명렁어중 하나이다.
데이터가 많을 경우 정렬을 한다는 것은 DBMS에게 큰 부담을 주는 명령어 이기 때문.
예를들어, " 나는 topic 테이블에서 author가 egoing인 데이터 중 id, title, created, author를 보고 싶은데, id가 내림차순 이였으면 좋겠어 " 이 상황일때에는,
select id, title, created, author
from topic
where author='egoing'
order by id desc;
를 적어주면 된다.
🖋 LIMIT : 결과값 제한
SELECT * FROM 테이블명 ORDER BY 필드명 ASC OR DESC LIMIT 숫자;
페이징 처리를 위해 ROWNUM 을 썼던 오라클과는 다르게, MySQL은 LIMIT 구문으로 해결이 가능하다. (신세계)
LIMIT a, b
a번 인덱스 부터 b개 만큼의 데이터를 출력한다.
먼저, emp 테이블에서 sal이 800보다 큰 데이터들을 조회해보겠다.
SELECT ename, job, sal FROM emp WHERE sal>800 ORDER BY empno DESC;
위와 같이 총 13건의 데이터가 나오게 되는데, 나는 이 데이터중 index 가 3인 데이터 부터 3개의 데이터를 출력하고싶다면 LIMIT 3,3 을 ORDER BY 구문 뒤에 적어준다.
index가 3인 ADAMS 부터 시작해서 3건의 데이터가 출력이 된다.
✔ 컬럼 별칭 사용하여 출력하기
컬럼명 뒤에 as "별칭"
(공백 이나 일부 특수기호가 있으면 반드시 " "로 묶어줘야한다)
또는 컬럼명 뒤에 "별칭" 또는 컬럼명 뒤에 별칭
as 혹은 " " 도 생략 가능하다.
SELECT ename, '님 환영합니다.' AS "인사말"
FROM emp;
SELECT ename, '님 환영합니다.' 인사말
FROM emp;
✔ distinct - 중복된 값을 제거하고 출력하기
SELECT distinct 컬럼명 FROM 테이블;
select distinct deptno, job from emp
order by deptno, job;
distinct키워드는 1개의 컬럼에만 적어도 모든 컬럼에 적용된다.
✔ SELECT 실행 순서
-문법 순서-
SELECT - 1
FROM - 2
WHERE - 3
GROUP BY - 4
HAVING - 5
ORDER BY - 6
-실행 순서-
FROM - 1
WHERE - 2
GROUP BY - 3
HAVING - 4
SELECT - 5
ORDER BY - 6
해당 데이터가 있는 곳을 찾아가서 (FROM)
조건에 맞는 데이터만 가져와서 (WHERE)
원하는 데이터로 가공 (GROUP BY)
가공한 데이터에서 조건에 맞는 것만 (HAVING)
뽑아내서 (SELECT)
정렬 (ORDER BY)
여기까지 기본적인 SELECT 문을 살펴보았고,
다음 포스팅에서는 관계형 데이터베이스 에서 다루었던 테이블 분리, 그리고 JOIN 에 대해서 포스팅 하도록 하겠다.
참고 사이트
'DataBase > MySQL' 카테고리의 다른 글
CRUD - (2) Join, Join 예제 (2) | 2021.03.09 |
---|---|
Professor, Department, Student 실습용 테이블 (0) | 2021.03.09 |
EMP, DEPT 실습용 테이블 (2) | 2021.03.05 |
CRUD - (1) Create (2) | 2021.03.04 |
MySQL 명령어 (0) | 2021.03.03 |