SQL(结构化查询语言)是用于访问和操作数据库中的数据的标准数据库编程语言。
SQL是关系数据库系统的标准语言。所有关系数据库管理系统(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作为它们的标准数据库语言。
SQL标准命令
DDL(数据定义语言)
数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象。用于操纵表结构的数据定义语言命令有:
- CREATE TABLE–创建(在数据库中创建新表、表视图或其他对象)
- ALTER TABLE– 更改 (修改现有的数据库对象,如表)
- DROP TABLE– 删除 (删除数据库中的整个表、表或其他对象的视图)
DML(数据操纵语言)
数据操纵语言用于检索、插入和修改数据,数据操纵语言是最常见的SQL命令。
- INSERT– 插入 (创建记录)
- DELETE– 删除 (删除记录)
- UPDATE– 修改(修改记录)
- SELECT – 检索 (从一个或多个表检索某些记录)
DCL(数据控制语言)
数据控制语言为用户提供权限控制命令。
- GRANT– 授予权限
- REVOKE– 撤销已授予的权限
SQL语法规则
- SQL语句总是以关键字开始,如SELECT、INSERT、UPDATE、DELETE、DROP、CREATE。
- SQL语句以分号结尾。
- SQL不区分大小写,意味着update与UPDATE相同。
SQL Select(选择) 语法
SELECT 语法用于从数据库中选择数据。
返回的数据存储在结果表中,称为结果集。
基本语法:SELECT和FROM
在任何SQL查询语句中都:SELECT和FROM他们必须按顺序排列。SELECT指示要查看哪些列,FROM标识它们所在的表。
SQL SELECT 语法如下所示:
SELECT column1, column2, ...
FROM table_name;
这里,column1,column2,…是要从中选择数据的表的字段名称。如果要选择表中可用的所有字段,请使用以下语法:
SELECT * FROM table_name;
SELECT 检索一列
下面的 SQL 语句从 “Customers” 表中选取 “City” 列:
SELECT City FROM Customers;
SELECT 检索多列
下面的 SQL 语句从 “Customers” 表中选取 “CustomerName” 和 “City” 列:
SELECT CustomerName, City FROM Customers;
注意:这两个列名在查询中用逗号分隔。每当选择多个列时,它们必须用逗号分隔,但最后一列名称之后不能添加逗号。
SELECT * 实例 - 检索所有列
下面的 SQL 语句从 “Customers” 表中选取所有列:
SELECT * FROM Customers;
如果要选择表中的所有列,则可以使用 * 而不需要把所有列名罗列查询。
SQL SELECT DISTINCT(选择不同) 语法
SQL SELECT DISTINCT 语法
SELECT DISTINCT语法用于仅返回不同的(different)值。在一张表内,一列通常包含许多重复的值; 有时你只想列出不同的(different)值。
SELECT DISTINCT语句用于仅返回不同的(different)值。
SQL SELECT DISTINCT语法如下所示:
SELECT DISTINCT column1, column2, ...
FROM table_name;
以下SQL语句仅从"Customers" 表中的 “Country” 列中选择DISTINCT值:
SELECT DISTINCT Country FROM Customers;
SQL WHERE Clause(查询子句)
SQL WHERE 子句
WHERE 子句用于过滤记录。
WHERE 子句用于提取满足指定标准的记录。
SQL WHERE 语法
SELECT column1, column2, ...
FROM table_name
WHERE condition;
注意: WHERE子句不仅用于SELECT语法,还用于UPDATE,DELETE语法等!
WHERE子句可以与以下类型的SQL语句一起使用:
- UPDATE
- DELETE
- UPDATE语句
UPDATE "table_name"
SET "column_1" = [new value]
WHERE "condition";
DELETE语句:
DELETE FROM "table_name"
WHERE "condition";
以下SQL语句从"Customers"表中选择其国家为"Mexico"的所有客户:
SELECT * FROM Customers
WHERE Country='Mexico';
也可以使用OR运算符的查询子句:
SELECT * FROM Customers
WHERE Country='Mexico' OR PostalCode='05021';
WHERE 子句中的运算符
SQL AND, OR and NOT(与,或不是运算符)
SQL AND & OR 运算符
AND&OR运算符用于根据一个以上的条件过滤记录,即用于组合多个条件以缩小SQL语句中的数据。
WHERE子句可以与AND,OR和NOT运算符结合使用。
AND和OR运算符用于根据多个条件筛选记录:
- 如果由AND分隔的所有条件为TRUE,则AND运算符显示记录。
- 如果使用AND运算符组合N个条件。对于SQL语句执行的操作(无论是事务还是查询),所有由AND分隔的条件都必须为TRUE。
- 如果由OR分隔的任何条件为真,则OR运算符显示记录。
- 如果使用OR运算符组合N个条件。对于SQL语句执行的操作(无论是事务还是查询),OR分隔的任何一个条件都必须为TRUE。
- 如果条件不为TRUE,则NOT运算符显示记录。
AND语法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
OR语法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
NOT语法
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
AND 运算符实例
以下SQL语句从 “Customers” 表中选择其国家为 “Germany” 、其城市为"Berlin" 的所有客户:
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
OR 运算符实例
以下SQL语句选择城市为“Berlin”或“München”的“Customers”的所有字段:
SELECT * FROM Customers
WHERE City='Berlin' OR City='München';
NOT 运算符实例
以下SQL语句选择国家不是 "Germany"的"Customers"的所有字段:
SELECT * FROM Customers
WHERE NOT Country='Germany';
结合 AND & OR
还可以组合AND和OR(使用括号来组成成复杂的表达式)。
以下SQL语句从国家 “Germany” 且城市为"Berlin" 或"München"的"Customers" 表中选择所有客户:
SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');
结合AND,OR和NOT
也可以结合AND,OR和NOT运算符。
以下SQL语句选择国家是“德国”的“客户”的所有字段,城市必须是“柏林”或“慕尼黑”(用括号形成复杂表达式):
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');
以下SQL语句选择来自"Customers" 的国家不是 “Germany” 且不是 "USA"的所有字段:
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
SQL ORDER BY Keyword(按关键字排序)
SQL ORDER BY 关键字
ORDER BY 关键字用于按升序或降序对结果集进行排序。
ORDER BY 关键字默认情况下按升序排序记录。
如果需要按降序对记录进行排序,可以使用DESC关键字。
SQL ORDER BY 语法
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
可以在ORDER BY子句中使用多个列,但要确保用于对该列进行排序的列应该在列表中。
ORDER BY 实例
下面的 SQL 语句从 “Customers” 表中选取所有客户,并按照 “Country” 列排序:
SELECT * FROM Customers
ORDER BY Country;
ORDER BY DESC 实例
下面的 SQL 语句从 “Customers” 表中选取所有客户,并按照 “Country” 列降序排序:
SELECT * FROM Customers
ORDER BY Country DESC;
ORDER BY 多列 实例1
下面的 SQL 语句从 “Customers” 表中选取所有客户,并按照 “Country” 和 “CustomerName” 列排序:
SELECT * FROM Customers
ORDER BY Country, CustomerName;
ORDER BY 多列 实例2
以下SQL语句从"Customers" 表中选择所有客户,按 “Country” 升序排列,并按 “CustomerName” 列降序排列:
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
SQL INSERT INTO 语句(在表中插入)
SQL INSERT INTO 语句
INSERT INTO 语句用于向表中插入新的数据行。
SQL INSERT INTO 语法
INSERT INTO 语句可以用两种形式编写。
第一个表单没有指定要插入数据的列的名称,只提供要插入的值,即可添加一行新的数据:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
第二种,如果要为表中的所有列添加值,则不需要在SQL查询中指定列名称。但是,请确保值的顺序与表中的列顺序相同。INSERT INTO语法如下所示:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
假设我们想在"Customers"表中插入一个新行。
我们可以使用以下SQL语句:
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
注意:CustomerID列是一个自动递增字段,在将新记录插入到表中时自动生成。
仅在指定的列中插入数据
我们还可以只在指定的列中插入数据。
以下SQL语句插入一个新行,但只在“CustomerName”、“City”和“Countryn”列中插入数据(CustomerID字段将自动更新):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
SQL NULL Values(空值)
什么是SQL NULL值?
SQL 中,NULL 用于表示缺失的值。数据表中的 NULL 值表示该值所处的字段为空。
具有NULL值的字段是没有值的字段。
如果表中的字段是可选的,则可以插入新记录或更新记录而不向该字段添加值。然后,该字段将被保存为NULL值。
值为 NULL 的字段没有值。尤其要明白的是,NULL 值与 0 或者包含空白(spaces)的字段是不同的。
注意:理解NULL值与零值或包含空格的字段不同是非常重要的。具有NULL值的字段是在记录创建期间留空的字段!
如何测试NULL值?
使用比较运算符(例如=,<或<>)来测试NULL值是不可行的。
我们将不得不使用IS NULL和IS NOT NULL运算符。
IS NULL语法
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
IS NOT NULL语法
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
以下SQL语句使用IS NULL运算符来列出所有没有地址的人员:
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NULL;
IS NOT NULL运算符
以下SQL语句使用IS NOT NULL运算符来列出所有具有地址的人员:
SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NOT NULL;
创建表的时候,NULL 的基本语法如下:
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 和其他任何值作比较,其结果总是未知的,所以含有 NULL 的记录不会包含在最终结果里面。
必须使用 IS NULL 或者 IS NOT NULL 来检测某个字段是否为 NULL。
SQL UPDATE 语句(更新表中的记录)
SQL UPDATE 语句
- UPDATE 语句用于更新表中已存在的记录。
- 还可以使用AND或OR运算符组合多个条件。
SQL UPDATE 语法
具有WHERE子句的UPDATE查询的基本语法如下所示:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
注意
更新表中的记录时要小心!
要注意SQL UPDATE 语句中的 WHERE 子句!
WHERE子句指定哪些记录需要更新。如果省略WHERE子句,所有记录都将更新!
SQL Delete 语句(删除表中的记录)
SQL DELETE 语句
DELETE语句用于删除表中现有记录。
SQL DELETE 语法
DELETE FROM table_name
WHERE condition;
注意
删除表格中的记录时要小心!
注意SQL DELETE 语句中的 WHERE 子句!
WHERE子句指定需要删除哪些记录。如果省略了WHERE子句,表中所有记录都将被删除!
删除所有数据
可以删除表中的所有行,而不需要删除该表。这意味着表的结构、属性和索引将保持不变:
DELETE FROM table_name;
或者
DELETE * FROM table_name;
注意:在没有备份的情况下,删除记录要格外小心!因为你删除了不能重复!
SQL 运算符
SQL 运算符
运算符是保留字或主要用于SQL语句的WHERE子句中的字符,用于执行操作,例如:比较和算术运算。 这些运算符用于指定SQL语句中的条件,并用作语句中多个条件的连词。
常见运算符有以下几种:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 否定条件运算符
SQL 表达式
SQL 表达式
表达式是计算值的一个或多个值、运算符和SQL函数的组合。这些SQL表达式类似于公式,它们是用查询语言编写的。
还可以使用它们查询数据库中的特定数据集。
句法
考虑SELECT语句的基本语法,如下所示:
SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION|EXPRESSION];
有不同类型的sql表达式,如下所示:
- 布尔型
- 数值型
- 日期
布尔表达式
SQL布尔表达式基于匹配单个值获取数据。
数值表达式
数值表达式用于在任何查询中执行任何数学运算。
句法:
SELECT numerical_expression as OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;
这里,数值表达式用于数学表达式或任何公式。下面是一个简单的示例,展示了SQLNDigitic表达式的用法:
有几个内置函数,如avg()、sum()、count()等,用于对表或特定表列执行所谓的聚合数据计算。
日期表达式
日期表达式返回当前系统日期和时间值:
另一个日期表达式如下所示:
SQL 选择数据库 USE语句
SQL 选择数据库 USE语句
当SQL Schema中有多个数据库时,在开始操作之前,需要选择一个执行所有操作的数据库。
SQL USE语句用于选择SQL架构中的任何现有数据库。
句法
USE语句的基本语法如下所示 :
USE DatabaseName;
数据库名称在RDBMS中必须是唯一的。