티스토리 뷰
[ JOIN ] 두 개 이상의 테이블에서 행을 결합
JOIN절은 그들 사이의 관련 열을 기반으로, 두 개 이상의 테이블에서 행을 결합하는 데 사용 |
INNER JOIN두 테이블에서 일치하는 값을 가진 레코드를 선택 하는 다음 SQL 문( 포함 ) 을 만들 수 있습니다 . |
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDateFROM OrdersINNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID; |
(INNER) JOIN: 두 테이블에서 일치하는 값을 가진 레코드를 반환합니다. LEFT (OUTER) JOIN : 왼쪽 테이블의 모든 레코드를 반환하고 오른쪽 테이블의 일치하는 레코드를 반환합니다. RIGHT (OUTER) JOIN : 오른쪽 테이블의 모든 레코드를 반환하고 왼쪽 테이블의 일치하는 레코드를 반환합니다. FULL (OUTER) JOIN : 왼쪽 또는 오른쪽 테이블에 일치하는 항목이 있는 경우 모든 레코드를 반환합니다. |
[ INNER JOIN ] INNER JOIN두 테이블에서 일치하는 값이 키워드 선택 기록.
INNER JOIN 두 테이블에서 일치하는 값이 키워드 선택 기록. | |
SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name = table2.column_name; | |
고객 정보가 있는 모든 주문을 선택 | |
SELECT Orders.OrderID, Customers.CustomerNameFROM OrdersINNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID; | |
고객 및 배송업체 정보가 있는 모든 주문을 선택 | |
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperNameFROM ((OrdersINNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID); |
[ LEFT JOIN ]
LEFT JOIN 키워드 반환 왼쪽 테이블 (표 1)에서 모든 레코드, 오른쪽 테이블 (표 2)에서 일치하는 레코드. 일치하는 항목이 없는 경우 결과는 오른쪽에서 0개의 레코드입니다. | |
SELECT column_name(s)FROM table1LEFT JOIN table2ON table1.column_name = table2.column_name; | |
모든 고객과 고객이 가질 수 있는 모든 주문을 선택 | |
SELECT Customers.CustomerName, Orders.OrderIDFROM CustomersLEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerIDORDER BY Customers.CustomerName; | |
★ LEFT JOIN 키워드는 바로 테이블 (주문)에과 일치하는 데이터가 존재하지 않는 경우에도 왼쪽 테이블의 모든 레코드 (고객)을 반환합니다. |
[ RIGHT JOIN ]
RIGHT JOIN키워드 반환 우측 표 (표 2)에서 모든 기록, 왼쪽 테이블 (표 1)에서 일치하는 레코드. 일치하는 항목이 없는 경우 결과는 왼쪽부터 0개의 레코드입니다. | |
SELECT column_name(s)FROM table1RIGHT JOIN table2ON table1.column_name = table2.column_name; | |
모든 직원과 직원이 내린 모든 주문을 반환 | |
SELECT Orders.OrderID, Employees.LastName, Employees.FirstNameFROM OrdersRIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeIDORDER BY Orders.OrderID; | |
★ RIGHT JOIN 키워드 반환 우측 표 (직원)의 모든 기록, 왼쪽 테이블 (주문)에는 일치가없는 경우에도 오른쪽 테이블의 모든 레코드 (직원)을 반환합니다. |
[ FULL JOIN ]
FULL OUTER JOIN키워드 반환 왼쪽 (표 1) 또는 오른쪽 (표 2) 테이블 레코드에서 일치가 모든 레코드를. | |
SELECT column_name(s)FROM table1FULL OUTER JOIN table2ON table1.column_name = table2.column_nameWHERE condition; | |
모든 고객과 모든 주문을 선택 | |
SELECT Customers.CustomerName, Orders.OrderIDFROM CustomersFULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerIDORDER BY Customers.CustomerName; | |
★ FULL OUTER JOIN 키워드 수익률 다른 테이블과 일치 여부 두 테이블에서 일치하는 모든 기록. 따라서 "주문"에 일치하지 않는 행이 "고객"에 있거나 "고객"에 일치하지 않는 행이 "주문"에 있는 경우 해당 행도 나열됩니다. |
[ SELF JOIN ] 자체 조인은 일반 조인이지만 테이블은 자신과 조인
자체 조인은 일반 조인이지만 테이블은 자신과 조인 | SELECT column_name(s)FROM table1 T1, table1 T2WHERE condition; |
같은 도시에 있는 고객과 일치 | |
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.CityFROM Customers A, Customers BWHERE A.CustomerID <>B.CustomerIDAND A.City = B.CityORDER BY A.City; |
[ UNION ]
UNION 연산자는 두 개 이상의 결과 집합을 결합하는 데 사용되는 SELECT 문. SELECT안의 모든 명령문 UNION에는 동일한 수의 열이 있어야 합니다. 열에도 유사한 데이터 유형이 있어야 합니다. 모든 SELECT문의 열도 같은 순서여야 합니다. |
SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2; | |
UNION ALL 구문 UNION조작은 기본적으로 별개의 값을 선택한다. 중복 값을 허용하려면 다음을 사용하십시오 UNION ALL. |
SELECT column_name(s) FROM table1UNION ALLSELECT column_name(s) FROM table2; | |
UNION "Customers" 및 "Suppliers" 테이블 모두에서 도시(고유한 값만)를 반환 |
SELECT City FROM CustomersUNIONSELECT City FROM SuppliersORDER BY City; | |
UNION ALL "Customers" 및 "Suppliers" 테이블 모두에서 도시(중복 값도 포함)를 반환 |
SELECT City FROM CustomersUNION ALLSELECT City FROM SuppliersORDER BY City; | |
UNION With WHERE "Customers" 및 "Suppliers" 테이블 모두에서 독일 도시(고유한 값만)를 반환 |
SELECT City, Country FROM CustomersWHERE Country='Germany'UNIONSELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City; | |
UNION ALL With WHERE "Customers" 및 "Suppliers" 테이블 모두에서 독일 도시(중복 값도 포함)를 반환 |
SELECT City, Country FROM CustomersWHERE Country='Germany'UNION ALLSELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City; | |
Another UNION 모든 고객과 공급업체를 나열 |
SELECT 'Customer' AS Type, ContactName, City, CountryFROM CustomersUNIONSELECT 'Supplier', ContactName, City, CountryFROM Suppliers; |
[ GROUP BY ]
GROUP BY같이 요약 행에 같은 값이 문 그룹 행은 "각국의 고객의 수를 찾을 수 있습니다." 이 GROUP BY문은 하나 이상의 열로 결과 집합을 그룹화하기 위해 집계 함수( COUNT(), MAX(), MIN(), SUM(), AVG()) 와 함께 자주 사용됩니다 . |
SELECT column_name(s)FROM table_nameWHERE conditionGROUP BY column_name(s)ORDER BY column_name(s); | |
각 국가의 고객 수를 나열 | SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY Country; | |
높은 순으로 정렬된 각 국가의 고객 수를 나열 | SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY CountryORDER BY COUNT(CustomerID) DESC; | |
각 배송업체에서 보낸 주문 수를 나열 | SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM OrdersLEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperIDGROUP BY ShipperName; |
[ HAVING ]
HAVING때문에 절은 SQL에 추가 된 WHERE키워드가 집계 함수와 함께 사용할 수 없습니다. | SELECT column_name(s)FROM table_nameWHERE conditionGROUP BY column_name(s)HAVING conditionORDER BY column_name(s); | |
각 국가의 고객 수를 나열합니다. 고객이 5명 이상인 국가만 포함 | SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY CountryHAVING COUNT(CustomerID) > 5; | |
각 국가의 고객 수를 높은 순으로 정렬하여 나열합니다(5명 이상의 고객이 있는 국가만 포함). | SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY CountryHAVING COUNT(CustomerID) > 5ORDER BY COUNT(CustomerID) DESC; | |
10개 이상의 주문을 등록한 직원을 나열 | SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrdersFROM (OrdersINNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)GROUP BY LastNameHAVING COUNT(Orders.OrderID) > 10; | |
직원 "Davolio" 또는 "Fuller"가 25개 이상의 주문을 등록했는지 여부를 나열 | SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrdersFROM OrdersINNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeIDWHERE LastName = 'Davolio' OR LastName = 'Fuller'GROUP BY LastNameHAVING COUNT(Orders.OrderID) > 25; |
[ EXISTS ]
EXISTS 연산자 서브 쿼리의 모든 레코드의 존재를 테스트하는 데 사용된다. EXISTS 운영자 TRUE 반환 하위 쿼리가 하나 개 이상의 레코드를 반환합니다. |
SELECT column_name(s)FROM table_nameWHERE EXISTS(SELECT column_name FROM table_name WHERE condition); | |
TRUE를 반환하고 제품 가격이 20 미만인 공급자를 나열 | SELECT SupplierNameFROM SuppliersWHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20); | |
TRUE를 반환하고 제품 가격이 22인 공급자를 나열 | SELECT SupplierNameFROM SuppliersWHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22); |
[ ANY ]
ANY 연산자 : 결과로 부울 값을 반환합니다. 하위 쿼리 값 중 하나라도 조건을 충족하는 경우 TRUE를 반환합니다. ANY 범위의 값 중 하나에 대해 작업이 참인 경우 조건이 참임을 의미합니다. |
SELECT column_name(s)FROM table_nameWHERE column_name operator ANY (SELECT column_name FROM table_name WHERE condition); |
★ 주의 ) 표준 비교 연산자이어야 (=, <> =,>,> =, <또는 <=!). | |
OrderDetails 테이블에서 Quantity가 10인 레코드를 찾으면 ProductName을 나열합니다(Quantity 열에 일부 값이 10이기 때문에 TRUE가 반환됨). | SELECT ProductNameFROM ProductsWHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10); |
OrderDetails 테이블에서 Quantity가 99보다 큰 레코드를 찾으면 ProductName을 나열합니다(Quantity 열에 99보다 큰 값이 있기 때문에 TRUE가 반환됨). | SELECT ProductNameFROM ProductsWHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99); |
OrderDetails 테이블에서 Quantity가 1000보다 큰 레코드를 찾으면 ProductName을 나열합니다(Quantity 열에 1000보다 큰 값이 없기 때문에 FALSE를 반환함). | SELECT ProductNameFROM ProductsWHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 1000); |
[ ALL ]
ALL 연산자 : 결과로 부울 값을 반환합니다. 모든 하위 쿼리 값이 조건을 충족하면 TRUE를 반환합니다. 는 SELECT, WHERE및 HAVING문과 함께 사용됩니다 . ALL 범위의 모든 값에 대해 작업이 true인 경우에만 조건이 true임을 의미합니다. |
SELECT ALL column_name(s)FROM table_nameWHERE condition; |
WHERE 또는 HAVING이 있는 ALL 구문 | SELECT column_name(s)FROM table_nameWHERE column_name operator ALL (SELECT column_name FROM table_name WHERE condition); |
모든 제품 이름을 나열 | SELECT ALL ProductNameFROM ProductsWHERE TRUE; |
OrderDetails 테이블의 모든 레코드에 Quantity가 10인 경우 ProductName을 나열합니다. Quantity 열에 다양한 값(10의 값뿐만 아니라)이 있기 때문에 물론 FALSE를 반환 | SELECT ProductNameFROM ProductsWHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10); |
[ SELECT INTO ]
SELECT INTO새 테이블에 하나 개의 테이블에서 문 데이터를 복사합니다. | SELECT *INTO newtable [IN externaldb]FROM oldtableWHERE condition; |
일부 열만 새 테이블에 복사 | SELECT column1, column2, column3, ...INTO newtable [IN externaldb]FROM oldtableWHERE condition; |
고객의 백업 복사본을 생성 | SELECT * INTO CustomersBackup2017FROM Customers; |
IN절을 사용하여 테이블을 다른 데이터베이스의 새 테이블로 복사 | SELECT * INTO CustomersBackup2017 IN 'Backup.mdb'FROM Customers; |
몇 개의 열만 새 테이블에 복사 | SELECT CustomerName, ContactName INTO CustomersBackup2017FROM Customers; |
독일 고객만 새 테이블에 복사 | SELECT * INTO CustomersGermanyFROM CustomersWHERE Country = 'Germany' |
둘 이상의 테이블에서 새 테이블로 데이터를 복사 | SELECT Customers.CustomerName, Orders.OrderIDINTO CustomersOrderBackup2017FROM CustomersLEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; |
SELECT INTO 다른 스키마를 사용하여 비어 있는 새 테이블을 만드는 데 사용할 수도 있습니다. WHERE쿼리가 데이터를 반환하지 않도록 하는 절을 추가하기만 하면 됩니다. | SELECT * INTO newtableFROM oldtableWHERE 1 = 0; |
[ INSERT INTO SELECT ]
INSERT INTO SELECT다른 테이블에 문을 복사 한 테이블에서 데이터 삽입을. INSERT INTO SELECT문은 소스 및 목표 테이블의 경기에서 그 데이터 유형을 필요로한다. 참고: 대상 테이블의 기존 레코드는 영향을 받지 않습니다.※ 대상 테이블의 기존 레코드는 영향을 받지 않습니다. |
INSERT INTO table2SELECT * FROM table1WHERE condition; | |
한 테이블의 일부 열만 다른 테이블로 복사 | INSERT INTO table2 (column1, column2, column3, ...)SELECT column1, column2, column3, ...FROM table1WHERE condition; | |
"공급자"를 "고객"으로 복사합니다(데이터로 채워지지 않은 열에는 NULL이 포함됨). | INSERT INTO Customers (CustomerName, City, Country)SELECT SupplierName, City, Country FROM Suppliers; | |
"공급자"를 "고객"으로 복사합니다(모든 열 채우기). | INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers; | |
독일 공급자만 "고객"으로 복사 | INSERT INTO Customers (CustomerName, City, Country)SELECT SupplierName, City, Country FROM SuppliersWHERE Country='Germany'; |
[ CASE ]
CASE문은 조건을 통과하고 첫 번째 조건은 (if-then-else 명령문 등)을 충족하는 값을 반환합니다. 따라서 조건이 true이면 읽기를 중지하고 결과를 반환합니다. 조건이 참이 아니면 ELSE절의 값을 반환합니다 . 거기에 더없는 경우 ELSE부분에는 조건에 해당하지 않습니다, 그것은 NULL을 반환합니다. |
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE resultEND; | |
조건을 통과하고 첫 번째 조건이 충족될 때 값을 반환 | SELECT OrderID, Quantity,CASE WHEN Quantity > 30 THEN 'The quantity is greater than 30' WHEN Quantity = 30 THEN 'The quantity is 30' ELSE 'The quantity is under 30'END AS QuantityTextFROM OrderDetails; | |
City별로 고객을 주문합니다. 그러나 City가 NULL이면 국가별로 주문 | SELECT CustomerName, City, CountryFROM CustomersORDER BY(CASE WHEN City IS NULL THEN Country ELSE CityEND); |
'WEB > 기타' 카테고리의 다른 글
[SQL] DB 생성 구문 (0) | 2024.01.19 |
---|---|
[SQL] INSERT INTO, UPDATE, DELETE (0) | 2024.01.19 |
[SQL] SELECT (0) | 2024.01.19 |
중요한 SQL 명령 (0) | 2024.01.19 |
이클립스 yml , jsp 파일 메모장으로 열릴때 (0) | 2021.09.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JPA Repository query keywords
- 지마켓산스(Gmarket Sans)체 #지마켓산스 #Gmarketfont #GmarketSans #무료폰트 #타이틀폰트 #디자인폰트 #웹폰트
- 나눔폰트 #네이버글꼴 #네이버폰트 #고딕폰트 #본문폰트 #제목폰트 #무료폰트 #디자인폰트 #웹폰트
- SQL #SQLJOIN #JOIN #INNERJOIN #OUTERHJOIN
- thymeleaf
- JPA #JPARepository
- Hibernate #ORM
- JPA Auditing #JPA
- JPA #JPA설정
- JPA #
- SQL명령어 #SQL
- DB #DBCREATE #DBDROP #DBBAKUP
- JDBC #DBMS
- 프리텐다드폰트 #고딕폰트 #무료폰트 #타이틀용폰트 #고딕 #웹폰트 #디자인폰트
- DTO #Entity
- 세방고딕체 #웹폰트 #무료폰트 #무료웹폰트 #디자인폰트 #이벤트폰트 #디자인폰트 #타이틀용폰트
- jQuery #jQuery이미지슬라이드 #이미지슬라이드
- S-CoreDream
- SELETE
- 무료폰트 #무료웹폰트 #평창평화체 #평화체 #이벤트용서체 #이벤트서체 #디자인폰트
- JPA #JPAEntity #JPA연관관계
- Thymeleaf #타임리프
- SQL #INSERTINTO #DELETE #UPDATE
- S-Core
- ORM종류
- SELECTANY #SELECTALL
- SQL #TABLE생성 #SQL제약조건
- 이벤트폰트 #이벤트용폰트 #디자인폰트 #디자인서체 #웹폰트
- JPA #JPAEntity
- 카페24폰트 #무료폰트 #무료웹폰트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함