IT수업/데이터베이스

it 수업 6주차 (10) SQL문 (SELECT)

워제하 2024. 1. 29. 13:50

 

우선 만들어진 db데이터를 가져올 것이다.

 

db 샘플 데이터는https://www.mysqltutorial.org/getting-started-with-mysql/mysql-sample-database/  여기서 가져오면 된다.

 

 

다운받은 샘플db가 있는 폴더에서 cmd를 입력해

cmd창으로 들어가 mysql -u root -p를 클릭해 접속해준다.

 

그리고 shopdb를 만들어 받아온 샘플 데이터베이스를 source 코드를 이용해 가져온다.

 

 

이어서 다른 db도 가져올것이다. 이 db는 db명이 이미 선언되어 있어서 다른 방식으로 가져올 것이다.

이 파일에서 마우스 오른쪽을 눌러 메모장으로 연결해준 뒤 ctrl+a로 전체 선택을 해 복사하여 

workbench로 붙여넣기 해주면 된다.

 

붙여넣기는 새로운 sql창을 열어 붙여 넣기 해주면 된다.

 

 

열었으면 번개모양 버튼을 눌러 저장시켜 준다.

그리고 refresh 하면 나타날 것이다.

 

 

새로운 sql파일을 열어서 sql문을 적용해 볼 것이다.

적용은 ctrl+enter 누르면 표가 뜬다.

 

 

먼저 select문이다.

 

14열을 as '연락처' 없이 했을 경우 이렇게 나온다.

그러므로 as '연락처'를 해주면 

이렇게 별칭이 생기게 된다.

 

 

다음은 select where절이다. where은 조건절로 비교연산자를 쓸 때 사용할 수 있다.

 

  = : 동등 비교 연산자

  >=, <= : 대소 비교 연산자

 

select * from usertbl where name='김경호'; 하면 이름이 김경호은 사람의 값이 나온다.

 

select * from usertbl where userid='LSG'; 하면 userid가 LSG인 값이 나온다.

 

select * from usertbl where birthyear >= 1970; 하면 birthyear가 1970년도 보다 큰 값들이 나온다.

 

 

 

and 연산자 :  [참 and 참] 을 만족하는 경우

or 연산자 : [참 or 참], [거짓 or 참], [참 or 거짓] 을 만족하는 경우

between and

 

select * from usertbl where birthyear >= 1970 and height >= 180; 을 하면 birthyear가 1970보다 크면서(and) height가 180보다 큰 값을 가져오게 된다.

즉, 둘 다 참인 값들을 가져오는 것이다.

 

 

select * from usertbl where birthyear >= 1970 or height >= 180; 하면 birthyear가 1970보다 크거나(or) height가 180보다 큰 값들을 가져오게 한다.

즉, 둘 중 하나만 참이어도 값을 가져오게 된다.

 

 select * from usertbl where height between 170 and 180; 하면 height가 170과 180의 사이에 있는 값들이 나오게 된다.

 

 

다음은 포함 문자열이다.

in : 완성된 문자열

like : 미완성된 문자열을 필터링

% : 길이 제한 없는 모든 문자

_ : 개수만큼의 길이제한 있는 모든 문자

 

select * from usertbl where addr in ('서울', '경남'); 하면 addr이 서울이거나 경남인 값들이 나오게 된다.

 

select * from usertbl where name like '김%'; 하면 name의 첫 글자가 '김'이고 뒤에는 몇개의 글자가 들어와도 상관없고 없어도 출력된다.

 

select * from usertbl where name like '%수'; 이렇게 맨 앞에 '%'가 있다면 앞에 글자가 얼마나 있든없든 맨 뒤가 '수'이기만 하면 해당 값들이 출력되는 것을 볼 수 있다.

 

select * from usertbl where name like '김__'; 이렇게 하면 맨앞은 '김'이 나와야하고 뒤에 붙은 언더바(_)의 갯수만큼의 글자만 출력되게 된다. 현재는 언더바가 두번 붙어있으므로 3글자이면서 맨 앞글자가 '김'인 값들이 출력되게 된다.

 

 

 

<연습문제>

 

 

1. select * from buytbl where amount>=5;

 

2. select userid, prodname from buytbl where price>=50 and price<=500;
    (= select userid, prodname from buytbl where price between 50 and 500;)

 

3. select * from buytbl where amount>=10 or price>=100;

 

4. select * from buytbl where userid like 'K%';

 

5. select * from buytbl where groupname='서적' or groupname='전자';
   (= select * from buytbl where groupname in ('서적', '전자');)

 

6. select * from buytbl where prodname='책' or userid like '%W';

 

7. select * from buytbl where groupname != ''; 
   (= select * from buytbl where groupname != 'null'; )
   select * from buytbl where groupname <> ''; 
   (= select * from buytbl where groupname <> 'null'; )

 

!=, <> : ~가 아닌 값을 출력하기 위해 사용

 

 

 

 

 

다음은 select 조건절 - 서브쿼리 이다.

select column명 from 테이블명 where column명 조건 (select column명 from 테이블명 where 조건); 을 하면 된다.

 

 

select * from usertbl where height > (select height from usertbl where name='김경호'); 하면 김경호보다 키가 큰 값들을 출력 할 수 있다. 

 

 

다음은 all과 any 의 사용이다.

조건이 여러가지라 무엇을 어떤 조건들을 선택할지 모르기 때문에 all과 any를 사용하여 조건을 정해주는 역할을 한다.

 

all : 모든 조건을 만족 (and와 비슷) 

any : 어느 조건이든 하나 이상 만족 (or와 비슷)

 

우선 select height from usertbl where addr in ('경남'); 하면 이 두 값이 출력된다.

여기서 all을 쓰게 된다면 height의 기준이 170이 되고 any를 쓴다면 height의 기준이 173이된다.

 

select * from usertbl where height > all(select height from usertbl where addr in ('경남')); 하면 addr이 '경남'인 값의 height보다 큰 height들이 나오게 된다. 즉 기준이 height= 173 이된다. 

 

select * from usertbl where height > any(select height from usertbl where addr in ('경남')); 하면 위와 똑같이 addr이 '경남'인 값의 height보다 큰 height들이 나오지만 기준은 height=170이므로 위에서 나오지 않은 height=172의 값이 하나 더 생기게 된다.

 

 

 

 

 

<연습문제>

 

1.  select * from buytbl where price > (select price from buytbl where amount = 10);

 

2. select * from buytbl where amount > any(select amount from buytbl where userID like 'K%');

 

3. select * from buytbl where price > all(select price from buytbl where amount=5);