SQL 프로그래밍 수업정리

김두나·2023년 10월 8일
0

학교수업정리

목록 보기
3/5

1. USE 구문

  • USE [데이터베이스-이름]
    (처음 사용시 데이터베이스 확인시 사용)
    --> USE 구문 사용 안하고 다른 DB에 있는 데이터를 불러올 경우, DB이름까지 포함해서 SELECT구문 사용하면 가능

    SELECT FROM Adventureworks.HumanResources.Empoyee
    위처럼 사용 안하고 다른 DB에서 데이터를 불러오려고 하면 오류가 뜸
    -->또한 다른 컴퓨터나 서버에 있는 데이터도 불러올 수 있음
    ( SELECT
    FROM WIN2019.Adventureworks.HumanResources.Empoyee)// 컴퓨터 이름.DB이름.스키마이름.파일이름

2. SELECT문 OR FROM문

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'";

3.CREATE문

-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 (한글 문자열)

4.Drop문

-완전히 삭제할때 사용

DROP DATABASE sqlDB[ 삭제할 DB 이름 ];

5. INSERT문

데이터를 입력할때 사용

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');

6. WHERE절

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

7. 하위 쿼리 /서브 쿼리

두가지 이상의 결과조회를 여러번 하지 않고 한번에 조회가능

김경호의 키보다 큰 사람을 찾고 싶다. 는 조건이 달린다고 한다면
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

8. ORDER BY : 성능면에서 왠만하면 사용하지 않는 게 좋음

- 정렬

DESC: 내림차순정렬
ASC:오름차순 정렬

9. DISTINCT : 중복제거

SELECT DISTINCT addr FROM userTBL;

10. TOP(N)

: 상위 N개만 출력

SELECT top(10) CreditCardId from Sales.CreditCard
where CardType ='Vista'
order by ExpYear, ExpMonth;

11. TABLESAMPLE : 일정 샘플 추출(섞어서 일부만 보는것)

select * from Sales.SalesOrderDetail TABLESAMPLE(0.1 PERCENT);

12. SELECT INTO : 조회한 내용이 새로운 테이블로 복사

-기본키, 외래키 등 제약 조건은 복사가 되지 않음

SELECT * INTO buyTBL2 FROM buyTBL;

13. OFFSET / FETCH NEXT

-OFFSET - 지정한 만큼 건나뛰어서 보여줌

select userID, name, birthYear from userTBL
order by birthYear
offset 4 row;

-FETCH NEXT - 지정한 갯수만큼만 보여줌

select userID, name, birthYear from userTBL
order by birthYear
offset 4 row
fetch next 3 rows only;

14. GROUP BY : 묶어줌(열끼리 묶어줌)

select userID, sum(amount) from buyTBL
group by userID
order by sum(amount)desc;

15. 집계함수

-SUM( ) : 해당 열 숫자 더함
-AVG( ) : 평균
-MIN( ) : 최소값 구함
-MAX( ) : 최댓값 구함
-COUNT( ) : 행의 개수를 구함
-COUN_BIG( ) : 개수를 세는 함수(단 결과값이 BIGINT형)
-STDEV( ) : 표준편차를 구하는 함수

16. HAVING절

집계함수는(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절은 무조건 맨 아래에 와야 함

17. ROLLUP() / GROUPING_ID() / CUBE() 함수

  • ROLLUP()은 총합이나 중간 함계가 필요할 때 사용
  • GROUPING_ID() 은 한눈에 데이터인지 합계인지 파악
    - 0이면 진짜 데이터, 1이면 총합계 데이터
  • CUBE()는 다차원 정보 데이터 요약(소합계)

0개의 댓글