update는 데이터를 수정할 때 사용된다.
데이터 수정하기(전체 변경)
update 테이블명 set 필드명1=값1, 필드명2=값2.....;
데이터 수정하기(특정 데이터 변경)
update 테이블명 set 필드명1=값1, 필드명2=값2
where eng = 'apple';
보통 테이블 전체 값을 변경하는 일은 거의 없어 아래 문법을 많이 쓴다.
🖥️ 예제
update word set lev = 2 where eng = 'orange';
만약 전체적으로 데이터값을 수정하고 싶을 경우 safe 모드를 해제해야하는데
mysql에서 해제하는 방법은 2가지가 있다.
workbench Preferences에서 SQL Editor -> Safe Updates 체크 해제(workbench 재시작)
set sql_safe_updates=0;
2번 방법은 일시적인 해제
set sql_safe_updates=0;
update word set lev = 2;
delete는 데이터를 삭제할 때 사용된다.
delete from 테이블명; (전체삭제)
delete from 테이블명 where 조건절;(특정 데이터 삭제)
🖥️ 예제
delete from word where eng = 'orange';
산술
연산자: +, -, *, /, mod(나머지 연산자), div(몫)비교
연산자: =(같다), <, >, <=, >=, <>(다르다)대입
연산자: =논리
연산자: and, or, not, xor기타
연산자select는 데이터를 검색할 때 사용된다.
select 필드명,... from 테이블명;
🖥️예제
select * from member;
select userid, name from member;
'*' 은 테이블에 있는 모든 컬럼을 가지고올 때 사용한다. 하지만 과부하가 걸릴 수 있이 때문에 권장하지 않는다.
select null; -- 데이터가 없음, insert가 되지 않은 것
select ''; -- 해당 셀에 ''데이터가 삽입된 것
select null + 100; -- sql에서는 null과 연산을 할 수 없어 결과값이 null로 나온다
select 100 + ''; -- ''는 연산이 가능하여 결과값이 100이 나온다
데이터 검색하기
select 필드명,... from 테이블명 where 조건절;
🖥️예제
select * from member where gender = '남자';
select * from member where zipcode = 'null'; -- x
select * from member where zipcode = null; -- x
select * from member where zipcode is null;
select * from member where zipcode is not null;
null값을 찾아야할 때 '='이 아닌 'is'를 사용해야한다
값이 A보다는 크거나 같고, B보다는 작거나 같으면 true, 아니면 false
🖥️예제
-- 300이상 500이하
select * from member where point between 300 and 500;
between을 사용하지 않을 경우에는 아래 쿼리처럼 사용할 수 있다.
select * from member where point >= 300 and point <= 500;
매개변수로 전달된 리스트에 값이 존재하면 true 아니면 flase
🖥️예제
select * from member where name in ('사과','메론', '오렌지');
테이블에 없는 값을 넣으면 해당 값은 제외하고 출력된다. (오류 발생X)
패턴으로 문자열을 검색하여 값이 존재하면 true 아니면 false
🖥️예제
select * from member where userid like 'a%'; -- a로 시작하는 문자열
select * from member where userid like '%a'; -- a로 끝나는 문자열
select * from member where userid like '%a%'; -- a를 포함하는 문자열
select * from member where userid like 'ap%'; -- ap로 시작하는 문자열
select 필드명1, 필드명2.... from 테이블명
[where 조건절] order by 정렬할 필드명 [asc, desc] [] <- 선택사항
[asc, desc] 생략 가능하며 입력하지 않으면 오름차순으로 자동 정렬된다.
🖥️예제
select * from member order by userid asc; -- 오름차순
select * from member order by userid; -- 오름차순은 생략 가능
select * from member order by userid desc; -- 내림차순
포인트 순으로 오름차순을 하고 만약 포인트가 같다면 userid로 내림차순
select * from member order by point asc, userid desc;
남자인 회원중에서 id를 내림차순으로 정렬
select * from member where gender = '남자' order by userid desc;
select 문장에서 limit 키워드를 사용하면 데이터 조회 시 데이터 한계를 지정
limit은 MySQL에만 있는 키워드로 다른 DBMS에서는 사용이 불가능하다.
select 필드명1, 필드명2... from 테이블명 limit 가져올 로우의 갯수;
select 필드명1, 필드명2... from 테이블명 limit 시작로우(인덱스), 가져올 로우의 갯수;
select 필드명1, 필드명2... from 테이블명 [where 조건문] order by 정렬할 필드명 [asc, desc] limit 가져올 로우의 갯수;
🖥️예제
select * from member limit 3; -- 3개만 가지고옴
select * from member limit 2, 2; -- 3번째부터 2개만 가지고옴
select * from member order by point desc limit 3;
select count(userid) as 전체인원 from member;
select sum(point) as 포인트합 from member;
select userid, sum(point) as 포인트합 from member; -- select 절에 일반 컬럼을 쓰지 못함
group by를 쓰지 않으면 select절에 일반 컬럼을 사용하지 못한다.
select avg(point) as 평균 from member;
select avg(point) as '여성평균' from member where gender = '여자';
select min(point) as 최소값 from member;
select max(point) as 최대값 from member;
select 그룹을 맺을 컬럼 또는 집계함수 from 테이블명 group by 그룹을 맺을 필드명;
select 그룹을 맺을 컬럼 또는 집계함수 from 테이블명 group by 그룹을 맺을 필드명 having 조건절;
🖥️예제
select gender from member group by gender;
select gender, sum(point) as '포인트합계' from member group by gender;
그룹 후 특정 값을 출력하고 싶을 경우 having을 사용하면 된다.
select gender from member group by gender having gender = '여자';
select gender, avg(point) as avg from member where point > 0
group by gender having avg >= 150 order by avg desc;