目录
SQL SELECT 语法
SELECT 语法用于从数据库中选择数据。 返回的数据存储在结果表中,称为结果集。
在任何SQL查询语句中都:SELECT和FROM必须按顺序排列。SELECT指示要查看哪些列,FROM标识它们所在的表。
SELECT column1, column2, ... #column表示表中所要选的字段名称
FROM table_name;
#用* 选择表中可用的所有字段
SELECT * FROM table_name;
演示:Northwind 样本数据库“Customers”表
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
SELECT City FROM Customers;
SELECT CustomerName, City FROM Customers; #注:选择多列时,需用逗号分隔,最后一列后不加逗号
SELECT * FROM Customers; #从 "Customers" 表中选取所有列
SQL SELECT DISTINCT(选择不同) 语法
在一张表内,一列通常包含许多重复的值; 有时你只想列出不同的(different)值。SELECT DISTINCT语句用于仅返回不同的(different)值。
SELECT Country FROM Customers;
#返回为:
Country
Germany
Mexico
Mexico
UK
Sweden
SELECT DISTINCT Country FROM Customers;
#返回为:
Country
Germany
Mexico
UK
Sweden
SELECT COUNT(DISTINCT Country) FROM Customers; #不同(distinct)国家的数量
#注:Microsoft Access数据库中不支持COUNT(DISTINCT column_name)。
LIMIT 关键字
默认情况下,将返回所有符合 SQL 语句中指定条件的结果。
但是,有时候我们只需要检索记录的一个子集。在 MySQL 中,这是通过使用 LIMIT 关键字来完成的。
SELECT column list FROM table_name
LIMIT [number of records];
#举例:选择 “customers” 表中的前6 个记录
SELECT ID, FirstName, LastName, City
FROM customers LIMIT 6;
SQL WHERE Clause子句
WHERE 子句用于过滤记录。WHERE 子句用于提取满足指定标准的记录。
SELECT column1, column2, ... FROM table_name
WHERE condition;
#WHERE子句不仅用于SELECT语法,还用于UPDATE,DELETE语法等!
#update + where
UPDATE "table_name"
SET "column_1" = [new value]
WHERE "condition";
#delete + where
DELETE FROM "table_name"
WHERE "condition";
文本字段与数值字段
SQL在文本值周围使用单引号(大多数数据库系统也接受双引号)。如果是数值字段,则不要使用引号。
#文本字段需用单引号‘’
SELECT * FROM Customers
WHERE Country='Mexico' OR PostalCode='05021';
#数值字段,不用引号
SELECT * FROM Customers
WHERE CustomerID=1;
WHERE子句中可以使用以下运算符:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。 注意:在某些版本的SQL中,这个操作符可能写成!= |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 为列指定多个可能的值 |
SQL AND & OR and NOT 运算符
AND&OR运算符用于根据一个以上的条件过滤记录,即用于组合多个条件以缩小SQL语句中的数据。
WHERE子句可以与AND,OR和NOT运算符结合使用。组合AND和OR或NOT使用时,用括号()表示组成成复杂的表达式。
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
SELECT * FROM Customers
WHERE City='Berlin' OR City='München';
SELECT * FROM Customers
WHERE NOT Country='Germany';
SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
SQL ORDER BY Keyword(按关键字排序)
ORDER BY 用于按升序或降序对结果集进行排序(默认为升序),如果要按降序对记录进行排序,使用DESC关键字。
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
SQL INSERT INTO 语句(在表中插入)
INSERT INTO 语句可以用两种形式编写。
1、没有指定要插入数据的列的名称,只提供要插入的值,即添加新的一行的数据:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
#CustomerID列是一个自动递增字段,在将新记录插入到表中时自动生成
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');
2、为表中的所有列添加值,就不需要在SQL查询中指定列名称。插入时,要确保值的顺序与表中的列顺序相同。
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
使用另一个表填充一个表
可以通过另一个表上的SELECT语句查询出来的字段值,然后将数据填充到本表中,条件是另一个表所查询的字段与本表要插入数据的字段是一一对应的。
INSERT INTO first_table_name [(column1, column2, ... columnN)]
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];
SQL NULL Values(空值)
据表中的 NULL 值表示该值所处的字段为空。具有NULL值的字段是没有值的字段。如果表中的字段是可选的,则可以插入新记录或更新记录而不向该字段添加值。然后,该字段将被保存为NULL值。值为 NULL 的字段没有值。
注意:NULL 值与 0 或者包含空白(spaces)的字段是不同的!
问题:如何测试Null值?
使用IS NULL和IS NOT NULL运算符。
ID | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Doe | John | 542 W. 27th Street | New York |
2 | Bloggs | Joe | London | |
3 | Roe | Jane | New York | |
4 | Smith | John | 110 Bishopsgate | London |
#IS NOT NULL运算符
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NULL;
结果集将如下所示:
LastName | FirstName | Address |
---|---|---|
Bloggs | Joe | |
Roe | Jane |
#IS NOT NULL运算符
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NOT NULL;
结果集将如下所示:
LastName | FirstName | Address |
---|---|---|
Doe | John | 542 W. 27th Street |
Smith | John | 110 Bishopsgate |
创建表的时候,NULL 的基本语法如下:
SQL> CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
#NOT NULL表示对于给定列,必须按照其数据类型明确赋值。
有两列并没有使用 NOT NULL 来限定,也就是说这些列可以为 NULL。
NULL 值会给选取数据带来麻烦。不过,因为 NULL 和其他任何值作比较,其结果总是未知的,所以含有 NULL 的记录不会包含在最终结果里面。
必须使用 IS NULL 或者 IS NOT NULL 来检测某个字段是否为 NULL。使用方法见上。
SQL UPDATE 语句(更新表中的记录)
UPDATE 语句用于更新表中已存在的记录。还可以使用AND或OR运算符组合多个条件。
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
#WHERE子句指定哪些记录需要更新。如果省略WHERE子句,所有记录都将更新!
#实例1
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
#实例2:更新多个记录(WHERE子句决定将要更新的记录数量)
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
SQL Delete 语句(删除表中的记录)
DELETE语句用于删除表中现有记录。
DELETE FROM table_name
WHERE condition;
#WHERE子句指定需要删除哪些记录。
如果省略了WHERE子句,表中所有记录都将被删!
#实例1
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
#实例2:删除所有数据(但保留表,即表的结构、属性和索引保持不变)
DELETE FROM table_name; #表述1
DELETE * FROM table_name; #表述2
在没有备份的情况下,删除记录要格外小心!因为删除了不能重复!
SQL 运算符
运算符是保留字或主要用于SQL语句的WHERE子句中的字符,用于执行操作,例如:比较和算术运算。 这些运算符用于指定SQL语句中的条件,并用作语句中多个条件的连词。常见运算符有以下几种:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 否定条件运算符
SQL算术运算符
运算符 | 描述 | 例子(设a=10,b=20) |
---|---|---|
+ | 加法,执行加法运算。 | a + b 得到 30 |
- | 减法,执行减法运算。 | a - b 得到 -10 |
* | 乘法,执行乘法运算。 | a * b 得到 200 |
/ | 用左操作数除右操作数。 | b / a 得到 2 |
% | 用左操作数除右操作数并返回余数。 | b % a 得到 0 |
SQL比较运算符
运算符 | 描述 | 例子(设a=10,b=20) |
---|---|---|
= | 检查两个操作数的值是否相等,如果是,则条件为真(true)。 | (a = b) is false. |
!= | 检查两个操作数的值是否相等,如果值不相等则条件为真(true)。 | (a != b) is true. |
<> | 检查两个操作数的值是否相等,如果值不相等则条件为真(true)。 | (a <> b) is true. |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件为真(true)。 | (a > b) is false. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件为真(true)。 | (a < b) is true. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真(true)。 | (a >= b) is false |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真(true)。 | (a <= b) is true. |
!< | 检查左操作数的值是否不小于右操作数的值,如果是,则条件变为真(true)。 | (a !< b) is false. |
!> | 检查左操作数的值是否不大于右操作数的值,如果是,则条件变为真(true)。 | (a !> b) is true. |
SQL逻辑运算符
运算符 | 描述 |
---|---|
ALL | ALL运算符用于将值与另一个值集中的所有值进行比较。 |
AND | AND运算符允许在SQL语句的WHERE子句中指定多个条件。 |
ANY | ANY运算符用于根据条件将值与列表中的任何适用值进行比较。 |
BETWEEN | BETWEEN运算符用于搜索在给定最小值和最大值内的值。 |
EXISTS | EXISTS运算符用于搜索指定表中是否存在满足特定条件的行。 |
IN | IN运算符用于将值与已指定的文字值列表进行比较。 |
LIKE | LIKE运算符用于使用通配符运算符将值与类似值进行比较。 |
NOT | NOT运算符反转使用它的逻辑运算符的含义。 例如:NOT EXISTS, NOT BETWEEN, NOT IN等等,这是一个否定运算符。 |
OR | OR运算符用于组合SQL语句的WHERE子句中的多个条件。 |
IS NULL | IS NULL运算符用于将值与NULL值进行比较。 |
UNIQUE | UNIQUE运算符搜索指定表的每一行的唯一性(无重复项)。 |
SQL 表达式
有不同类型的sql表达式,如下所示:
- 布尔型
SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
- 数值型
- 日期
#返回当前系统日期和时间值 SELECT CURRENT_TIMESTAMP;#表述1 SELECT GETDATE(); #表述2