흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)

(MySQL) 기초 문법(Read, 연산자) 본문

MySQL

(MySQL) 기초 문법(Read, 연산자)

흰둥아솜사탕 2023. 3. 16. 10:18
728x90
반응형

SQL 연산자

  • 산술 연산자
    • +, -, *, /, mod(나머지 연산), div(몫)
  • 비교 연산자
    • =(같다, 조건절), <, >, >=, <=, <>(다르다)
  • 대입 연산자
    • =
  • 논리 연산자
    • and, or, not, xor
  • 기타 연산자
    • is: 양쪽이 모두 같으면 true 아니면 false
    • between A and B: 값이 A보다는 크거나 같고, B보다는 작거나 같으면 true 아니면 false
    • in: 매개변수로 전달된 리스트에 값이 존재하면 true 아니면 false
    • like: 패턴으로 문자열을 검색해여 값이 존재하면 true 아니면 false

모든 컬럼 가져오기(추천하지 않음)

select * from member;

데이터 검색

# select 필드면1, 필드명2 ... from 테이블명;  
select 100;  
select 100 + 50;

select userid, username, gender from member;

별명

# select 필드명 as 별명 from 테이블명;  
select 100 + 50 as '덧셈'; -- ''를 사용하는 이유는 띄어쓰기가 있을 수 있어서 사용  
select 100 + 50 as '덧셈 연산';  
select 100 + 50 as 덧셈;  
select 100 + 50 덧셈;

select userid as 아이디, username as 이름, hp as 휴대번호 from member;  

컬럼 명이 바뀐 것을 확인 할 수 있다.

null과 ''

select null; # 데이터가 없음, insert가 되지 않은 것  
select ''; # 해당 셀에 '' 데이터가 삽입된 것

두개의 결과값이 다르다

select 100 + null; # 결과: null, 연산할 수 없음  
select 100 + ''; # 결과: 100, 연산할 수 있음

null은 연산 불가능, ''은 연산 가능

조건절

# select 필드명1, 필드명 ... from 테이블명 where 조건절  
select userid, username, hp, email from member where userid='apple';  
select userid, username from member where gender='남자';  
select userid, username, point from member where point >= 300;  

조건에 맞는 데이터만 불러온다.

로그인

select userid, username, hp, email from member where userid='apple' and userpw='apple1';  
select userid, username, hp, email from member where userid='apple' and userpw='apple2';  

and를 이용할 시 두가지 조건이 다 맞는 경우의 데이터만 추출한다.

is

- 옳바르지 않은 코드

select userid, username, hp from member where address1 = 'null'; -- X  
select userid, username, hp from member where address1 = null; -- X

- 올바른 코드

select userid, username, hp from member where address1 is null; -- O  
select userid, username, hp from member where address1 is not null;

null값을 조건으로 두고 싶으면 비교연산자가 아닌 is를 이용해야 한다.

between

# 설명을 위해 member 테이블 안 값을 수정 하였다.
update member set point=300 where userid='grapes';  
select * from member;
select userid, username, point from member where point between 300 and 600;  
select userid, username, point from member where point >= 300 and point <= 600;

300과 600 사이에 있는 값을 찾는 코드로 2가지 쿼리문 결과가 똑같다.

in

select * from member;
# 포인트가 300, 450인 회원을 모두 출력
select * from member where point in (300, 450);

 

like 연산자

select userid, username from member where userid like 'a%'; -- a로 시작하는 문자열  
select userid, username from member where userid like '%a'; -- a로 끝나는 문자열  
select userid, username from member where userid like '%a%'; -- a가 들어가는 문자열  
select userid, username from member where userid like '%app%'; -- app가 들어가는 문자열  
select userid, username from member where userid like 'app\_\_'; -- app으로 시작하는 5글자 문자열  

정렬

# select 필드명1, 필드명2 ... from 테이블명 order by 정렬할 필드명 \[asc, desc\]  
select userid, username, point from member order by userid asc; # 아이디로 오름차순  
select userid, username, point from member order by userid desc; # 아이디로 내림차순  
select userid, username, point from member order by userid; # 아이디로 오름차순  
# 포인트를 기준으로 내림차순하고 같은 포인트인 경우 아이디로 내림차순  
select userid, username, point from member order by point desc, userid desc;  

조건절 + 정렬

# select 필드명1, 필드명2 ... from 테이블명 where 조건절 order by 정렬할 필드명 \[asc, desc\];  
# 성별이 여성인 회원을 point가 많은순으로 정렬(단, 포인트가 같을 경우 먼저 가입한 순으로 정렬)  
select userid, username, gender, point, regdate from member where gender = '여자' order by point desc, regdate asc;  

limit

# select 필드명1, 필드명2 .. from 테이블명 limit 가져올 행의 갯수  
# select 필드명1, 필드명2 .. from 테이블명 limit 시작행, 가져올 행의 갯수  
select userid, username, gender from member limit 3;  
select userid, username, gender from member limit 3, 2; # 인덱스 3행부터 2개의 행을 가져옴

정렬 + limit

# select 필드명1, 필드명2 .. from 테이블명 order by 정렬할 필드명 \[asc, desc\] limit 가져올 행  
select userid, username, point from member order by point desc limit 3;

집계함수

  • count: 행의 갯수를 세는 함수
# 전체인원을 알고싶다!: primary key가 적용되어 null이 포함될 수 없음
select count(userid) as 전체인원 from member; # 5
# 주소를 입력한 인원을 알고싶다!: null이 있으면 주소를 입력하지 않았음
select count(address1) as 우편번호 from member; # 1, null을 제외하고 갯수를 셈

  • sum: 행의 값을 더함
select sum(point) as 포인트합 from member;
select userid, sum(point) as 포인트합 from member; # Error Code: 1140. In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'kdt.member.userid'; this is incompatible with sql_mode=only_full_group_by

  • avg: 행 값의 평균을 구함
select avg(point) as 평균 from member;

  • min: 행의 최소값을 구함
select min(point) as 최소값 from member;

  • max: 행의 최대값을 구함
select max(point) as 최대값 from member;

그룹

  • select 그룹을 맺은 컬럼 또는 집계함수 from 테이블명 group by 그룹을 맺을 필드명
select gender from member group by gender;  
select gender, sum(point) as 합계 from member group by gender;  
select gender, avg(point) as 평균 from member group by gender;  
select gender, count(userid) as 인원수 from member group by gender;

그룹 + 그룹조건

# select 그룹을 맺은 컬럼 또는 집계함수 from 테이블명 group by 그룹을 맺을 필드명 having 조건절;  
select gender from member group by gender having gender = '여자';  

조건절 + 그룹 + 그룹조건 + 정렬

  • select 그룹을 맺은 컬럼 또는 집계함수 from 테이블명 where 조건절 group by 그룹을 맺을 필드명 having 조건절 order by 정렬할 필드명 [asc, desc]
# 작업을 위해 memeber에 새로운 데이터를 추가
insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2, zipcode)  
	values ('berry', 'berry6', '배애리', '01097979797', 'berry@gmail.com', '여자', '000920', '3084258', '66666');
# 포인트가 0이 아닌 회원들 중에서 남,여로 그룹을 나눠 포인트의 평균을 구하고 평균 포인트가 100 이상인 성별을 검색하여 포인트로 내림차순 정렬  
select gender, avg(point) as 평균 from member where point <> 0 group by gender having 평균 >= 100 order by gender desc;

728x90
반응형

'MySQL' 카테고리의 다른 글

(MySQL) 기초 문법(auto_increment)  (0) 2023.03.20
(MySQL) 정규화  (0) 2023.03.20
(MySQL) 기초 문법(외래키, 조인)  (1) 2023.03.20
(MySQL) 기초 문법(database, Create, Update, Delete)  (0) 2023.03.16
(MySQL) MySQL설치 및 기초  (0) 2023.03.15
Comments