-
Database & SQL
- SQL: Structured Query Language, 구조화된 Query 언어
- Qurery : "질의문", 가장 친숙한 예시로는 검색창에 적는 검색어도 쿼리의 일종, 저장되어있는 정보를 필터 하기 위한 질문
- SQL: 데이터베이스 용 프로그래밍 언어, 데이터베이스에 쿼리를 보내 원하는 데이터를 뽑아올 수 있다.
SQL 키워드는 대소 문자를 구분하지 않고 select는 SELECT와 동일하고, 일부 데이터베이스 시스템에서는 각 SQL 문 끝에 세미콜론이 필요하다. 세미콜론은 서버에 대한 동일한 호출에서 둘 이상의 SQL 문을 실행할 수 있도록 데이터베이스 시스템에서 각 SQL 문을 분리하는 표준 방법이다.
중요한 SQL 명령 중 일부
SELECT 데이터베이스에서 데이터 추출 UPDATE 데이터베이스의 데이터를 업데이트 DELETE 데이터베이스에서 데이터를 삭제 INSERT INTO 데이터베이스에 새 데이터를 삽입 CREATE DATABASE 새 데이터베이스 생성 ALTER DATABASE 데이터베이스 수정 CREATE TABLE 새 테이블 생성 ALTER TABLE 테이블 수정 DROP TABLE 테이블 삭제 CREATE INDEX 색인 생성 (검색 키) DROP INDEX 인덱스 삭제 1. SELECT
SELECT * FROM Customers; "Customers"테이블에서 모든 열을 선택 SELECT CustomerName, City FROM Customers; "Customers"테이블에서 "CustomerName"및 "City"열을 선택 SELECT * FROM table_name; 테이블에서 사용 가능한 모든 필드를 선택 SELECT Country FROM Customers; "Customers"테이블의 "Country"열에서 ALL (중복 포함) 값을 선택 SELECT DISTINCT Country FROM Customers; "Customers"테이블의 "Country"열에서 DISTINCT 값 SELECT COUNT(DISTINCT Country) FROM Customers; SQL 문은 서로 다른 (고유 한) 고객 국가의 수를 나열 2. WHERE
레코드를 필터링하는 데 사용되고, 지정된 조건을 충족하는 레코드만 추출하는 데 사용된다.
SELECT * FROM Customers
WHERE Country='Mexico';"Customers"테이블에서 "Mexico"국가의 모든 고객을 선택 SQL은 텍스트 값을 작은따옴표로 묶어야 한다. (대부분의 데이터베이스 시스템에서는 큰 따옴표도 허용).
그러나 숫자 필드는 따옴표로 묶어서는 안 된다.
WHERE 절의 연산자
<> 다름 BETWEEN 범위 지정하여 조회 SELECT * FROM Products WHERE Price
BETWEEN 10 AND 50LIKE 특정 문자열이 포함된 데이터를 조회 SELECT * FROM Customers WHERE City
LIKE 's%';IN 특정 문자열 여러개를 조회 SELECT * FROM Customers WHERE City
IN ('Paris','London');3. AND, OR, NOT
AND 및 OR 연산자는 둘 이상의 조건에 따라 필터링하는 데 사용된다.
- AND 연산자는 AND로 구분된 모든 조건이 TRUE 인 경우 표시
- OR 연산자는 OR로 구분된 조건이 TRUE 인 경우 표시
- NOT 연산자는 조건이 TRUE가 아닌 경우 표시
4. ORDER BY
결과 집합을 오름차순 또는 내림차순으로 정렬하는 데 사용, 기본적으로 오름차순으로 정렬한다.
(내림차순으로 정렬하려면 DESC 키워드를 사용)SELECT * FROM Customers ORDER BY Country; "국가"열을 기준으로 정렬된 "고객"테이블에서 모든 고객을 선택 SELECT * FROM Customers ORDER BY Country DESC; "국가"열을 기준으로 내림차순으로 정렬된 "고객"테이블에서 모든 고객을 선택 SELECT * FROM Customers ORDER BY Country, CustomerName; "Country"및 "CustomerName"열을 기준으로 정렬된 "Customers"테이블에서 모든 고객을 선택. 즉, 국가별로 정렬하지만 일부 행에 동일한 국가가 있는 경우 CustomerName별로 정렬 SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC; "국가"를 기준으로 오름차순으로 정렬하고 "CustomerName"열을 기준으로 내림차순으로 정렬된 "고객"테이블에서 모든 고객을 선택 5. INSERT INTO
테이블에 새 레코드를 삽입하는 데 사용, CustomerID 열은 자동 증가 필드이며 새 레코드가 테이블에 삽입될 때 자동으로 생성
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');"Customers"테이블에 새 레코드를 삽입 6. NULL Values
NULL 값이 있는 필드는 값이 없는 필드
테이블의 필드가 선택 사항인 경우에 필드에 값을 추가하지 않고 새 레코드를 삽입하거나 레코드를 업데이트할 수 있다. 그러면 필드가 NULL 값으로 저장된다.
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;"주소"필드에 NULL 값이 있는 모든 고객을 나열 7. UPDATE
테이블의 기존 레코드를 수정하는 데 사용.
WHERE 절은 업데이트해야 하는 레코드를 지정한다. WHERE 절을 생략하면 테이블의 모든 레코드가 업데이트된다.
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';Country가 "Mexico"인 모든 레코드에 대해 연락처 이름을 "Juan"으로 업데이트 8. DELETE
테이블의 기존 레코드를 삭제하는 데 사용
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste'; "Customers"테이블에서 "Alfreds Futterkiste"고객을 삭제 DELETE FROM Customers; 테이블을 삭제하지 않고 "Customers"테이블의 모든 행을 삭제 9. COUNT
지정된 기준과 일치하는 행 수를 반환
10. LIKE
WHERE 절에서 열에서 지정된 패턴을 검색하는 데 사용
LIKE 연산자와 함께 자주 사용되는 두 개의 와일드카드가 있다.
- %-백분율 기호는 0, 1 또는 여러 문자를 나타냄
- _-밑줄은 단일 문자를 나타냄
LIKE 연산자
WHERE CustomerName LIKE 'a%' "a"로 시작하는 CustomerName WHERE CustomerName LIKE '%a' "a"로 끝나는 WHERE CustomerName LIKE '%or%' 임의의 위치에 있는 "or" WHERE CustomerName LIKE '_r%' 두번째 위치에 "r"이 있는 WHERE CustomerName LIKE 'a_%' "a"로 시작하고 길이 2 WHERE CustomerName LIKE 'a__%' "a"로 시작하고 길이 3 WHERE ContactName LIKE 'a%o' "a"로 시작하고 끝이"o" 11. WILDCARDS
와일드카드 문자는 문자열에서 하나 이상의 문자를 대체하는 데 사용된다.
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';도시가 "L"로 시작하고 그 뒤에 임의의 문자, "n", 임의의 문자, "on"이 차례로 오는 모든 고객을 선택 SELECT * FROM Customers
WHERE City LIKE '[bsp]%';도시가 "b", "s"또는 "p"로 시작하는 모든 고객을 선택 SELECT * FROM Customers
WHERE City LIKE '[a-c]%';도시가 "a", "b"또는 "c"로 시작하는 모든 고객을 선택 SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';도시가 "b", "s"또는 "p"로 시작하지 않는 모든 고객을 선택 12. ALIASES
테이블 또는 테이블의 열에 별칭을 만들어 더 읽기 쉽게 만드는 데 사용된다.
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;CustomerID 열과 CustomerName 열에 각각 하나씩 두 개의 별칭을 만듦 SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;CustomerName 열과 ContactName 열에 각각 하나씩 두 개의 별칭을 만듦
(별칭 이름에 공백이 포함된 경우 큰 따옴표 또는 대괄호가 필요)SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;4 개의 열 (Address, PostalCode, City 및 Country)을 결합하는 "Address"라는 별칭을 만듦 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;CustomerID = 4 (Around the Horn)인 고객의 모든 주문을 선택 "Customers"및 "Orders"테이블을 사용하고 각각 "c"및 "o"의 테이블 별칭을 제공 (여기서는 별칭을 사용하여 SQL을 더 짧게 만듦) SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;별칭 없이 사용 13. JOIN
JOIN 절은 둘 이상의 테이블 사이의 관련 열을 기반으로 행을 결합하는 데 사용
"Orders"테이블의 "CustomerID"열은 "Customers"테이블의 "CustomerID"를 참조
위의 두 테이블 간의 관계는 "CustomerID"열
그런 다음 두 테이블에서 일치하는 값이 있는 레코드를 선택하는 다음 SQL 문 (INNER JOIN 포함)을 만들 수 있다.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;- (INNER) JOIN : 두 테이블의 값이 일치하는 레코드를 반환
- LEFT (OUTER) JOIN : 왼쪽 테이블에서 모든 레코드를 반환하고 오른쪽 테이블에서 일치하는 레코드를 반환
- RIGHT (OUTER) JOIN : 오른쪽 테이블에서 모든 레코드를 반환하고 왼쪽 테이블에서 일치하는 레코드를 반환
- FULL (OUTER) JOIN : 왼쪽 또는 오른쪽 테이블에 일치하는 항목이 있으면 모든 레코드를 반환
14. GROUP BY
GROUP BY 문은 "각 국가의 고객 수 찾기"와 같이 동일한 값을 가진 행을 요약 행으로 그룹화한다.
GROUP BY 문은 종종 집계 함수 (COUNT, MAX, MIN, SUM, AVG)와 함께 사용되어 결과 집합을 하나 이상의 열로 그룹화한다.
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);각 국가의 고객 수를 나열 SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;각 국가의 고객 수를 높은 순으로 정렬하여 나열 'Note' 카테고리의 다른 글
서버 사이드 렌더링, 클라이언트 사이드 렌더링 (0) 2020.12.06 React Router(v4) (0) 2020.12.06 MVC, Flux (0) 2020.11.23 CSS basic box model (0) 2020.11.21 JSX 조건부 렌더링 (0) 2020.11.20