select *
from employee;
--count() 함수
--count(컬럼명
-- 해당컬럼에 데이터가 들어있는 총 갯수 반환
--조회하는 테이블에 총 행 확인
select count(*) as [총행]
from employee
where pub_id = 0877;
--변화가없다. count시에 * 일경우엔 null값을 포함하여 처리한다
select count(title) as [총계]
from titles;
--null값 제외하고 count
select count(price) as [총계]
from titles;
-- titles 테이블안에 가격이 미정인 책의 권수?
select count(*) - count(price)
from titles;
--count 응용
select count(distinct 주소)
from 주소록;
-- sum() 함수
-- sum(컬럼명)
-- 해당 컬럼의 총합을 반환
select sum(나이)
from 주소록;
select sum(나이) / count(나이)
from 주소록;
-- 성적 테이블
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('1','아이유','50','70','45','80','55');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('2','씨크릿','65','32','77','12','32');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('3','포미닛','48','34','64','33','75');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('4','원더걸스','24','97','33','42','74');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('5','소녀시대','98','98','88','44','47');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('6','브라운아이즈걸즈','100','24','44','88','99');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('7','포맨','78','69','79','79','89');
insert into 성적 (번호, 이름, 국어, 영어, 수학, 과학, 물리) values('8','임선예','75','78','85','83','82');
-- 학생의 이름, 국어, 영어, 수학, 총점!!
select 이름, 국어, 영어, 수학
, (국어 + 영어 + 수학) as [총점]
from 성적
-- 학생의 이름, 국어, 영어, 수학, 총점!!, 평균
select 이름, 국어, 영어, 수학
, (국어 + 영어 + 수학) as [총점]
, (국어 + 영어 + 수학) / 3 as [평균]
from 성적;
-- 학생의 이름, 국어, 영어, 수학, 총점!!, 평균 - 1등부터 등수순..
select 이름, 국어, 영어, 수학
, (국어 + 영어 + 수학) as [총점]
, (국어 + 영어 + 수학) / 3 as [평균]
from 성적 order by (국어 + 영어 + 수학) desc;
-- X
select 이름, 국어, 영어, 수학
, (국어 + 영어 + 수학) as [총점]
, [총점] / 3 as [평균]
from 성적 order by [총점] desc;
select 이름, 국어, 영어, 수학, 과학, 물리,
, (국어 + 영어 + 수학) as [총점]
from 성적;
-- sum(), count(), avg() : 집계함수, 통계함수
-- avg()함수, avg(컬럼명), 해당 컬럼의 평균 반환, 값이 없는 컬럼은 제외
select avg(국어) as 국어평균, avg(영어) as 영어평균, avg(수학) as 수학평균
from 성적;
--반평균 점수?
select avg(국어 + 영어 + 수학) / 3 as [총점]
from 성적;
select avg((국어 + 영어 + 수학) / 3) as [국어,영어,수학,평균]
from 성적;
-- max(컬럼명), min(컬럼명) 함수
-- 최대값, 최소값
select max(국어) as [ 큰놈 ]
from 성적;
-- 주소록에서 가장 나이 많은 사람의 나이
select max(나이) as [나이많은사람]
from 주소록;
select min(나이) as [나이 적은 사람]
from 주소록;
select max(나이), min(나이), avg(나이)
from 주소록
where 주소 = '서울시';
-- group by절
-- 특정 컬럼값을 지정해서, 그 값이 동일한 레코드끼리 묶어서 집계 함수를 사용한 통계값을 사용
-- group by를 사용한 select에서는 컬럼 리스트 안에
-- 1. 집계함수
-- 2. group by에서 사용한 컬럼 만이 올수 있다.
select * from 주소록;
-- 모든 사람의 평균 나이
select avg(나이), 주소
from 주소록
where 주소 in('서울시', '인천시', '광주시', '부산시')
group by 주소;
select avg(나이) from 주소록 where 주소 = '서울시';
select avg(나이) from 주소록 where 주소 = '인천시';
select avg(나이) from 주소록 where 주소 = '광주시';
select avg(나이) from 주소록 where 주소 = '부산시';
-- 지역별 회원 수?
select count(*) as [사는인원], 주소
from 주소록
group by 주소;
-- pubs.titles 테이블
-- [type]
--1. 카테고리별로 도서 평균 가격?
select avg(price) as [도서평균], [type]
from titles
where [type] not in ('UNDECIDED')
group by [type];
--2. 카테고리 별로 도서 총 권수?
select count(*) as [총권수], [type]
from titles
where [type] not in ('UNDECIDED')
group by [type]
--3. 카테고리 별로 가장 비싼 가격?
select max(price) as [비싼책], [type]
from titles
where [type] not in ('UNDECIDED')
group by [type]
--4. 카테고리 별로 가장 낮은 가격?
select min(price) as [가장싼책], [type]
from titles
where [type] not in ('UNDECIDED')
group by [type]
-- 날짜/시간 함수
-- SQL(smalldatetime, datetime) 서기 1년 1월 9999년까지가능, 분까지만 저장된다.
-- 메모 테이블
create table 메모
(
번호 int not null primary key,
내용 varchar(1000) not null,
시간 datetime not null,
);
insert into 메모(번호, 내용, 시간) values('1', '안녕하세요 잡답중입니다 하하하이이히히이히','2012-01-19 11:57:30');
insert into 메모(번호, 내용, 시간) values('2', '아 아아어포미닛 짱 소시 짱','');
insert into 메모(번호, 내용, 시간) values('3', '원더걸스 노래 너무좋아~~',getdate());
insert into 메모(번호, 내용, 시간) values('4', '소시짱',getdate());
insert into 메모(번호, 내용, 시간) values('5', '우윳빛깔 걸그룹',getdate());
insert into 메모(번호, 내용, 시간) values('6', '아이유 10단고음',getdate());
insert into 메모(번호, 내용, 시간) values('7', '하이킥3',getdate());
insert into 메모(번호, 내용, 시간) values('8', '즐거운밤',getdate());
update 메모
UPDATE 는 프라이머리키는 절대 수정하지 않도록한다.
데이터 전체 이동 하려면..
SET identity_insert Test5 off
INSERT INTO Test5 SELECT data1, data2 FROM Test4;
set 시간 = '2012-01-19 12:44:45';
select getdate();
select *
from 메모
order by 시간 desc;
-- DML
-- select, insert, update, delete
--update
--레코드의 일부(모든) 컬럼값을 수정할 때 사용
select *
from 주소록;
update 주소록 set 주소 = '대전시'
where 이름 in('김길동', '홍인권', '하하하');
-- '홍길동'의 주소를 '김천시'로 수정, 나이가 +1 수정
update 주소록
set 주소 = '김천시',
나이 = 나이 + 1
where 이름 = '홍길동' ;
select *
from 주소록;
--delete
--레코드단위의 삭제(행삭제0, 셀삭제x)
--테이블의모든데이터를삭제
TRUNCATE TABLE tblCountry;--비우는작업만하기때문에아래의delete 보다속도면에서빠르다.
DELETE FROM tblCountry;--로그기록과같은전반적인제반사항이따르기때문에속도면에서위보다느리다.
delete
from 주소록
where 이름 = '하하하';
select *
from 주소록