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

  • 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 int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

2)UNIQUE(唯一性约束)

UNIQUE约束唯一标识数据库表中的每条记录
创建表时创建UNIQUE
MySql
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 Persons ADD 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,ProductName
FROM Products
WHERE 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)日期函数

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

从 "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

14)now()

NOW 函数返回当前的日期和时间。

提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。

SELECT NOW() FROM table_name

15)format

FORMAT 函数用于对字段的显示进行格式化。

SELECT FORMAT(column_name,format) FROM table_name

 16、Group by

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

查找每个客户的总金额(总订单)。

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

 不使用Group by:

SELECT Customer,SUM(OrderPrice) FROM Orders

17、having

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

我们希望查找订单总金额少于 2000 的客户。

SELECT Customer,SUM(OrderPrice) FROM Orders  
GROUP BY Customer HAVING SUM(OrderPrice)<2000

希望查找客户 "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  阅读(469)  评论(0编辑  收藏  举报

导航