[MYSQL]SQL_1

ryudjae
|2021. 8. 21. 00:14
728x90

 

➡️SQL 기본

-SQL은 관계형 데이터 베이스에 표준 언어이다.

-SQL은 기능에 따라 데이터 정의어(DDL),데이터 조작어(DML),데이터 제어어(DCL)로 나뉜다.

  • 데이터 정의어 : 테이블이나 관계의 구조를 생성하는 데 사용하며 CREATE,ALTER,DROP 문 등이 있다.
  • 데이터 조작어 : 테이블에 데이터를 검색,삽입,수정,삭제하는 데 사용하며 SELECT,INSERT,DELETE,UPDATE 문 등이 있다. 여기서 SELECT 문은 질의어라고 부른다.
  • 데이터 제어어 : 데이터의 사용 권한을 관리하는 데 사용하며 GRANT,REVOKE 문 등이 있다.

 

➡️데이터 조작어 -검색

-SQL에서 SELETE 문은 데이터를 검색하는 기본 문장으로, 특별히 질의어라고 부른다.

-SELECT 문은 검색한 결과를 테이블 형태로 출력한다.

-SELECT 문의 문장 프레임 워크는 다음과 같다.

SELECT : 질의 결과 추출되는 속성 리스트를 열거한다.
FROM : 질의에 어느 테이블이 사용되는지 열거한다.

WHERE : 질의의 조건을 작성한다.

-예로 다음과 같이 작성할 수 있다.(ex_ "10000원 이상인 도서의 이름과 출판사를 보이시오.")

SELECT bookname,publisher (속성 이름)

FROM Book                               (테이블 이름)

WHERE price >= 10000;         (검색 조건)

 

SELECT 문의 기본 문법은 다음과 같다.

SELECT [ALL | DISTINCT]속성이름(들)
FROM      테이블이름
WHERE     검색조건(들)
GROUP BY     속성이름
HAVING       검색조건(들)
ORDER BY      속성이름[ASC | DESC]

SELECT와 FROM을 제외하고 나머지 문법들은 선택적으로 사용할 수 있다.
| : 는 선택 가능한 문법들 중 한 개를 사용할 수 있다.

예제에 사용할 테이블 3개

👉WHERE

(ex_ "가격이 10000원 이상 20000원 이하인 도서를 검색하세요.")
SELECT * 

FROM Book
WHERE price >= 10000 AND price <= 20000

;



(ex_ "출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하세요.")
SELECT * 
FROM Book
WHERE publisher IN('굿스포츠','대한미디어')





(ex_ "도서이름에 '축구'가  포함된 출판사를 검색하세요.")
SELECT bookname,publisher
FROM Book
WHERE bookname LIKE '%축구%';



👉ORDER BY

(ex_ "도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하세요.")
SELECT *
FROM Book
ORDER BY price,bookname;




(ex_ "도서의 가격을 내림차순으로 검색하고, 만약 가격이 같다면 출판사의 오름차순으로 출력하세요.")

SELECT *
FROM Book
ORDER BY price DESC,publisher ASC;  (DESC: 내림차순 ASC: 오름차순)

👉GROUP BY (+집계 함수)

(ex_ "고객이 주문한 도서의 총 판매액을 구하시오")
SELECT SUM(saleprice) AS 총매출              ||(AS: 의미있는 열 이름을 출력하려고 할때 별칭을 사용한다.)
FROM  Orders;


(ex_ "2번 김연아 고객의 주문한 도서의 총 판매액을 구하시오")

SELECT SUM(saleprice) 
FROM  Orders
WHERE custid =2;


(ex_ "고객별로 주문한 도서의 총 수량과 총 판매액을 구하시오.")
SELECT custid,COUNT(*),SUM(saleprice)
FROM Orders
GROUP BY custid;


👉HAVING (+ HAVING 절은  GROUP BY절의 결과 나타나는 그룹을 제어하는 역할을 한다.)

(ex_"가격이 8000원이상인 도서를 구매한 고객에 대하여 고객별로 주문 도서의 총 수량을 수하시오. 단 , 두권 이상 구매한 고객만 구하시오")
SELECT custid,COUNT(*)
FROM  Orders
WHERE saleprice >= 8000
GROUP BY custid
HAVING count(*) >=2 ; 

 

➕두 개 이상 테이블에서 SQL 질의 ➕

(ex_"고객별로 주문한 모든 도서의 총 판매액을 구하고 ,고객별로 정렬하세요.")
SELECT name,SUM(saleprice)
FROM Customer,Orders
WHERE Customer.custid=Orders.custid
GROUP BY Customer.name
ORDER BY Customer.name;


(ex_"고객의 이름과 고객이 주문한 도서의 이름을 구하시오.")

SELECT Customer.name,Book.bookname
FROM Customer,Orders,Book
WHERE Customer.custid = Orders.custid AND Orders.bookid = Book.bookid;


(ex_"가격이 20000원인 도서를 주문한 고객의 이름과 도서의 이름을 구하시오.")

SELECT Customer.name, Book.bookname
FROM Customer,Orders,Book
WHERE Customer.custid=Orders.custid AND Orders.bookid=Book.bookid AND Book.price=20000;


(ex_"가장 비싼 도서의 이름을 보이시오.")

SELECT bookname
FROM Book
WHERE price = (SELECT MAX(price)FROM Book);


(ex_"도서를 구매한 적이 있는 고객의 이름을 검색하세요.")

SELECT name
FROM Customer
WHERE custid IN(SELECT custid
                               FROM Orders);


(ex_"대한민국에서 거주하는 고객의 이름과 도서의 주문한 고객의 이름을 보이시오.")

SELECT name 
FROM Customer 
WHERE address LIKE"%대한민국%"
UNION
SELECT name
FROM Customer
WHERE custid IN(SELECT custid FROM Orders);


 

728x90

'Dev > Database' 카테고리의 다른 글

[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[DB] 정규화(Normalization)  (0) 2021.09.11
Redis란?  (1) 2021.08.16
데이터 베이스 시스템 개념  (0) 2021.07.20
DBMS란 무엇인가  (0) 2021.07.11