-- select 문 : 조회 / 선택 / 출력
select 열이름,열이름
from 테이블 이름(인스턴스명,디비명,스키마명,테이블명)
--ex) 대학 교명. 학부. 학과. 성적
ex)
select 1,2,3,4,5,6,7;
select userid, password from usertbl;
/* 이 DBMS에 어떤 DB가 있는지 모름.
어떤 DB가 있는지, 어떤 테이블이 있는지, 어떤 필드로 구성되어 있는지, 원하는 필드의 data 조회 */
-- 1. DB 조회 : 현재 인스턴스에 어떤 DB가 있는지 조회.
exec sp_helpdb;
-- 2. 특정 DB에 어떤 테이블이 있는지
use sqldb; //해당 DB에서
exec sp_tables; //sp_tables를 보여달라
exec sp_tables @table_type ="'table'"; //테이블 타입이
-- 3. 특정 테이블의 컬럼 구성 확인
exec sp_columns @table_name='userTbl', @table_owner='dbo';
//테이블 네임은인 테이블을 보여달라
-- 4. 원하는 데이터 조회 (아이디, 이름, 비밀번호, 전화번호)
select userid,name,password,mobile1,'-',mobile2 from usertbl;
-- 연습1. ShopDB에서 memberTBL 테이블에서 열의 목록을 확인하고 아이디와 이름을 조회하시오!!
-- 연습2. Adventureworks에서 humanresources.department의 이름과 그룹 이름을 조회하시오!!
-- 열 이름에 별칭(Alias) 지정 하기.
-- 방법 1 : 열 이름 뒤에 'AS 별칭' -- 방법 2 : 열 이름 '별칭' -- 방법 3 : [별칭] = 열이름
select userID as '아이디', -- 방법 1 name '이름', -- 방법 2 [비밀번호] = password -- 방법 3 from usertbl; |
/*
Q1) user 테이블에서 필드명을 아이디, 이름, 생년, 거주지를 출력하시오(한글로( 필드명이 보이도록)
Q2) 구매 테이블에서 모든 구매 내역을 출력하되 모든 필드명을 한글로 변환하여 출력하시오!!
(순번, 아이디, 제품명, 분류, 가격, 수량)
Q3) (디비 변경 없이) AdventureWork DB의 HumanResources.Department 테이블에서 부서번호(DepartmentID), 부서이름(name), 그룹 이름(GroupName)
*/
Q3.
select DepartmentID as '부서번호', name as '부서이름', GroupName as '그룹이름'
from "WIN-0T2RRPOJOHJ".AdventureWorks.HumanResources.Department;
ㄴ--인스턴스 생략 가능
-- 특정 조건의 데이터만 확인(조회/출력) : WHERE
SELECT 필드명 |
--Q4) 이름이 김경호에 대한 모든 정보 조회
select * from userTbl where name = N'김경호';
--Q5) 서울에 사는 사람은 몇 명?? select userid as '아이디',
name as '이름', password as '비밀번호', birthYear as '생년', addr as '거주지', mobile1 as '폰번1', mobile2 as '폰번2', height as '키',
mDate as '가입일'
from userTbl where addr=N'서울';
--Q6) 016 번호를 사용하는 사람에 대한 정보 조회
select userid as '아이디',
name as '이름', password as '비밀번호', birthYear as '생년', addr as '거주지', mobile1 as '폰번1', mobile2 as '폰번2', height as '키',
mDate as '가입일'
from userTbl where mobile1='016';
--Q7) 아이디가 KBS인 사람이 구매한 모든 제품 목록을 아이디, 제품명 출력. select userID as '아이디',
prodName as '제품명' from buytbl
where userID = 'KBS';
--Q8) 성시경의 이름, 아이디, 주소, 키를 출력하시오.
select name '이름', userid '아이디', addr '주소', height '키' from usertbl where name=N'성시경';
/* 조건 연산자 / 관계 연산자의 사용 |
-- Q9) 1970년 이후에 출생했고(그리고) 신장이 182 이상인 사람의 아이디와 이름 조회. select userid, name from usertbl
where birthYear >= 1970 and height >= 182;
-- Q10) 1970년 이후에 출생했거나(또는) 신장이 182 이상인 사람의 아이디와 이름 조회. select userid, name from usertbl
where birthYear >= 1970 or height >= 182;
-- Q11) 서울에 사는 사람들 중에서 1970년 이후에 출생한 사람은? (이름, 생년, 주소) select name, birthYear,addr from usertbl
where addr=N'서울' and birthyear >= 1970;
-- Q12) 휴대폰 번호가 016이거나 018이거나 019인 사람은? (이름, 국번) select name, mobile1 from usertbl
where mobile1='016' or mobile1='018' or mobile1='019';
-- Q13) 주소가 서울이 아닌 사람들에 대한 모든 정보 출력
select * from usertbl where addr != N'서울';
-- Q14) 키가 180~183인 사람의 이름과 키 조회.
select name '이름' , height '키' from usertbl where height>='180' and height<='183';
ㄴ-- 연속 적인 값(범위) : BETWEEN ... AND
select name, height from usertbl where height BETWEEN 180 AND 183;
-- 생년 1970년대인 사람들의 이름과 생년을 출력
--(필드 이름을
select name as '이름', birthyear '생년' from usertbl where birthyear between 1970 and 1979;
-- 키가 174 또는 180 또는 182인 사람 조회
select * from usertbl;
SELECT Name, height FROM userTbl
WHERE height=174 OR height=180 OR height=182;
ㄴ-- 연속적이지 않은 값 : IN()
SELECT Name, height FROM userTbl where height IN (174,180,182);
-- 모바일 번호가 016이거나 018이거나 019인 사람
select * from usertbl
where mobile1 IN (016, 018, 019); select * from usertbl;
-- LIKE : 특정 문자가 포함된 내용을 조회할 때 , % 모든(여러문자), _ 한 문자(글자)
-- 성이 '조'가인 사람의 이름과 아이디 출력
select name '이름', userid '아이디' from userTbl where name LIKE N'조%';
-- 아이디에 s가 있는 사람의 아이디와 이름
select name '이름', userid '아이디' from userTbl where userid like '%S%';
-- 아이디가 J로 시작하는 사람의 아이디와 이름
select name '이름', userid '아이디' from userTbl where userid like 'J%';
select name '이름', userid '아이디' from userTbl where userid like 'J ';
-- 맨 앞글자가 한 글자이고 그다음이‘시경'인‘시경' 사람 조회
select * from usertbl where name like N'_시경';
-- 아이디 중간 글자가 K인 사람의 아이디와 이름
select userid, name from usertbl where userid like '_K_';
select userid, name from usertbl where userid like '%K%'; -- 틀림
-- 이름 중간 글자가 '범'인 사람의 이름과 주소
select name, addr from usertbl where name like N'_범_';
select name, addr from usertbl where name like N'%범%'; -- 틀림
-- 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력
select name, height from usertbl where name=N'김경호';
select name, height from userTBL where height >= 177;
/* 하위 쿼리(서브) 1) 괄호() 내에서 사용. 2) 비교 연산자와 함께 사용. 3) ORDER BY를 사용하지 못함. 4) select, from , where 각각의 절에 사용할 수 있음.
- 단일행 서브 쿼리 (from 동일 테이블) - 다중행 서브 쿼리 (from 다른 테이블) - 다중 컬럼 서브 쿼리(서브 쿼리에서 여러 개의 컬럼을select) - ORACLE select job id as '아이디', employee as '사번', last_name as '이름', salary as '급여' from emp where (job_id, salary) in (select job_id, max(salary) from emp group by job_id); */
|
--Q20) 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력 select name, height from usertbl where name=N'김경호'; select name, height from userTBL where height >= 177;
select name, height from usertbl
where height >= (select height from usertbl where name=N'김경호');
--Q21) 조관우와 같은 지역에 사는 사람의 이름과 주소를 출력하시오
select addr from usertbl where name=N'조관우'; select name, addr from usertbl where addr=N'경기';
select name, addr from usertbl
where addr= (select addr from usertbl where name=N'조관우');
--Q22) 아이디가 KBS인 사람보다 동생인 사람의 아이디와 생년을 출력하시오
select birthyear from usertbl where userid='kbs';
select userid, birthyear from usertbl where birthyear > 1979;
select userid, birthyear from usertbl
where birthyear > (select birthyear from usertbl where userid='kbs');
--Q23) 메모리를 구매한 사람의 아이디와 이름을 출력하시오. (다중행 서브 쿼리) select userid from buyTbl where prodName=N'메모리';
select userid , name from userTbl where userid = 'BBK';
select userid , name from userTbl
where userid = (select userid from buyTbl where prodName=N'메모리');
--Q24) 지역이‘경남’인 사람의 키보다 키가 크거나 같은 사람 추출
select height from userTbl where addr=N'경남'; select name, height from userTBL
where height >=
select name, height from userTBL
where height >= (select height from userTbl where addr=N'경남');
select * from usertbl;select * from buytbl;
/*하위 쿼리에서 둘 이상의 값을 반환하면 비교 연산자를 사용할 수 없음. 하위 쿼리의 결과가173, 170 이라는 두 개의 값을 반환하므로 발생하는 오류 */
-- ANY : 하위 쿼리의 결과 여러 개 중 한 가지만 만족시키는 경우 : 170보다 크거나(or) 173보다 크거나 즉 170보다 큰
-- ALL : 하위 쿼리의 결과 여러 개를 모두 만족시키는 경우 : 170보다 크고(and) 173보다 큰 173보다 큰
|
-- ANY
select name, height from userTBL
where height >= ANY (select height from userTbl where addr=N'경남');
-- ALL
select name, height from userTBL
where height >= ALL (select height from userTbl where addr=N'경남');
실습한 내용
기본적인 출력 : SELECT 필드값 FROM 테이블명
특정 조건의 데이터 확인하기 : SELECT 필드값 FROM 테이블명 WHERE 조건
연산자 사용하기 : 조건연산자 =, <, >, <=, >=, != 등), 관계연산자(NOT, AND, OR 등)
연속적인 값 : BETWEEN 시작값 AND 마지막값
연속적이지 않은 값 : IN (값, 값, 값, 값)
특정 문자 조회하기 : LIKE % 모든(여러문자), _ 한 문자(글자)
하위(서브) 쿼리
- 괄호() 내에서 사용.
- 비교 연산자와 함께 사용.
- ORDER BY를 사용하지 못함.
- select, from , where 각각의 절에 사용할 수 있음.
두 개의 값을 반환하므로 발생하는 오류
ANY : 하위 쿼리의 결과 여러 개 중 한 가지만 만족시키는 경우 : or
ALL : 하위 쿼리의 결과 여러 개를 모두 만족시키는 경우 : and