데이터베이스(DataBase)
테이블(Table)
스키마(Schema)
MySQL에서의 주석(Comment)
-- 한 줄 주석
# 한 줄 주석
데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터 전체의 골격을 결정하는 역할을 하는 언어입니다.
⭐️ 쿼리문 실행은 ctrl + enter MacOS는 command + return
데이터베이스 생성
create database 테이블명;
데이터베이스 삭제
drop database 테이블명;
데이터베이스 사용
use 테이블명;
테이블 생성
create table 테이블명(
컬럼명1 자료형 {제약조건},
컬럼명2 자료형 {제약조건},
...
);
테이블 삭제
drop table 테이블명;
테이블 구조 확인
desc 테이블명;
테이블 컬럼 추가
alter table 테이블명 add (컬럼명 자료형 {제약조건});
테이블 컬럼 수정
alter table 테이블명 modify column (컬럼명 자료형 {제약조건});
테이블 컬럼 삭제
alter table 테이블명 drop 컬럼명;
자료형
1. 숫자 타입
- 정수 : tinyint, smallint, mediumint, bigint, int
- 실수(소수) : float, double, decimal(n, m)
decimal(n,m) : 전체 n 자리 중에 소수점 아래로 m 자리
ex) decimal(4,2) -----> -99.99 ~ 99.992. 문자 타입
- 텍스트 : char, text, varchar
char(20) -> 총 20byte 크기로 공간을 할당 -> 더 작은 데이터를 넣어도 공간을 소모 -> 낭비가 심하다
varchar(20) -> 총 20byte의 가변형 크기를 할당 -> 더 작은 데이터를 넣으면 공간 축소 (~65535byte)- 바이너리 : binary, varbinary
- 열거 : enum(값1, 값2, ...) -> 정해놓은 값들을 제외하고는 데이터가 들어올 수 없는 타입
3. 날짜와 시간 타입
- 날짜 : date
- 날짜와 시간 : datetime, timestamp(1970년 1월 1일 0시 0분 0초 ~ )
제약조건
데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행하는 검사 규칙.
- not null - 비어있을 수 없음(NULL을 저장할 수 없음)
- unique - 고유한 값(중복된 값을 저장할 수 없음, NULL은 허용)
- default - 기본값을 설정
- primary key - 고유하면서 비어있을 수 없는 값을 설정, unique와 not null 제약조건을 동시에 가짐, 테이블에 오직 하나의 필드에만 적용
- auto_increment - 자동으로 숫자가 하나씩 증가되며 추가, 중복된 값이 저장되지 않음, pk 여야만 부여 가능
- foreign key - 다른 테이블과 연결해주는 역할
데이터들을 추가, 수정, 삭제, 조회하는 명령어들.
INSERT, UPDATE, DELETE, SELECT
데이터 추가(INSERT)
insert into 테이블명 {(컬럼1, 컬럼2, ...)} values(값1, 값2, ...);
데이터 수정(UPDATE)
update 테이블명 set 컬럼명 = 새로운값 where 조건절;
데이터 삭제(DELETE)
delete from 테이블명 where 조건절;
데이터 조회(SELECT)
select 컬럼1, 컬럼2, ... from 테이블명 where 조건절;
select로 간단하게 구조 확인하기
select * from car;
select * from tb_user;
관계연산자(>, <, =)
userpoint가 1000보다 큰 username 검색
select username from tb_user where userpoint > 1000;
userpoint가 1000보다 작은 username 검색
select username from tb_user where userpoint < 1000;
userpoint가 1000과 같은 username 검색
select username from tb_user where userpoint = 1000;
논리연산자(and, or, not)
userid가 apple 이고 userpw가 1111인 username 검색
select username from tb_user where userid='apple' and userpw='1111';
ㅤ
userid가 apple 이거나 userpw가 1111인 username 검색
select username from tb_user where userid='apple' or userpw='1111';
ㅤ
userid가 apple 이 아닌 username 검색
select username from tb_user where not userid='apple';
컬럼 between A and B : 컬럼의 값이 A 이상 B 이하
userpoint가 500 이상 1500이하인 userid, username, userpoint 검색
select userid, username, userpoint from tb_user where userpoint between 500 and 1500;
null의 값 비교는 is null, is not null 로 비교한다.
useremail이 null값인 username 검색
select username from tb_user where useremail is null;
컬럼 in (값1, 값2, ...) : 컬럼의 값이 값1, 값2, ... 에 있으면 참
userid의 id가 apple 또는 banana 또는 cherry인 username 검색
select username from tb_user where userid in ('apple', 'banana', 'cherry');
like('검색할 특정문자열') : 특정 문자가 포함되어 있는 데이터를 검색한다.
'%a%' : a 포함 데이터 검색
'%a' : a 로 끝나는 데이터 검색
'a%' : a 로 시작하는 데이터 검색
'_a' : a로 끝나는 두글자 데이터 검색
userid에 'a'가 들어가는 모든 userid, username 검색
select userid, username from tb_user where userid like('%a%');
order by 컬럼명 {정렬기준} : 컬럼을 기준으로 정렬 (정렬기준 생략 시 오름차순) - 정렬기준에 DESC를 작성 시 내림차순
userid 오름차순으로 정렬
select * from tb_user order by userid;
ㅤ
userid 내름차순으로 정렬
select * from tb_user order by userid desc;
그룹함수(집계함수) : 여러 행의 데이터들을 종합적으로 확인 후 결과를 도출하는 함수 - sum(), avg, max, min, count()
userpoint값의 합 조회
select sum(userpoint) from tb_user;
usergender가 '남자'인 userpoint값의 합 조회
select sum(userpoint) from tb_user where usergender='남자';
group by 컬럼1, 컬럼2, ... : 컬럼을 기준으로 그룹을 짓고 쿼리문 수행, 그룹함수가 적용될 파트를 나누는 문장.
usergender로 그룹을 나누고 usergender와 userpoint의 합을 조회
select usergender, sum(userpoint) from tb_user group by usergender;
having 조건절 : 그룹에 대한 조건절
usergender로 그룹을 나누고 그룹별 포인트 총 합을 구한 후 포인트 총 합이 2000보다 작거나 같은 그룹의 결과만 조회
select usergender, sum(userpoint) from tb_user group by usergender having sum(userpoint) <= 2000;
별칭(alias) : 컬럼명 별칭, 컬럼명 as 별칭 / from 테이블명 별칭
컬럼명 별칭
select userid 아이디, zipcode as 우편번호, address1 "도로명 주소", address2 as "상세 주소" from tb_user;
테이블명 별칭
select userid from tb_user u;
limit : 갯수제한
처음부터 2개 조회
select * from tb_user limit 2;
1번째(2행)부터 2개 조회
select * from tb_user limit 1, 2;
join : 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합해서 하나의 테이블이나 결과 집합으로 표현.
inner join(내부 조인) : 조건이 일치하는 것만 결과로 생성(반환).
예시 : tb_profile의 useridx와 tb_user의 useridx가 같은 조건인 username, userage, userbirthday, userblood로 값 반환. ㅤ select u.username, p.userage, p.userbirthday, p.userblood from tb_profile p join tb_user u on p.useridx = u.useridx;
outer join(외부 조인) : 조건이 일치하지 않더라도 한쪽 테이블의 데이터는 모두 결과로 생성(반환).
(모두 데이터로 사용할 테이블의 방향을 적어준다.)예시 : tb_profile의 useridx와 tb_user의 useridx가 같은 조건인 경우와 조건이 일치하지 않는 경우 모두 username, userage, userbirthday, userblood로 값 반환. ㅤ select u.username, p.userage, p.userbirthday, p.userblood from tb_profile p right outer join tb_user u on p.useridx = u.useridx;