# Learn SQL
## SYNTAX
### SELECT
```sql=
SELECT * FROM Customers
```
Lấy tất cả các cột của bảng Customers
### SELECT DISTINCT
```sql=
SELECT DISTINCT Country FROM Customers;
```
Loại bỏ trùng lắp dữ liệu cột Country của bảng Customers
### BETWEEN
```sql=
SELECT * FROM Products
WHERE Price BETWEEN 50 AND 60;
```
Điều kiện giá trị cột Price nằm trong khoảng giá từ 50 đến 60
### IN
```sql=
SELECT * FROM Customers
WHERE City IN ('Paris','London');
```
Điều kiện giá trị cột City thỏa 2 trường hợp 'Paris' và 'London'
### ORDER BY
```sql=
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
```
Sắp xếp cột Country theo thứ tự alphabet và ngược thứ tự alphabet
`ASC -> Ascending`
`DESC -> Descending`
### INSERT INTO
```sql=
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
```
### NULL VALUES
```sql=
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
```
```sql=
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
```
### UPDATE
```sql=
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
```
`Be careful when updating records. If you omit the WHERE clause, ALL records will be updated!`
### DELETE
```sql=
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
```
Xóa dữ liệu trong bảng với điều kiện
```sql=
DELETE FROM Customers;
```
Xóa cả bảng
## TOP, LIMIT and FIRST
### TOP
```sql=
SELECT TOP 3 * FROM Customers;
```
Lấy ra 3 hàng dữ liệu -> Dùng cho Sql server
TOP sẽ không hỗ trợ trên my sql
### LIMIT
```sql=
SELECT * FROM Customers
LIMIT 3;
```
Lấy ra 3 hàng dữ liệu -> Dùng cho My sql
### FIRST
```sql=
SELECT * FROM Customers
WHERE Country='Germany'
FETCH FIRST 3 ROWS ONLY;
```
-> Dùng cho Oracle
## COUNT(), AVG() and SUM()
### COUNT()
```sql=
SELECT COUNT(ProductID)
FROM Products;
```
| COUNT(ProductID) |
| -------- |
| 7 |
### AVG()
```sql=
SELECT AVG(Price)
FROM Products;
```
| AVG(Price) |
| -------- |
| 28.866363636363637 |
Tính trung bình cộng cột Price
### SUM()
```sql=
SELECT SUM(Quantity)
FROM OrderDetails;
```
| SUM(Quantity) |
| -------- |
| 12743 |
Tính tổng giá trị cột Quantity
### LIKE
```sql=
SELECT * FROM Customers
WHERE City LIKE 's%';
```
Điều kiện giá trị cột City bắt đầu bằng chữ **s**
```sql=
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
```
Điều kiện giá trị cột CustomerName kết thúc bằng chữ **a**
```sql=
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
```
Điều kiện giá trị cột CustomerName có chứa **or** ở giữa
```sql=
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
```
Điều kiện giá trị cột CustomerName có chứa **r** ở ví trí thứ 2 và có ít nhất 2 chữ cái
```sql=
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';
```
Điều kiện giá trị cột CustomerName có chứa **a** ở đầu và có ít nhất 3 chữa cái
```sql=
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
```
Điều kiện giá trị cột CustomerName bắt đầu bằng **a** và kết thúc bằng **o**
```sql=
SELECT * FROM Customers
WHERE ContactName LIKE '[acs]%';
```
Điều kiện giá trị cột CustomerName bắt đầu bằng **a** hoặc **c** hoặc **s**
```sql=
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
```
Điều kiện giá trị cột CustomerName không chứa **a** ở đầu
## AS
->ALIAS
Dùng khi muốn hiện thị tên gọn hơn
## JOIN
### (INNER) JOIN

```sql=
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
```
### LEFT (OUTER) JOIN

```sql=
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
```
### RIGHT (OUTER) JOIN

```sql=
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
```
### FULL (OUTER) JOIN

```sql=
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
```
### SELF JOIN
```sql=
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
```
## DATABASE
### CREATE TABLE
``` sql=
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
```
## STORED PROCEDURE
### CREATE
``` sql=
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City
AND PostalCode = @PostalCode
GO;
```
### EXEC
``` sql=
EXEC SelectAllCustomers;
```