[DBMS] MySQL 기본 문법2

개린이·2023년 9월 19일
0

DBMS

목록 보기
3/5
post-thumbnail

update

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가지가 있다.

  1. workbench Preferences에서 SQL Editor -> Safe Updates 체크 해제(workbench 재시작)

  2. set sql_safe_updates=0;

    2번 방법은 일시적인 해제

set sql_safe_updates=0;
update word set lev = 2;

delete

delete는 데이터를 삭제할 때 사용된다.

delete from 테이블명; (전체삭제)
delete from 테이블명 where 조건절;(특정 데이터 삭제)

🖥️ 예제

delete from word where eng = 'orange';

SQL 연산자

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

select

select는 데이터를 검색할 때 사용된다.

모든 데이터 검색

select 필드명,... from 테이블명;

🖥️예제

select * from member;
select userid, name from member;

'*' 은 테이블에 있는 모든 컬럼을 가지고올 때 사용한다. 하지만 과부하가 걸릴 수 있이 때문에 권장하지 않는다.

null과 ''

select null; -- 데이터가 없음, insert가 되지 않은 것
select ''; -- 해당 셀에 ''데이터가 삽입된 것
select null + 100; -- sql에서는 null과 연산을 할 수 없어 결과값이 null로 나온다
select 100 + ''; -- ''는 연산이 가능하여 결과값이 100이 나온다

특정 데이터 검색

데이터 검색하기
select 필드명,... from 테이블명 where 조건절;

🖥️예제

select * from member where gender = '남자';

null값을 찾을 때

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'를 사용해야한다

between

값이 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;

in

매개변수로 전달된 리스트에 값이 존재하면 true 아니면 flase

🖥️예제

select * from member where name in ('사과','메론', '오렌지');

테이블에 없는 값을 넣으면 해당 값은 제외하고 출력된다. (오류 발생X)

like

패턴으로 문자열을 검색하여 값이 존재하면 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로 시작하는 문자열

order by

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;

limit

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;


집계함수

count

  • 행의 갯수를 세는 함수
  • null을 포함하지 않음
  • primary key를 선택하는 것을 추천
select count(userid) as 전체인원 from member; 

sum

  • 행의 값을 더함
select sum(point) as 포인트합 from member;
select userid, sum(point) as 포인트합 from member; -- select 절에 일반 컬럼을 쓰지 못함

group by를 쓰지 않으면 select절에 일반 컬럼을 사용하지 못한다.

avg

  • 행의 평균을 구함
select avg(point) as 평균 from member;
select avg(point) as '여성평균' from member where gender = '여자';

min

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

max

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


group by

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을 사용하면 된다.

having

select gender from member group by gender having gender = '여자';

🖥️ select문 심화 예제

  • 포인트가 0을 초과하는 회원들 중에서 남자, 여자로 그룹을 나눠 포인트의 평균을 구하고
  • 평균 포인트가 150이상인 성별에 대해 출력해보자
  • 단 포인트가 많은 성별을 우선으로 출력
select gender, avg(point) as avg from member where point > 0
group by gender having avg >= 150 order by avg desc;

0개의 댓글