본문 바로가기
Database/mysql

[MYSQL/Database] select 문,orderby 연산자- 비교,논리,범위

by JINJINC 2023. 4. 17.
728x90
반응형

Select  연산자 

 

 비교 연산자

=      같음  
!=     같지 않음  
<>    같지 않음 (ISO 표준)
>      초과(크다)  
>=    이상(같거나 크다)  
<      미만(작다)  
<=    이하(같거나 작다)

 

 논리 연산자

AND 앞에 있는 조건과 뒤에 있는 조건이 모두 참 값
OR 앞에 있는 조건이나 뒤에 있는 조건 중 하나라도 참 값
NOT 뒤에 있는 조건의 결과를 반대로 변경 (참 값일 경우, 거짓 값으로 변경)

 

 범위 연산자

A BETWEEN B AND A와 B 사이의 값 ( A와 B를 모두 포함, A <= Value <= B )

 

 집합  연산자

IN (A, B, C …) 범위 내의 값을 하나라도 만족 ( A OR B OR C … )
NOT IN (A, B, C …) 범위 내의 값을 하나라도 만족X

 

 속성  연산자

IS NULL NULL 값을 갖는 데이터
IS NOT NULL NULL 값을 갖지 않는 데이터

 속성확인  연산자

LIKE ‘패턴 문자열’ 패턴 문자열을 만족하는 값
_ 한 글자
% 모든 문자

 

 값의 존재 여부 확인 연산자

EXIST 서브쿼리의 값이 있을 경우 반환함
NOT EXIST 서브쿼리의 값이 없는 경우 반환함

<연습1>

sqlDB.sql
0.00MB

1) 조건이 문자열인 경우
select *  from usertbl  where name = '김경호'; 

2) 조건이 상수인 경우
select *  from usertbl where birthyear= 1987; 

3) 조건 두개를 모두 만족하는 데이터를 출력할 때 and
select userid, name from usertbl where birthyear >= 1970 and height >= 182;

4) 조건 두개 중에 하나라도 만족하는 데이터를 출력할 때 or
select userid, name from usertbl where birthyear >= 1970 or height >= 182;

5) between 사용
select userid, name from usertbl where height between 180 and 183;

6) 여러개를 만족하는 데이터 출력 in
select userid, name, addr from usertbl where addr in('경남','전남', '경북','전북');

7) 제외하고 출력 not in
select userid, name, addr from usertbl where addr not in('경남');

8) 포함하는(포함하지 않는) 문자 출력 like
-- like와 %구문은 통상 검색할 때 이런 형태로 많이 쓰인다.
-- 한 글자에 대한 것은 _(언더바)로써 대체하여 검색한다.
select userid, name, addr from usertbl where name like('김%');
select userid, name, addr from usertbl where name not like('김%');
select userid, name, addr from usertbl where name like '_종신';

9) null인 경우 is null이며,  null이 아닌 경우는 is not null
select userid, name, addr from usertbl where name is null;
select userid, name, addr from usertbl where name is not null;

 

 ORDER BY 절

정렬

1) 오름차순 정렬 asc
select * from usertbl order by mdate (asc);

2) 내림차순 desc
select * from usertbl order by mdate desc;

3) 여러개 컬럼 정렬
select * from usertbl order by height desc,name asc;

 

 집계 함수와 Group by, having절 

. MySQL  : from -> where -> select -> group by -> having -> order by 
. Oracle : from -> where -> group by -> having -> select -> order by

 

 집계함수

. sum()은 합계를 구한다.
. avg()은 평균을 구한다.
. min()은 최소값을 구한다
. max()은 최대값을 구한다.
. count()은 행의 개수를 구한다.
. count(distinct 칼럼이름)은 행의 유일한 개수를 구한다.

 

<연습2>

 userid별로 구매한 건수를 userid오름차순으로 출력하라?

 

select userid as '사용자 아이디', sum(amount) as '구매한 건수'
from buytbl
group by userid
order by userid;

연습2 결과

<연습3> 사용자 아이디 별 평균 구매 건수를 내림 차순으로 출력하라

select  userid as '사용자아이디', avg(amount) as '평균 구매 건수' 
	from buytbl
   	group by userid
   	order by avg(amount) desc;

연습3. 실행결과

HAVING절 

where절과 비슷하지만 집계함수에 대하여 조건을 제한하는 경우 having 절을 사용합니다. 

 

 

<연습 4>총 구매액이 1000만원 초과인 사람의  사용자 아이디와 총 구매액을 사용자 아이디 별로 구하는데 총 구매액 내림차순으로 출력하라

select userid as '사용자 아이디', sum(price*amount) as '총 구매액'
	from buytbl 
	group by userid
	having sum(price*amount) >= 1000
	order by sum(price*amount) desc;

연습4. 실행 결과

 

Error Code: 1111. Invalid use of group function 0.000 sec 

Error Code: 1111. Invalid use of group function 0.000 sec

집계함수는 where절과 같이 사용하는 것이 불가능함 

 

WITH ROLLUP 절 

분류 별로 합계 및 그 총합을 구하고 싶을 때 사용함

 

<연습 5> groupname별로 소합계를 내어주는 with rollup 사용하기

select groupname, sum(price*amount) as '총 구매액'
	from buytbl
    group by groupname
    with rollup;

728x90
반응형

댓글