테이블의 데이터를 조회합니다.
select *
from tb_user tu ;
userSeq | userNumber | userName | userAge | userAddress | userJoinDate | userUse |
1 | AAA-000001 | 홍길동 | 24 | 서울시 강남구 | 2021-04-13 09:49:58 | 1 |
2 | BBB-000002 | 홍길순 | 30 | 부산 광역시 | 2021-02-23 15:13:21 | 1 |
특정 데이터만 조회하려면 where 절을 사용합니다.
select *
from tb_user tu
where tu.userName = '홍길동';
검색 대상이 문자열인 경우 like를 사용하면 문자열 내용 자체를 검색할 수 있습니다.
select *
from tb_user tu
where tu.userName like '홍길%';
% 문자는 모든 문자를 대체하므로 userName이 '홍길'로 시작하는 모든 데이터를 검색하게 됩니다. 반면 _ 문자를 사용할 수 있는데 이런 경우 단 한 글자만 대체합니다.
select *
from tb_user tu
where tu.userName like '_길동';
조건절에는 필요에 따라 조건연산자나 관계 연산자를 활용할 수 있습니다.
select *
from tb_user tu
where tu.userName = '홍길동'
and userAge >= 20;
검색 범위를 제한하려면 between을 사용하며
select *
from tb_user tu
where tu.userAge between 24 and 30;
찾을 값이 여러개라면 in을 사용할 수 있습니다.
select *
from tb_user tu
where tu.userName = '홍길동'
and userAge in (24, 30);
서브 쿼리를 통해 조건을 사용하려면 다음과 같이 쿼리를 작성합니다.
select *
from tb_user tu
where tu.userAge = (select tu2.userAge from tb_user tu2 where tu2.userName = '홍길동');
단 서브쿼리는 단 하나의 결과를 반환해야 하지만 만약 여러 개의 결과를 반환하는 경우라면 any나 all을 사용할 수 있습니다.
any는 반환되는 서브쿼리의 결과 중 하나라도 만족하는 결과를 가져오게 되며
select *
from tb_user tu
where tu.userAge >= any (select tu2.userAge from tb_user tu2);
all은 반환되는 서비쿼리의 결과를 모두 만족하는 결과를 가져오게 됩니다.
select *
from tb_user tu
where tu.userAge >= all (select tu2.userAge from tb_user tu2);
데이터의 정렬 순서는 order by를 사용합니다.
select *
from tb_user tu
order by tu.userAge asc ;
order by에서 asc는 오름차순을 의미합니다. asc는 생략할 수 있으며 기본적으로 적용되는 옵션입니다. 반면 내림차순은 desc옵션을 넣어줘야 합니다.
select *
from tb_user tu
order by tu.userAge desc ;
중복되는 데이터를 생략하고 하나만 표시하려면 distinct를 사용합니다.
select distinct userUse
from tb_user tu
order by tu.userAge desc ;
결과를 가져오는 전체 데이터중 몇 개의 row만 필요하다면 limit를 사용할 수 있습니다.
select *
from tb_user tu
limit 1;
이때 ,문자로 숫자 하나를 더 지정해 주면 '시작, 개수'처럼 사용됩니다.
select *
from tb_user tu
limit 0, 2;
select를 테이블을 생성하는 create table과 같이 사용하면 새로운 테이블에 데이터를 복사할 수 있습니다.
create table tb_user2
select *
from tb_user tu;
다만 제약조건등 테이블 고유의 특성까지는 복사되지 않습니다.
칼럼 별로 그룹 지어 표현하려면 group by 절을 사용합니다.
select userName, sum(userAge)
from tb_user tu
group by userName ;
예제에서 사용된 sum()함수는 합계를 표시하는 함수로 집계와 관련해서는 다음과 같은 함수를 사용할 수 있습니다.
agv() | 평균 |
min() | 최소값 |
max() | 최대값 |
count() | 갯수 |
count(distinct) | 중복을 제거한 갯수 |
stdev() | 표준편차 |
count()함수는 *을 사용해 전체 컬럼을 지정할 수 있고 count(userName)처럼 컬럼을 지정해 줄 수도 있습니다. 만약 특정 컬럽이 지정된 경우라면 해당 컬럼에서 null값은 제외됩니다.
만약 위 예제에서 sum(userAge)의 값이 25이상인 데이터만 보고 싶다면 having 절을 사용할 수 있습니다.
select userName, sum(userAge)
from tb_user tu
group by userName
having sum(userAge) >= 25;
having은 집계함수의 조건절에 해당합니다. 또한 중간합계가 필요하다면 rollup을 사용합니다.
select userName, userNumber, sum(userAge)
from tb_user tu
group by userName, userNumber
with rollup;
rollup은 group by 절을 기준으로 각 컬럼의 중간합계를 표시합니다.
'Server > MariaDB' 카테고리의 다른 글
[MariaDB] insert (0) | 2021.06.07 |
---|---|
DML, DDL, DCL (0) | 2021.06.07 |
[MariaDB] 실행 쿼리 모니터링 (0) | 2021.05.17 |
[MariaDB] Show (0) | 2021.04.30 |
[MariaDB] Data 파일 위치 변경 (0) | 2021.03.30 |