[DataBase] MySQL 기본 쿼리문

GonnabeAlright·2021년 11월 27일
0
post-thumbnail

조인 관계를 이해하고 아래의 쿼리문을 작성하면서 결과값을 확인한다면 관계형 데이터베이스에서 테이블 간의 관계를 이해하여 원하는 출력값을 데이터베이스로부터 가져올 수 있습니다 ! 가장 먼저 데이터베이스를 생성하고 USE 데이터베이스명; 쿼리를 실행하시고 작성하세요.

데이터베이스

  • 데이터베이스 확인
SHOW DATABASES(데이터베이스명);
  • 테이블 확인
SHOW TABLES(테이블명);
  • 데이터베이스 사용
USE 데이터베이스명;
  • 데이터베이스 삭제
DROP DATABASE 데이터베이스명;

테이블

  • 테이블 구조 확인
DESC 테이블명;
  • 테이블 삭제
DROP TABLE 테이블명;
  • 테이블 필드 추가
ALTER TABLE 테이블명 ADD 컬럼명 컬럼타입 제약조건;
  • 테이블 필드 수정
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 컬럼타입 제약조건;
  • 테이블 필드 삭제
ALTER TABLE 테이블명 DROP 컬럼명;

데이터

  • 데이터 삽입
INSERT INTO 테이블명 VALUES (1,2,3, ...);
INSERT INTO 테이블명 (필드명1, 필드명2) VALUES (1,2,3, ...);
  • 데이터 수정
UPDATE 테이블명 SET 필드명1 =1, 필드명2 =2, ...
UPDATE 테이블명 SET 필드명1 =1, 필드명2 =2, ...  WHERE 조건절;
  • 데이터 삭제
DELETE FROM 테이블명 WHERE 조건절;

테이블 생성

CREATE TABLE tb_member (
    mem_idx bigint auto_increment primary key,
    mem_userid varchar(20) unique not null,
    mem_userpw varchar(20) not null,
    mem_name varchar(20) not null,
    mem_hp varchar(20) not null,
    mem_email varchar(50) not null,
    mem_hobby varchar(100),
    mem_ssn1 char(6) not null,
    mem_ssn2 char(7) not null,
    mem_zipcode char(5),
    mem_address1 varchar(100),
    mem_address2 varchar(100),
    mem_address3 varchar(100),
    mem_regdate datetime default now()
);

CREATE TABLE tb_profile (
    pro_useridx bigint,
    pro_age int,
    pro_gender enum('남자', '여자')
    pro_height double,
    pro_weight double,
    forign key(pro_useridx) references tb_member(mem_idx)
);

SQL 연산자

1. 산술연산자

산술연산자설명
+더하기
-빼기
*곱하기
/나누기
div왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 소수부분을 버림
mod나머지 연산

2. 대입연산자

대입연산자설명
=같다

3. 비교연산자

비교연산자설명
=같다
<>같지 않다
>크다
<작다
>=크거나 같다
<=작거나 같다
IS=
IS NOT<>
BETWEEN A AND BA와 B사이
IN()포함

4. 논리연산자 (AND, OR, XOR, NOT)

예시 쿼리문)


// mem_point 필드가 300 이상이거나 700이하인 경우
SELECT * FROM tb_member WHERE mem_point >= 300 AND mem_point <= 700;
// mem_point 필드가 300 이상이거나 700이하인 경우
SELECT * FROM tb_member WHERE mem_point BETWEEN 300 AND 700;

// vacation 필드가 NULL인 경우
SELECT * FROM employee WHERE vacation_cnt IS NULL;
// vacation 필드가 NULL이 아닌 경우
SELECT * FROM employee WHERE vacation_cnt IS NOT NULL;
// 아래 두 쿼리문의 결과는 동일하다.
// 하지만 위보다 아래의 쿼리문이 더 간결하다.
SELECT department, employee_id FROM employee WHERE department = 'IT' OR department = 'SERVICE' OR department = 'ACCOUNT' OR department = 'MANAGEMENT';

SELECT department, employee_id FROM employee WHERE department IN('IT', 'SERVICE', 'ACCOUNT', 'MANAGEMENT');

검색(SELECT)

1. SELECT 필드명1, 필드명2, ... FROM 테이블명;

SELECT * FROM tb_member JOIN tb_profile ON tb_member.mem_idx = db_profile.pro_useridx;
SELECT mem_idx, mem_userid, mem_name FROM tb_member;

2. SELECT 필드명1, 필드명2, ... FROM 테이블명 WHERE 조건절;

SELECT mem_idx, mem_userid, mem_name FROM tb_member WHERE mem_idx = 2;
SELECT mem_idx FROM tb_member WHERE mem_userid = 'apple' AND mem_userpw = '1111';

3. SELECT 필드명1, 필드명2, ... FROM 테이블명 ORDER BY 정렬할 필드(ASC, DESC)

SELECT * FROM tb_member ORDER BY mem_idx ASC;
			--> 오름차순 ASC 생략 가능 (default)
SELECT * FROM tb_member ORDER BY mem_idx DESC;

4. SELECT 그룹을 맺은 필드 또는 집계함수 FROM 테이블명 GROUP BY 필드;

SELECT mem_gender, COUNT(mem_idx) FROM tb_member GROUP BY mem_gender;

집계함수

집계함수설명
count()데이터의 개수
sum()합계
max()최대값
min()최솟값
avg()평균

별명을 주는 방법 - 필드 as 별명

SELECT mem_gender, COUNT(mem_idx) as '별명' FROM tb_member GROUP BY mem_gender;

테이블 병합(JOIN)

데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과집합으로 표현

SELECT * FROM tb_member JOIN tb_profile;

(INNER: 교집합)

SELECT mem_idx, mem_userid, mem_name, pro_gender, pro_height, pro_weight FROM tb_member INNER JOIN tb_profile ON tb_member.mem_idx = tb_profile.pro_useridx;

(LEFT: 첫 테이블 중심)

SELECT mem_idx, mem_userid, mem_name, pro_gender, pro_height, pro_weight FROM tb_member LEFT JOIN tb_profile ON tb_member.mem_idx = tb_profile.pro_useridx;

(RIGHT: 두번째 테이블 중심)

SELECT mem_idx, mem_userid, mem_name, pro_gender, pro_height, pro_weight FROM tb_member RIGHT JOIN tb_profile ON tb_member.mem_idx = tb_profile.pro_userid;

like 검색

w_kor이 '사'로 포함되는 말

SELECT w_eng, w_kor, w_lev, w_date FROM tb_word WHERE w_kor LIKE '%사%';

w_kor이 사로 시작하는 말

SELECT w_eng, w_kor, w_lev, w_date FROM tb_word WHERE w_kor LIKE '사%';

w_kor이 사로 끝나는 말

SELECT w_eng, w_kor, w_lev, w_date FROM tb_word WHERE w_kor LIEK '%;

참조되는 테이블 간의 관계 이해하기 (ORACLE)

create table tb_member (
    mem_idx number(7) unique not null,
    mem_userid varchar2(20) unique not null,
    mem_userpw varchar2(20) not null,
    mem_name varchar2(20) not null,
    mem_gender varchar2(10),
    mem_email varchar2(50) unique,
    mem_hp varchar2(20),
    mem_zipcode char(5),
    mem_address1 varchar2(100),
    mem_address2 varchar2(100),
    mem_address3 varcahr2(100),
    mem_regdate date default sysdate,
    constraint pk_userid primary key(mem_idx, mem_userid),
    constraint ck_gender check(mem_gender in('남자', '여자'))
);

constraint 제약조건명1 primary key(필드명1, 필드명2),
constraint 제약조건명2 check(필드명1 in ('남자', '여자'))

create table tb_order (
    ord_no varchar2(10),
    ord_userid varchar2(20),
    ord_product varchar2(50) not null,
    ord_count number(5),
    ord_price number(7),
    ord_regdate date default sysdate,
    constraint pk_no primary key(ord_userid),
    constraint fk_userid foreign key(ord_userid) references tb_member(mem_userid)
);

constraint 제약조건명 foreign key(ord_userid) references to tb_member(mem_userid)

ord_usexrid --------------------------> mem_userid
ord_userid 필드는 tb_member 테이블의 mem_userid 필드를 참조한다.

create table tb_point (
    po_idx number(7) unique not null,
    po_userid varchar2(20) not null,
    po_memo varchar2(10) not null,
    po_point number(7) default 0,
    po_ordno varchar2(10) unique not null,
    po_regdate date default sysdate,
    constraint fk_point_userid foreign key(po_userid) references tb_member(mem_userid),
    constraint fk_point_ordno foreign key(po_ordno) references tb_order(ord_no)
);

constraint 제약조건명 foreign key(po_userid) references tb_member(mem_userid)

po_userid --------------------------> mem_userid
po_userid 필드는 tb_member 테이블의 mem_userid 필드를 참조한다.

constraint 제약조건명 foreign key(po_ordno) references tb_order(ord_no)

po_ordno --------------------------> ord_no
po_ordno 필드는 tb_order 테이블의 ord_no 필드를 참조한다.

상단 테이블 구조를 ERD로 표현하자면 아래 그림과 같다.

0개의 댓글