今天在W3school学习了SQL的Tutorial,便把要点记上一记。本文可以作为tutorial的类似等价物或者 Cheat Sheet,在忘记语法时可以作为参考。
话不多说,开始介绍 SQL的语法咯~
SQL,全名 Structured Query Language,是一种用于改写、读写数据库的标准语言。不过SQL的版本有许多种,例如 MySQL, SQL Server, and MS Access。尽管它们各自的语法有一些微妙的不同,它们仍然有许多共通之处。例如 SELECT, UPDATE, DELETE, INSERT, WHERE。
-- 语法格式
SELECT column1, column2, ...
FROM table_name;```
-- 例子
-- 选取所有数据
SELECT * FROM Customers;
--从Customers中选取 Column名为 CustomerName, City的数据
SELECT CustomerName, City FROM Customers;
如果希望选取不同的元素,使用 DISTINCT
-- 语法格式
SELECT DISTINCT column1, column2, ...
FROM table_name;
-- 实例:
SELECT DISTINCT Country FROM Customers;
如果希望加上其它筛选条件:
-- 语法格式
SELECT column1, column2, ...
FROM table_name
WHERE condition;
-- 实例:
SELECT * FROM Customers
WHERE Country='Mexico';
-- 注意,当筛选条件为 Numerical(数字)的时候,可以省略引号
SELECT * FROM Customers
WHERE CustomerID=1; -- This is equivalent to CustomerID="1"
值得一提的是,我们对于WHERE里的 Condition有如下合法操作:
Operator | Description |
---|---|
= | Equal |
> | Greater than |
< | Less than |
>= | Greater than or equal |
<= | Less than or equal |
<> | Not equal. Note: In some versions of SQL this operator may be written as != |
BETWEEN | Between a certain range |
LIKE | Search for a pattern |
IN | To specify multiple possible values for a column |
为了更好地 Filter数据,我们在 condition里面可以通过 AND, OR, NOT的操作来缩小/扩大筛选范围。
-- AND 例子
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
-- OR 例子
SELECT * FROM Customers
WHERE City='Berlin' OR City='München';
-- NOT 例子
SELECT * FROM Customers
WHERE NOT Country='Germany'; -- This is equivalent to: WHERE Country <> 'Germany'
-- 当然,这三个操作可以合并起来使用。例如:
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');
我们常常会遇到需要将数据按照某个标准排序的需求。这就要我们使用 Order by了
-- 语法格式
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
-- by ascending(ASC) order or descending(DESC) order
-- 例子:
SELECT * FROM Customers
ORDER BY Country;
-- 默认排序方式是从小到大或者从 A到Z。故此语句等同于 ORDER BY Country ASC
SELECT * FROM Customers
ORDER BY Country DESC; -- 按照字母表降序排列
在讨论了通过某一 Column排序之后,我们讨论如何通过多个 Column排序。这样的需求是可能的,例如:在对顾客通过年龄排序后,我们希望通过首字母降序/升序排列。
-- 例子
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
在我们获得新的数据后,有写入数据库的需求。
-- 语法格式
-- 在特定的 column插入对应值
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
-- 如果所有 column都有可以插入的值(或:值不缺失)
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
-- 例子:
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
注意,如果我们在写入数据时,某一行有数据缺失,那么该 entry将会得到 null value。它不支持 Comparison Operators 例如 >, <, <>。
对 null value可以做的合法操作:
-- IS NULL
FROM Customers
WHERE Address IS NULL;
-- IS NOT NULL
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
-- For MySQL, use IFNULL function, which returns the set default value if the argument is NULL
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
修改数据库。
-- 语法格式
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
-- 例子:将 CustomerID为1的 record的 ContactName和 City修改
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
-- 例子:将 Country为'Mexico'的 record的 ContactName修改 (可能不止一个 record)
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
WARNING: 如果丢失 WHERE condition, 语句会改写所有数据!!!
删除数据库中已有的数据。
-- 语法格式
DELETE FROM table_name WHERE condition;
-- 例子
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
-- 我们也可以删除 所有数据:
-- 语法格式
DELETE FROM table_name;
-- 实例
DELETE FROM Customers;
对于 SQL Syntax的基础语法介绍就先到这里。下一篇文章会谈一谈(稍微更加)advanced的SQL语法。
出处:https://www.w3schools.com/sql/default.asp
(本文全篇 Credit to W3School,仅仅是原Tutorial的重新整理罢了)