먼저 voca라는 테이블을 먼저 만들어 준다.
-- 테이블 생성
create table voca (
eng varchar(50) primary key,
kor varchar(50) not null,
lev int default 1,
regdate datetime default now()
);
DML (Date Manipulation Language, 데이터 조작어)
1. select : 데이터를 조회(검색)
-- 테이블 전체 데이터를 조회 (서버에 부하를 주기때문에 좋지 않은 방법)
select * from 테이블명;
-- 특정 컬럼의 데이터만 조회
select 컬럼명 from 테이블명;
-- 여러 컬럼 데이터 조회
select 컬럼명1, 컬럼명2, ... from 테이블명;
2. insert : 데이터를 테이블에 삽입
-- 컬럼명 생략
-- insert into 테이블명 values (값1, 값2, ...);
insert into voca values ('apple', '사과', 1, now());
-- 값 대신 null입력 가능
insert into voca values ('orange', '오렌지', null, null);
-- 컬럼명 지정
-- insert int 테이블명(컬럼1, 컬럼2, ...) values (값1, 값2, ...);
insert into voca (eng, kor) values('banana', '바나나');
insert into voca (eng, kor)values ('melon', '메론');
insert into voca (eng, kor, lev)values ('avocado', '아보카도', 2);
3. update : 데이터를 수정
-- update 테이블명 set 바꾸고자 하는 데이터;
update voca set lev=1;
-- update 테이블명 set 데이터값 where 조건
update voca set lev=2 where eng='melon';



4. delete : 데이터를 삭제
-- delete from 테이블명;
delete from voca;
-- delete from 테이블명 where 조건;
delete from voca where eng = 'banana'


DML 연산자
- 산술 연산자 : +, -, *, /, mod (나눈 나머지 값), div (몫)
- 비교 연산자 : =, <, >, <=, >=, <> (같지않다)
- 대입 연산자 : =
- 논리 연산자 : and, or, not, xor
- is : 양쪽의 피연산자가 모두 같으면 True, 아니면 False
- between A and B : A 보다는 크거나 같고, B 보다는 작거나 같으면 True, 아니면 False
- in : 매개변수로 전달된 리스트에 값이 존재하면 True, 아니면 False
- like : 패턴으로 문자열을 검색하여 값이 존재하면 True, 아니면 False
-- 포인트가 150이상인 멤버의 아이디, 이름, 포인트를 검색
select userid, name, point from member where point >= 150;
-- 포인트가 150이상이고, 200이하인 멤버의 아이디, 이름, 포인트, 성별을 검색
select userid, name, point, gender from member where point >= 150 and point <= 200;
select userid, name, point, gender from member where point between 150 and 200;
-- 로그인
select userid from member where userid='apple' and userpw='1111'; -- select가 된다면 로그인 성공
select userid from member where userid='apple' and userpw='1112'; -- select가 안된다면 로그인 불가
-- 이름이 김사과, 반하나, 오렌지인 사람의 모든 정보를 검색
select * from member where name='김사과' or name='반하나' or name='오렌지';
select * from member where name in ('김사과', '반하나', '오렌지');
-- regdate가 null인 멤버 검색
select * from member where regdate = null; -- select되지않음
select * from member where regdate is null; -- null값을 가진 멤버를 검색할 때는 is 연산자 사용
select * from member where regdate is not null;
-- 아이디가 a로 시작하는 멤버의 정보를 검색
select * from member where userid like 'a%';
-- 아이디가 a로 끝나는 멤버의 정보를 검색
select * from member where userid like '%a';
-- 아이디가 a를 포함하는 멤버의 정보를 검색
select * from member where userid like '%a%';
-- 이메일이 '.com'으로 끝나는 멤버의 정보를 검색
select * from member where email like '%.com';
-- 이름이 3자인 멤버를 검색 (_3개 입력)
select * from member where name like '___';
-- 이름이 첫 글자가 '김'씨이며 3자인 멤버를 검색
select * from member where name like '김__';
select * from member order by idx; -- 오름차순 asc 생략
select * from member order by idx desc; -- 내림차순
-- 멤버를 포인트 순으로 정렬
select * from member order by point desc;
-- 멤버를 포인트 순으로 정렬. 단 포인트가 같으면 가입 최신순으로 정렬
select * from member order by point desc, regdate desc;
-- limit: 일부 로우(레코드)를 검색
-- limit 검색할 로우의 개수, limit 시작로우(인덱스) 가져올 로우의 개수
select * from member limit 2;
select * from member limit 2, 2;
-- 멤버에서 포인트순으로 내림차순 정렬하고 포인트가 같다면 가입순으로 내림차순 한 뒤 top 3를 검색
select * from member order by point desc, regdate limit 3;
group
select 그룹을 맺을 컬럼 또는 집계함수 from 테이블 group by 그룹을 맺을 컬럼
select 그룹을 맺을 컬럼 또는 집계함수 from 테이블 group by 그룹을 맺을 컬럼 having 그룹에 대한 조건
select gender from member group by gender;
select gender, count(idx) as 인원수 from member group by gender;
select gender, count(idx) as 인원수 from member group by gender having gender='여자';
select gender, count(idx) as 인원수 from member where gender='여자' group by gender;
-- 성별로 그룹을 맺고, 그 인원수가 3명 이상인 성별을 검색
select gender, count(idx) as 인원수 from member group by gender having count(idx) >= 3;
select gender, count(idx) as 인원수 from member group by gender having 인원수 >= 3;
/*
멤버 중 포인트가 50이상인 멤버중에서 성별로 그룹을 나눈 뒤,
각 그룹의 포인트 평균을 구하고 평균의 포인트가 100이상인 성별만 출력
(단, 성별이 남자, 여자 모두 출력된다면 포인트가 높은 성별을 우선으로 출력)
*/
select gender, avg(point) as 평균 from member where point >= 50 group by gender having 평균 >= 100 order by 평균 desc;
파이썬과 비슷한점도 많고 차이점도 많다. 문법이 파이썬에 비해 훨씬 직관적인 느낌이다.
'BACK-END' 카테고리의 다른 글
| [MySQL] 뷰 (view) (0) | 2026.06.09 |
|---|---|
| [MySQL] MySQL 함수 (0) | 2026.06.09 |
| [MySQL] 서브쿼리 (Sub Query) (1) | 2026.06.09 |
| [MySQL] 정규화 (0) | 2026.06.06 |
| [MySQL] DDL (0) | 2026.06.05 |