zoukankan      html  css  js  c++  java
  • 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、多表查询

    查询所有人的订单及订单号:

    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

  • 相关阅读:
    IE6 select穿透问题(div 定位无法遮盖select)!
    NYOJ 35 表达式求值
    网络运营商名称显示&amp;SIM名称显示
    Android开发四大组件之Service(具体解释篇)
    RabbitMQ之消息确认机制(事务+Confirm)
    rabbitmq的发布确认和事务
    java finally return
    用 consul + consul-template + registrator + nginx 打造真正可动态扩展的服务架构
    consul vs etcd3
    LinkedIn实时低延迟数据抓取系统Databus开源
  • 原文地址:https://www.cnblogs.com/crystal1126/p/12753232.html
Copyright © 2011-2022 走看看