Day2: MySQL 연산자 / 제약조건
1. 산술 연산자
- +
- -
- *
- /
- mod : 나머지 연산
- div : 몫을 구하는 연산
2. 비교 연산자
- = : 같다, 조건절
- >
- <
- >=
- <=
- <> : 다르다
3. 대입연산자
- =
# 대입 비교
# update member set point = 100 where gender ='F';
4. 논리 연산자
- and: 두 개 이상의 조건을 줄 때 사용. 특정한 조건들을 모두 만족하는 데이터 추출
- or: 합집합. 특정 테이블로부터 적어도 하나의 특정한 조건을 만족하는 데이터 추출
- not: 뒤에 있는 조건을 부정할 때 사용
- xor: 배타적 논리합
5. 기타 연산자
- is: 양쪽이 모두 같으면 true 또는 false
- between A and B: 값이 A보다는 크거나 같고, B보다는 작거나 같으면 true 아니면 false
- in: 매개변수로 전달된 리스트에 값이 존재하면 true 아니면 false
- like: 패턴으로 문자열을 검색하여 값이 존재하면 true 아니면 false
데이터 검색
# select 필드명1, 필드명2, ... from 테이블명;
use kdt; # day1에 만들어둔 데이터베이스 불러오기
# select를 이용해 데이터 검색
select userid, username, gender from member;
select username, userid, gender from member;
# 모든 컬럼 가져오기(실 서버에서는 사용을 추천하지 않음)
select * from member;
별명
# select 필드명 as 별명 from 테이블명;
select 100 + 50 as '덧셈'; -- ''를 사용하는 이유는 띄어쓰기가 있을 수 있어서 사용
# >> 덧셈 150
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 -> 연산할 수 있음
조건절
# select 필드명1,필드명2, ... from 테이블명 where 조건절
select userid, username, hp, email from member where userid='apple';
select userid, username from member where gender='M';
select userid, username, point from member where point >=300;
로그인 구현할 때
select userid, username, hp, email from member where userid='apple' and userpw='1111';
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;
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;
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, point, regdate from member where gender='F' order by point desc, regdate asc;
limit
# select 필드명1, 필드명2, ... from 테이블명 limit 가져올 행의 갯수
# select 필드명1, 필드명2, ... from 테이블명 limit 시작행, 가져올 행의 갯수
select * from member;
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(zipcode) 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 * from member;
select gender from member group by gender;
select gender, sum(point) from member group by gender;
select gender, avg(point) 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 = 'F';
select * from member;
insert into member(userid, userpw, username, hp, email, gender, ssn1, ssn2) values ('berry', 6666, '배애리', 000-6666-6666, 'berry@mail', 'F', 000000, 2000000 );
조건절+그룹+그룹조건+정렬
# select 그룹을 맺은 컬럼 또는 집계함수 from 테이블명 where 조건절 group by 그룹을 맺을 필드명 having 조건절 order by 정렬할 필드명 [asc, desc];
# 포인트가 0이 아닌 회원들 중에서 남,여로 그룹을 나눠 포인트의 평균을 구하고 평균 포인트가 100 이상인 성별을 검색하여 포인트로 내림차순 정렬
select gender, avg(point) as avg from member where point > 0 group by gender having avg >= 100 order by avg desc;