본문 바로가기
CLASS/DATABASE

#3-4 / database 검색

by hingu 2024. 6. 4.

⚡ database counting 

* select count(*) from 테이블명; 
=> 해당 table에 몇개의 데이터가 있는지 확인
* select count(*) as total from 테이블명;  
=> as(Alias 의 약어)를 이용하여 가상의 column명을 사용함

* select * from table명 where colomn='데이터명' and colomn='데이터명'
=> 2가지 조건이 모두 만족 ( = && )
* select * from table명 where colomn='데이터명' or colomn='데이터명'
=> 2가지 조건 중 한가지만 만족 ( = || )

 

ex 1)
select count(*) from member where marea='b';
=> member table 중 지역코드가 b인 사람이 몇명인지 출력

 

ex 2) 

select count(*) as total from member where marea='c';

=> total이라는 가상의 column명으로 member table 중 지역코드가 b인 사람이 몇명인지 출력

 

 ex 3) 실버회원 몇명인지 출력

 select count(*) as silver from member where mlevel='2';

 

ex 4) 실버회원 제외하고 몇명인지 출력 : ! =

select count(*) as notsilver from member where mlevel!='2';

 

ex 4) 실버회원 이상 등급 몇명인지 출력 - 등급이 int라서 가능

 

ex 5) 실버회원 또는 골드회원 몇명인지 출력 ( 둘중 하나 만족 : and )

 

ex 5) 실버회원중 지역코드 대구인 사람 몇명인지 출력 ( 둘다 만족 : or )

 

 

⚡ data 내림차순,오름차순으로 출력 ex) 게시판은 가장 최근 글을 쓴 사람이 맨 위

* select * from table명 order by colomn명 desc 또는 asc;
desc : 내림차순
asc : 오름차순
// 문자도 가능

ex ) select * from member order by no desc; => no(auto_increment)기준으로 내림차순

 

ex 1 ) select * from member order by mname asc;

=> 이름 ㄱㄴㄷ 역순으로 출력

 

 

 

⚡ 해당 단어를 기점으로 data 검색

select * from table명 where colomn명 like  '%검색할 단어' => 해당 단어로 끝나는 data 검색
select * from table명 where colomn명 like  '검색할 단어%' => 해당 단어로 시작하는 data 검색
select * from table명 where colomn명 like  '%검색할 단어%' => 해당 단어가 포함된 data 검색

like : 검색

ex 1 )  select * from member where mtel like '%6790';

=> 전화번호 전체에서 6790으로 끝나는 번호만 출력

 

ex 2 ) select count(*) as naver from member where memail like '%naver%';

=> naver email 사용하는 사람 몇명인지 출력

 

 

⚡ 원하는 데이터만 table

select mid,mname,mhp,mlevel from member; => * 대신 해당 field명만 작성

 

⚡ join (table + table) - 많이 합치면 합칠수록 속도 ↓

- join : 2개 이상의 table을 검토하여 하나의 table로 출력 => double 반복문과 같은 원리

  • innerjoin : 교집합
  • outerjoin : 교집합 외의 집합
  • leftjoin : 한개의 왼쪽 기준 table 집합
  • rightjoin : 한개의 오른쪽 기준 table 집합
  • fullouterjoin : 전체 table 출력하는 집합
  • ...등등 database마다 종류가 다름 / join만 잘써도 다됨
[join 문법]

select colomn명,colomn명 from 테이블1 as 별명1 join 테이블2 as 별명2 where table 조건;

 

ex ) select a.mid,a.mname,a.mhp,a.mlevel,b.l_name from member as a join level as b where a.mlevel = b.l_num;

=> table a의 mlevel(해당 멤버 level 번호)값과 table b의 l_num(해당 멤버 level 번호)값이 같다면 l_name(멤버 level 이름) 출력

 

🔽 

 

응용문제1

해당 가입자 회원 정보 중 다음과 같이 출력되도록 명령어를 입력하시오.

[결과]

고객명 이메일 지역(한글)

select a.mname,a.memail,b.a_name from member as a join area as b where a.marea = b.a_code;

 

 

응용문제2

해당 결과처럼 데이터가 출력되도록 sql 문법을 입력하시오

-> nate.com 메일 주소 사용자에 한해서 출력 결과가 나와야합니다.

 

[출력 결과]

고객명 이메일 지역(한글) level(한글) - 3개 table join 

힌트 ) select colmn명 from atable as a join btable b join ctable c

 

select a.mname,a.memail,b.a_name,c.l_num from member as a join area as b join level as c where a.marea = b.a_code and a.mlevel = c.l_num and a.memail like '%nate.com';