SELECT FROM Adventureworks.HumanResources.Empoyee
위처럼 사용 안하고 다른 DB에서 데이터를 불러오려고 하면 오류가 뜸
-->또한 다른 컴퓨터나 서버에 있는 데이터도 불러올 수 있음
( SELECT FROM WIN2019.Adventureworks.HumanResources.Empoyee)// 컴퓨터 이름.DB이름.스키마이름.파일이름
USE Adventureworks
SELECT FROM HumanResources.Empoyee
SELECT FROM [HP-PC].AdventureWorks.
HumanResources.Employee
SELECT Name, GroupName FROM
HumanResources.Department
--저장 프로시져 데이터목록 조회하는것 sp_helpdb;
--execute sp_helpdb;
-- DB 안에 테이블을 보고 싶다면 sp_tables
ex)execute sp_tables @table_type = "'TABLE'";
-DB나 TABLE을 만들때 사용
CREATE DATABASE sqlDB[ 생성시 설정할 DB 이름];
-테이블 생성할때
CREATE TABLE userTBL[ 생성할 테이블 이름 ]
(
[열 이름][데이터타입(글자수)] [NULL여부][기본키]
userID CHAR(8) NOT NULL PRIMARY KEY,
name NVARCHAR(10) NOT NULL,
birthYear int NOT NULL,
addr NVARCHAR(2) NOT NULL,
mobile CHAR(3) , --date형식을 int로 잡으면 맨앞자리 0이 작성되지 않음
mobile2 CHAR(8),
height SMALLINT,
mDate DATE
);
=> NVARCHAR (한글 문자열)
-완전히 삭제할때 사용
DROP DATABASE sqlDB[ 삭제할 DB 이름 ];
데이터를 입력할때 사용
INSERT INTO userTBL[ 데이터를 입력할 테이블이름 ] VALUES('LSG', '이승기', 1987, '서울', '011', '11111111', 182, '2008-8-8');// 각 테이블 여렝 맞는 값을 입력해주면 됨 , date는 문자열 처럼 ''로 감싸줘야함, 비어있는 곳은 공백으로 비워두면 안되고 NULL을 넣어놔야함.
ex)
INSERT INTO userTBL VALUES('LSG', '이승기', 1987, '서울', '011', '11111111', 182, '2008-8-8');
INSERT INTO userTbl VALUES('SSK', '성시경', 1979, '서울', NULL , NULL , 186, '2013-12-12');
SELELCT [필드이름] FROM [테이블이름] WHERE[조건식];
=>관계연산자를 사용해서 WHERE절을 사용할 수도있음
SELECT userID, Name FROM userTBL
WHERE birthYear >= 1970 AND height >=182;
=>BETWEEN ...AND 와 IN( )
SELECT Name, height FROM userTBL WHERE height
BETWEEN 180 AND 183 // userTBL 테이블에서 키가 180과 183 사이인 결과를 Name과 height만 조회해서 나타내라
->연속된 값
select Name, height from userTBL
where height >=180 and height<=183;
select Name, height from userTBL
where height between 180 and 183;
위 두 구문은 같은 결과
SELECT name, addr FROM userTBL WHERE addr IN('경남','전남','경북');
->
select Name, addr from userTBL
where addr='경남' or addr='전남' or addr='경북';
select Name, addr from userTBL
where addr in('경남','전남','경북');
같은 구문
즉 between은 and ( 연속구문 그 사이 에 포함되는)
in은 그중 하나 즉 or
두가지 이상의 결과조회를 여러번 하지 않고 한번에 조회가능
김경호의 키보다 큰 사람을 찾고 싶다. 는 조건이 달린다고 한다면
1. 김경호의 키를 조회한다
select height from userTBL
where Name='김경호';
2. 조회된 김경호의 키로 그 키보다 큰 사람을 조회한다.
select Name, height from userTBL
where height>177;
이렇게 하는게 일반적, 하지만 이렇게 두번에 걸쳐서 작업을 하게되면 작업이 많아지게 되면 복잡해질 수 있어서
서브쿼리를 사용해서 한번에 조회함.
select Name, height from userTBL
where height>(select height from userTBL where Name='김경호');
-> 서브쿼리라고 어려워하지말고 , 비교를 원하는 정보를 조회하는 곳에 그 데이터를 넣는게 아닌 그 데이터를 찾는 쿼리문을 넣으면 된다!
1. ANY , ALL
select Name, height from userTBL
where height>=ANY(select height from userTBL where addr='경남');
--ANY 두개중 어느것이라도 만족해도 좋음( 조회되는 수중 작은수)
즉 ANY는 OR
where height>=ALL(select height from userTBL where addr='경남');
--ALL 나오는 수를 둘다 만족해야 한다( 조회되는 수중 가장 큰수)
즉 ALL은 AND
DESC: 내림차순정렬
ASC:오름차순 정렬
SELECT DISTINCT addr FROM userTBL;
SELECT top(10) CreditCardId from Sales.CreditCard
where CardType ='Vista'
order by ExpYear, ExpMonth;
select * from Sales.SalesOrderDetail TABLESAMPLE(0.1 PERCENT);
-기본키, 외래키 등 제약 조건은 복사가 되지 않음
SELECT * INTO buyTBL2 FROM buyTBL;
select userID, name, birthYear from userTBL
order by birthYear
offset 4 row;
select userID, name, birthYear from userTBL
order by birthYear
offset 4 row
fetch next 3 rows only;
select userID, sum(amount) from buyTBL
group by userID
order by sum(amount)desc;
-SUM( ) : 해당 열 숫자 더함
-AVG( ) : 평균
-MIN( ) : 최소값 구함
-MAX( ) : 최댓값 구함
-COUNT( ) : 행의 개수를 구함
-COUN_BIG( ) : 개수를 세는 함수(단 결과값이 BIGINT형)
-STDEV( ) : 표준편차를 구하는 함수
집계함수는(sum, min,max...) where절에 사용 할 수 없음
HAVING절에 사용해야하는데
이는 group by 아래쪽에 사용해야 함
select userID, sum(amount) from buyTBL
where sum(amount) >= 6
group by userID;
-> 결과 : 에러
select userID, sum(amount) from buyTBL
group by userID
having sum(amount) >=6;
** order by절은 무조건 맨 아래에 와야 함