[TIL] MySQL(5) ꔛ

YTT.erica·2022년 7월 31일
0

MySQL

목록 보기
2/5
post-thumbnail

📂 방학공부
└📁 모각코
└📁 HTML
└📁 CSS
└📁 jQuery
└📁 일기장


모각코 4일차 - MySQL

17. 불러올 레코드 수 지정하기

테이블에서 레코드를 불러올 때, 불러오는 수를 조절하려면 limit 명령문을 사용해야 한다.

select 필드명 from 테이블명 limit 불러올 수

mymember 테이블에서 3개의 레코드를 불러와보자.

select * from mymember limit 3;


id가 1부터 3까지 3개의 레코드가 불러와진다.

다음은 record 테이블에서 코딩 점수가 높은 순으로 4개의 레코드를 출력해보자.

select * from record order by coding desc limit 4;


코딩 점수가 높은 순으로 출력된다.

이번에는 특정 번호를 시작으로 n개를 불러오는 방법을 알아보자. 이때는 limit에 2개의 값을 적용하면 된다.
limit에 값을 위처럼 하나만 사용하면 그 값은 개수로 사용되나, 값을 2개 사용하면 첫 번째 값은 불러올 레코드의 순번이며, 두 번째 값은 불러올 수를 의미한다.

불러올 레코드의 순번은 1부터 수를 세지 않고 0부터 세는 것을 주의해야 한다.

select 필드명 from 테이블명 limit 불러올 레코드 순번, 불러올 개수

순번이 3이고 3개의 레코드를 출력해보자.

select * from mymember limit 3, 3;


이처럼 순번이 3인 myMemberID가 4부터 3개의 레코드가 출력된 다.


18. 2개 이상의 테이블을 묶어 사용하기

2개 이상의 테이블을 사용할 때 join을 사용했다. join은 일치하는 특정 필드를 기준으로 테이블을 연결했다면, union은 사용하려는 테이블들을 하나의 테이블인 것처럼 사용하게 해주는 기능을 제공한다.

(select 필드명 from 테이블1)  union (select 필드명 from 테이블2);

먼저 union을 하기 위해 두 개의 테이블을 생성하자.

create table outOld (
outOldID int unsigned not null auto_increment comment '예전 탈퇴회원 번호',
name varchar(10) not null comment '탈퇴 회원 이름',
phone varchar(13) not null comment '탈퇴 회원 전화번호',
primary key(outOldID))
charset=utf8 comment '2020년 탈퇴 회원';

create table outNew (
outNewID int unsigned not null auto_increment comment '예전 탈퇴회원 번호',
name varchar(10) not null comment '탈퇴 회원 이름',
phone varchar(13) not null comment '탈퇴 회원 전화번호',
primary key(outNewID))
charset=utf8 comment '2021년 탈퇴 회원';

테이블을 생성했으니 생성한 2개의 테이블에 데이터를 입력해보자.

insert into outOld(name, phone)
values('가나다', '010-1111-1111');
insert into outOld(name, phone)
values('라마바', '010-2222-2222');
insert into outOld(name, phone)
values('사아자', '010-3333-3333');
insert into outOld(name, phone)
values('차카타', '010-4444-4444');
insert into outOld(name, phone)
values('파하가', '010-5555-5555');
insert into outOld(name, phone)
values('나다라', '010-6666-6666');

insert into outNew(name, phone)
values('나다라', '010-6666-6666');
insert into outNew(name, phone)
values('마바사', '010-7777-7777');
insert into outNew(name, phone)
values('아자차', '010-8888-8888');

union을 이용해서 두 테이블에 있는 정보를 함께 출력해보자.

(select name, phone from outOld) union (select name, phone from outNew);


여기서 중복된 정보는 1개만 표시한다. 만약 중복된 정보도 함께 보려면 union 대신 union all을 사용하면 된다.


19. 쿼리문 안의 쿼리문 서브쿼리

record 테이블에서 영어 점수가 가장 높은 사람의 레코드를 출력해보고자 한다.
이때 서브쿼리를 사용하면 된다.
서브쿼리는 쿼리문 안에 또 다른 쿼리문을 사용하는 것을 의미한다.

서브쿼리를 이용하여 영어 점수가 가장 높은 레코드를 출력해보자.

select * from record where english = (select max(english) from record);


서브쿼리를 사용할 때는 괄호로 감싸주어야 하며, order by는 사용할 수 없다.

위는 조건문에 서브쿼리를 사용해 보았고 이번에는 서브쿼리를 select문에 사용해보자.

select *, (select avg(english) from record) as englishAVG from record;

select avg(english) from record는 모든 학생의 영어 점수 평균값을 구하고 이를 표시할 임시 필드명을 전에 알아보았던 앨리어스를 사용하여 englishAVG로 지정한 것이다.
select *, (select avg(english) ~ 는 모든 필드와 englishAVG 필드를 표시한다.


20. 특정 필드에 같은 값을 넣지 않는 방법

테이블의 대표 필드에 primary key를 적용하면 해당 필드에는 같은 값이 들어가지 않는다.
이와 마찬가지로 unique도 필드에 같은 값이 들어가지 않는다.

myMember 테이블에 unique를 추가하여 같은 값이 들어가지 않도록 필드 옵션을 수정해보자.

alter table myMember modify email varchar(30) not null unique comment '고객의 이메일 주소';


email 필드를 보면 UNI라고 적혀져 있는 것을 확인할 수 있다.
따라서 이미 저장되어 있는 email을 저장할 경우 에러 문구가 나타나고, 입력에 실패한다.


21. 서로 다른 필드의 값을 합쳐서 출력하기

테이블의 서로 다른 필드에 있는 값을 합쳐서 출력할 수 있다. 이때 concatdmf tkdydgkaus ehlsek.

select concat(합ㅊ칙 문자열 또는 필드, 합칠 문자열 또는 필드) from 테이블명;

concat을 이요하여 '누구의 핸드폰 번호는 무엇입니다.' 문구를 출력해보자.

select concat(name,'의 핸드폰 번호는 ',phone,'입니다.') from myMember;


22. 검색을 더욱 빠르게 하는 인덱스

데이터베이스의 레코드를 더욱 빠른 속도로 불러오게 하려면 인덱스를 사용해야 한다.

alter table 테이블명 add index(필드명);

myMember 테이블의 name 필드에 인덱스를 추가해보자.

alter table mymember add index(name);


name 필드에 MUL이 적혀져 있다. MUL은 인덱스를 의미한다.







MySQL 블로그 글은 여기서 끝! XD

profile
'◡'✿ 꿈을 찾아가보자고~ '◡'✿

0개의 댓글