SQL语句
1、SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
2、select语句
SELECT 语句用于从表中选取数据。
select * from 表名
select 列名 from 表名
1)DISTINCT关键字(去重)
SELECT DISTINCT
Company FROM Orders
2)where子句
SELECT * FROM Persons WHERE City='Beijing'
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
3)AND & OR 运算符
AND两个条件都要成立
SELECT * FROM Persons WHERE FirstName='Thomas' AND
LastName='Carter'(显示所有姓为 "Carter" 并且名为 "Thomas" 的人)
OR只要有一个条件成立
SELECT * FROM Persons WHERE firstname='Thomas' OR
lastname='Carter'(显示所有姓为 "Carter" 或者名为 "Thomas" 的人)
4)ORDER BY 语句
用于对结果集进行排序。asc升序(默认),desc降序。
语法:
SELECT Company, OrderNumber FROM Orders ORDER BY Company(以字母顺序显示公司名称)
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber(以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber))
SELECT Company, OrderNumber FROM Orders
ORDER BY Company DESC(以逆字母顺序显示公司名称)
5)TOP子句
TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
sql server语法
SELECT TOP number|percent column_name(s) FROM table_name
SELECT TOP 2
* FROM Persons(选取前两条)
SELECT TOP 50 PERCENT
* FROM Persons(选取前50%)
MySQL 语法
SELECT column_name(s) FROM table_name LIMIT number
select * from persons limit 5
Oracle语法
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
SELECT * FROM PERSONS WHERE ROWNUM <=5
6)LIKE操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT * FROM Persons WHERE City LIKE '%lon%' (从 "Persons" 表中选取居住在包含 "lon" 的城市里的人)
SELECT * FROM Persons WHERE City NOT LIKE '%lon%' (从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人)
SELECT * FROM Persons WHERE City LIKE [ALN]%' (从 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人)
7)IN操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT * FROM PersonsWHERE LastName IN ('Adams','Carter') (从表中选取姓氏为 Adams 和 Carter 的人)
8)BETWEEN操作符
BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
SELECT * FROM Persons WHERE LastName BETWEEN
'Adams' AND
'Carter'(以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人)
重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。
9)设置别名
通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
SELECT LastName AS Family
, FirstName AS Name
FROM Persons
3、insert into语句
INSERT INTO 语句用于向表格中插入新的行。
语法:
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
4、Update 语句
Update 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
更新某一行中的一个列
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
更新某一行中若干列
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
5、delete语句
DELETE 语句用于删除表中的行。
语法:
DELETE FROM 表名称 WHERE 列名称 = 值
删除某行
DELETE FROM Person WHERE LastName = 'Wilson'
删除所有行
DELETE FROM table_name
DELETE * FROM table_name
6、多表查询
创建表SQL:
create table Persons(
ID_P int NOT NULL UNIQUE PRIMARY KEY,
LastName varchar(50),
FirstName varchar(50),
Address varchar(50),
City varchar(50)
);
create table Orders (
ID_O int(10) not null UNIQUE PRIMARY KEY,
OrderNo varchar(50),
Id_P int(10)
);
插入数据SQL:
insert into Persons values(1,'Adams','John','Oxford Street','London');
insert into Persons values(2,'Bush','George','fifth Avenue','New York');
insert into Persons values(3,'Carter','Thomas','Changan street','Beijing');
insert into Orders values (1,'77895',3);
insert into Orders values (2,'44678',3);
insert into Orders values (3,'22456',1);
insert into Orders values (4,'24562',1);
insert into Orders values (5,'34764',65);
查询所有人的订单及订单号:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
不同的 SQL JOIN
- JOIN(INNER JOIN): 如果表中有至少一个匹配,则返回行
查询所有人的订单及订单号:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
列出所有的人,以及他们的定购 - 如果有的话):SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200423144207579-1741964039.png)
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
列出所有的定单,以及定购它们的人 - 如果有的话:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
7、UNION操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
列出所有在中国和美国的不同的雇员名:SELECT E_Name FROM Employees_China UNION
SELECT E_Name FROM Employees_USA
列出在中国和美国的所有的雇员: SELECT E_Name FROM Employees_China UNION ALL
SELECT E_Name FROM Employees_USA
8、create语句
创建数据库
create database 数据库名
创建表
CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... )
实例:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
9、SQL约束
主要探讨以下几种约束:
- NOT NULL(非空)
- UNIQUE(唯一性)
- PRIMARY KEY(主键)
- FOREIGN KEY(外键)
- CHECK(取值约束)
- DEFAULT(默认值)
1)NOT NULL(非空约束)
CREATE TABLE Persons ( Id_P intNOT NULL
, LastName varchar(255)NOT NULL
, FirstName varchar(255), Address varchar(255), City varchar(255) )
2)UNIQUE(唯一性约束)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE
,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
定义多个UNIQUE约束
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
修改表时添加约束
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD UNIQUE (Id_P)
修改表时添加多个约束
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
撤销约束
Mysql
ALTER TABLE Persons DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID
3)primary key(主键 约束)
PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
创建表时添加主键
Mysql
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY
,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
修改表时创建主键
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束
ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
撤销主键
Mysql
ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
4)foreign key
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
创建表时添加外键
Mysql
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
修改表时添加外键
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
命名 FOREIGN KEY 约束,以及为多个列定义FOREIGN KEY 约束
ALTER TABLE PersonsADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤销外键
Mysql
ALTER TABLE Persons DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT fk_PerOrders
5)CHECK约束
CHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
创建表时添加CHECK约束
Mysql
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0)
,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
修改表时添加CHECK约束
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CHECK (Id_P>0)
命名 CHECK约束,以及为多个列定义CHECK约束
ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
撤销CHECK约束
Mysql
ALTER TABLE Persons DROP CONSTRAINT chk_Person
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CHECK chk_Person
6)DEFAULT约束
DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
创建表时创建DEFAULT约束
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
修改表时创建Default约束
Mysql
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
SQL Server / Oracle / MS Access:
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'
撤销DEFAULT约束
Mysql
ALTER TABLE Persons ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT
10、索引
在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们只能被用来加速搜索/查询。
索引的优点:提高检索数据的速度。
索引的缺点:(1)创建和维护索引需要消耗时间,消耗时间的数量随着数据量的增加而增加
(2)索引需要占用物理控件,每个索引都要占用一定的物理控件
(3)增加、删除和修改数据时,要动态维护索引,造成数据的维护速度降低。
索引的分类:普通索引
唯一性索引
全文索引
单列索引
多列索引
空间索引
SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name ON table_name (column_name)
SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name)
实例
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
11、视图
什么是视图?
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
创建视图
CREATE VIEW
[Current Product List]AS
SELECT
ProductID,ProductNameFROM
ProductsWHERE
Discontinued=No
查询视图:
SELECT * FROM [Current Product List]
更新视图
CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName,Category FROM Products WHERE Discontinued=No
撤销视图
SQL DROP VIEW Syntax DROP VIEW view_name
12、Drop语句
通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
删除数据库
DROP DATABASE 数据库名称
删除表
DROP TABLE 表名称 (表的结构、属性以及索引也会被删除)
TRUNCATE TABLE 表名称(仅删除表内的数据,但并不删除表本身)
删除索引
用于 Microsoft SQLJet (以及 Microsoft Access) 的语法:
DROP INDEX index_name ON table_name
用于 MS SQL Server 的语法:
DROP INDEX table_name.index_name
用于 IBM DB2 和 Oracle 语法:
DROP INDEX index_name
用于 MySQL 的语法:
ALTER TABLE table_name DROP INDEX index_name
13、ALTER语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
如需在表中添加列,请使用下列语法:
ALTER TABLE table_name ADD column_name datatype
要删除表中的列,请使用下列语法:
ALTER TABLE table_name DROP COLUMN column_name
注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。
要改变表中列的数据类型,请使用下列语法:
ALTER TABLE table_name ALTER COLUMN column_name datatype
14、自增Auto-increment
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
1)用于 MySQL 的语法
下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
CREATE TABLE Persons (P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255),PRIMARY KEY (P_Id)
)
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName) VALUES ('Bill','Gates')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。
2)用于 SQL Server 的语法
下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
默认地,IDENTITY 的开始值是 1,每条新记录递增 1。
要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)
要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName) VALUES ('Bill','Gates')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。
3)用于 Oracle 的语法
请使用下面的 CREATE SEQUENCE 语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上面的代码创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值。
要在 "Persons" 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):
INSERT INTO Persons (P_Id,FirstName,LastName) VALUES (seq_person.nextval,'Lars','Monsen')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 的赋值是来自 seq_person 序列的下一个数字。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。
15、函数
1)日期函数
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424131548206-1638106672.png)
SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或 YY
SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: 唯一的数字
2)avg()
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SELECT AVG(column_name) FROM table_name
实例:
找到 OrderPrice 值高于 OrderPrice 平均值的客户
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders
3)count()
COUNT() 函数返回匹配指定条件的行数。
SQL COUNT(column_name) :返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) :返回表中的记录数:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) :返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
4))first()
FIRST() 函数返回指定的字段中第一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
查找 "OrderPrice" 列的第一个值:
SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders
5)last()
LAST() 函数返回指定的字段中最后一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
查找 "OrderPrice" 列的最后一个值。
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders
6)max()
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
查找 "OrderPrice" 列的最大值。
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
7)min
MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
查找 "OrderPrice" 列的最小值。
SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders
8)sum()
SUM 函数返回数值列的总数(总额)。
查找 "OrderPrice" 字段的总数。
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders
9)ucase()
UCASE 函数把字段的值转换为大写。
选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为大写。
SELECT UCASE(LastName) as LastName,FirstName FROM Persons
10)lcase()
LCASE 函数把字段的值转换为小写。
希望选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为小写。
SELECT LCASE(LastName) as LastName,FirstName FROM Persons
11)mid()
MID 函数用于从文本字段中提取字符。
SELECT MID(column_name,start[,length]) FROM table_name
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424132958898-1999427552.png)
从 "City" 列中提取前 3 个字符。
SELECT MID(City,1,3) as SmallCity FROM Persons
12)len()
LEN 函数返回文本字段中值的长度。
SELECT LEN(column_name) FROM table_name
13)round()
ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424134803939-1471214711.png)
14)now()
NOW 函数返回当前的日期和时间。
提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。
SELECT NOW() FROM table_name
15)format
FORMAT 函数用于对字段的显示进行格式化。
SELECT FORMAT(column_name,format) FROM table_name
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424134927159-1916945324.png)
16、Group by
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
查找每个客户的总金额(总订单)。
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424135454932-1202539361.png)
不使用Group by:
SELECT Customer,SUM(OrderPrice) FROM Orders
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424135530714-504673369.png)
17、having
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
我们希望查找订单总金额少于 2000 的客户。
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer HAVING SUM(OrderPrice)<2000
![](https://img2020.cnblogs.com/blog/1339103/202004/1339103-20200424135557583-1564402976.png)
希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
以上内容均摘自w3school https://www.w3school.com.cn/sql/index.asp
posted on 2020-04-22 16:57 crystal1126 阅读(474) 评论(0) 编辑 收藏 举报