Programming-[Backend]/SQL

SQL / Tutorial

컴퓨터 탐험가 찰리 2020. 10. 21. 11:31
728x90
반응형

SQL (Structured Query Language)

데이터베이스용 프로그래밍 언어.

 

Query

저장되어 있는 정보를 필터링 하기 위한 질문. 예시로는 검색창에 적는 검색어.

데이터베이스에 쿼리를 보내면 원하는 데이터를 뽑아올 수 있다.

 

 

 

https://www.w3schools.com/sql/default.asp

 

 

명령문 SLELCT, FROM

ex1)

SELECT * FROM Customers;

Customers 라는 테이블(시트)에서 모든 열을 선택하라

 

ex2)

SELECT CustomerName, City FROM Customers;

Customers 테이블에서 CustomerName, City 열을 선택하라

 

명령문 DISTINCT

1.SELECT Country FROM Customers

2. SELELCT DISTINCT Country FROM Customers

 

1의 경우에는 같은 이름의 Country가 있더라도 어쨌든 행의 갯수만큼 해당 열을 모두 출력하지만, 2는 같은 이름의 Country가 있으면 따로 출력하지 않는다. 중복되는 값을 제거하고 해당 열을 출력해준다.

명령문 WHERE

조건문을 지정해줄 수 있다.

ex)

SELECT * FROM Customers
WHERE CustomerID=1;

 

WHERE 명령문에 쓰이는 연산자는 다음과 같다.

AND, OR, NOT 연산자

WHERE 조건문에 쓸 수 있는 논리연산자들이다.

 

ex)

SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

 

ex)

SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');

 

ex)

SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';

 

ORDER BY

해당열을  기준으로 오름차순 또는 내림차순으로 테이블을 정렬해준다.

 

ex) Country 열을 기준으로 오름차순으로 정렬SELECT * FROM Customers
ORDER BY Country;

 

ex) 내림차순(DESC, Descending)SELECT * FROM Customers
ORDER BY Country DESC;

 

ex) 여러 열 선택 : 아래 예시는 Country 기준으로 오름차순으로 정렬하되, 같은 Country를 갖는 행이 있다면 CustomerName으로 정렬하는 예시이다.SELECT * FROM Customers
ORDER BY Country, CustomerName;

 

ex) 혼합SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

 

INSERT INTO - VALUES

원하는 테이블의 각 Column에 해당하는 value 값을 새로 넣어준다.

 

ex)INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

 

ex) 따로 지정한 값이 없다면  value는 null로 표시된다.

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

 

 

NULL

Null은 value가 없다는 것을 뜻하며, IS NULL, IS NOT NULL을 통해 값을 검사할 수 있다.

ex)

SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

 

UPDATE - SET 

원하는 Table의 column의 value를 바꿔준다.

UPDATE : 테이블 지정

SET : column, value 지정

ex)

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;

 

DELETE

 

ex) 아래 Database에서 1열(CustomerName = 'Alfreds Futterkiste'인 열)을 삭제한다.

DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';

 

ex) 테이블 삭제

DELETE FROM Customers;

 

 

COUTN, AVG, SUM

엑셀과 같은 논리이다.

 

syntax

SELECT COUNT(column_name)
FROM table_name
WHERE condition;

 

SELECT AVG(column_name)
FROM table_name
WHERE condition;

 

SELECT SUM(column_name)
FROM table_name
WHERE condition

 

LIKE

WHERE에 쓰이는 연산자로, %, _ wildcard를 통해 사용된다. 마치 검색창에 특정 문구를 포함하는 검색어를 입력할 때와 비슷한 논리이다.

 

 

WildCards

 

 

Aliases

뜻 자체가 '별명', '가명' 이다. 특정 열의 이름을 임시적으로 보기 편하도록 바꾸어 데이터를 표현해준다.

 

ex) 원래 CustomerID인 열의 이름을 ID로, CustomerName인 열의 이름을 Customer로 표기한다.

SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;

 

ex) + 연산자나 CONCAT을 이용하여 각 열들의 값을 합쳐서 표기할 수 있다.

SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

 

ex) 각 테이블에서 WHERE 조건을 찾을 때, Alias를 이용하여 각 테이블의 이름을 줄여서 표현할 수 있다.

Customers 테이블을 c로 줄이고, c에서 CustomerName 열을 조회하고,

Orders 테이블을 o로 줄이고, o에서 OrderId와 OrderDate 열을 조회하여

WHERE 조건에 맞는 데이터를 찾아낸다.

 

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;

 

 

JOINS

두 개의 테이블을 비교하여 공통된 조건에 따른 데이터를 추출해준다.

 

ex) SELECT에 해당하는 항목을 출력하는데,

Orders 테이블과 Customers 테이블을 비교하여 각 테이블에서의 CustomerID가 일치하는 경우에만 SELECT에 해당하는 데이터를 출력한다.

 

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

 

INNER JOIN이 가장 많이 쓰이지만, 그 외 다른 type의 join도 사용할 수 있다.

table1을 FROM 뒤에, table2를 INNER JOIN 뒤에 쓴다.

 

Group By

Group으로 묶길 원하는 인자로 데이터를 묶어서 표시한다.

 

ex)

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;

 

 

728x90
반응형