13
2020
10

SQL语句

SQL 是用于访问和处理数据库的标准的计算机语言,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等

SQL 指结构化查询语言,访问数据库,面向数据库执行查询从数据库取回数据,数据库中插入新的记录,更新数据库中的数据从数据库删除记录,创建新数据库,在数据库中创建新表,在数据库中创建存储过程,在数据库中创建视图,设置表、存储过程和视图的权限

RDBMS 指的是关系型数据库管理系统,RDBMS 中的数据存储在被称为表(tables)的数据库对象中

数据库表是相关的数据项的集合,它由列和行组成一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)

blob.png

上面的表包含三条记录(每一条对应一个人)和五个列(Id、姓、名、地址和城市)

SQL语句

在数据库上执行的大部分工作都由 SQL 语句完成

语句:SELECT LastName FROM Persons查获上表 LastName 列的数据

SQL语句后的分号:分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就

可以在对服务器的相同请求中执行一条以上的语句

SQL DML和DDL

把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、

插入和删除记录的语法

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据

UPDATE - 更新数据库表中的数据

DELETE - 从数据库表中删除数据

INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 可以创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库

ALTER DATABASE - 修改数据库

u - 创建新表

ALTER TABLE - 变更(改变)数据库表

DROP TABLE - 删除表u

CREATE INDEX - 创建索引(搜索键)

DROP INDEX - 删除索引

SQL SELECT 语句和 SELECT * 语句

SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)

SELECT 列名称 FROM 表名称或者 SELECT * FROM 表名称

SQL 语句对大小写不敏感。SELECT 等效于 select

实例:在上表中获取名为"LastName" 和 "FirstName" 的列的内容从

名为“persons”的数据库表:

SELECT LastName,FirstName FROM Persons

获取 persons表中LastName,FirstName 两列的内容

如果要从persons表中获取所有的列,使用*号代替:SELECT * FROM Persons

*是选取所有列的快捷方式

SQL SELECT DISTINCT 语句

关键词 DISTINCT 用于返回唯一不同的值   语法:SELECT DISTINCT 列名称 FROM 表名称;

blob.png

我们将上表取名为orders表

如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:

SELECT DISTINCT Company FROM Orders  从orders表中获取company列中前三个值

blob.png

SQL WHERE子句

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值


操作符描述操作符
描述
=等于>=大于等于
< >不等于<=小于等于
>大于BETWEEN在某个范围内
<小于LIKE搜索某种模式

上面的运算符可在 WHERE 子句中使用:


使用WHERE 子句    SELECT * FROM Persons WHERE City='Beijing'

blob.png

选取"Persons" 表中city列带有Beijing的那一行

结果为:blob.png

使用WHERE句子中条件值周围使用的是单引号

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,不要使用引号

文本值:SELECT * FROM Persons WHERE FirstName='Bush'  //正确的

SELECT * FROM Persons WHERE FirstName=Bush   //错误的

数值:SELECT * FROM Persons WHERE Year>1965  //正确的

SELECT * FROM Persons WHERE Year>'1965'    //错误的

SQL AND 和 OR 运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来,如果第一个条件和第二个条件都成立,

则 AND 运算符显示一条记录,如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示

一条记录。

原始表:

blob.png

在上述原始表中使用 AND 来显示所有姓为 "Carter" 并且名为 "Thomas" 的人

使用:sELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

blob.png

使用OR运算符实例:使用 OR 来显示所有姓为 "Carter" 或者名为 "Thomas" 的人:

使用:SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

blob.png

结合 AND 和 OR 运算符

把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')AND LastName='Carter'

blob.png

SQL ORDER 子句

先建立一个表,取名为orders

blob.png

ORDER BY 语句用于对结果集进行排序

1.以字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company

结果为:blob.png

2.以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

结果为:blob.png

3.以逆字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

结果:blob.png

4.以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

blob.png

SQL INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行

语法:INSERT INTO 表名称 VALUES (值1, 值2,....)

也可以指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

blob.png

想上表中插入行:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

结果:blob.png

在指定的列中插入数据:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

blob.png

SQL  Update 语句

Update 语句用于修改表中的数据

语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

建立一个表:

blob.png

更新某一行中的一个列,为上表中的为 lastname 是 "Wilson" 的人添加 firstname:

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

结果为: blob.png

更新某一行的若干列,修改地址(address),并添加城市名称(city):

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

结果:blob.png

SQL  DELETE 语句

DELETE 语句用于删除表中的行

语法:DELETE FROM 表名称 WHERE 列名称 = 值

删除上表中的”wilson“行

DELETE FROM Person WHERE LastName = 'Wilson'

结果为:

blob.png

删除所有行

可以在不删除表的情况下删除所有的行。可以使表的结构、属性和索引都是完整的:

DELETE FROM table_name或者DELETE * FROM table_name

SQL TOP子句

TOP 子句用于规定要返回的记录的数目对于拥有数千条记录的大型表来说,TOP 子句是非常有用的

但是并非所有的数据库系统都支持 TOP 子句

TOP 子句在SQL Server中的语法:SELECT TOP number|percent column_name(s) FROM table_name

在mysql的oracle中的 SQL SELECT TOP 是等价的

MySQL 语法:SELECT column_name(s) FROM table_name  LIMIT number

Oracle的语法:SELECT column_name(s) FROM table_name  WHERE ROWNUM <= number

建立一个persons表(用在例子中)

blob.png

通过SQL TOP来实现获取表中的头两条记录

使用SELECT 语句:SELECT TOP 2 * FROM Persons来获取表格的前两项

或者从表中选取50%的记录:SELECT TOP 50 PERCENT * FROM Persons

SQL LIKN操作符用于在 WHERE 子句中搜索列中的指定模式

语法:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern

从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE 'N%'

语句中的"%" 可用于定义通配符(模式中缺少的字母)

结果集:blob.png

从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE '%g'

结果集:blob.png

从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE '%lon%'

结果集:blob.png

以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City NOT LIKE '%lon%'

结果集:blob.png

SQL 通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符,SQL 通配符必须与 LIKE 运算符一起使用。

使用 _ 通配符

从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE FirstName LIKE '_eorge'

结果集:blob.png

上面的 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":

使用SELECT 语句:SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

结果集:blob.png

使用 [charlist] 通配符

从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE '[ALN]%'

结果集:blob.png

或者从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

使用SELECT 语句:SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

SQL IN 操作符

IN 操作符允许我们在 WHERE 子句中规定多个值

SQL IN 语法:SELECT column_name(s) FROM table_name  WHERE column_name IN (value1,value2,...)

以上面的persons表为例,从上表中选取姓氏为 Adams 和 Carter 的人:

使用SELECT 语句:SELECSQL BETWEEN 语法T * FROM Persons  WHERE LastName IN ('Adams','Carter')

结果集:blob.png

SQL BETWEEN 操作符

BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围,这些值可以是数值、文本或者日期

SQL BETWEEN 语法:SELECT column_name(s)  FROM table_name WHERE column_name BETWEEN value1 AND value2

以上个Persons 表为例:想要以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人:

使用SELECT 语句:SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

结果集:blob.png

注意:在例子中要求是以字母顺序显示介于 "Adams"和 "Carter"之间的人,但表中也显示了"Adams"

因为不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,

但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;

而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter"

以上个Persons 表为例:想要显示范围之外的人,使用 NOT 操作符:

使用SELECT 语句:SELECT * FROM Persons WHERE LastName   NOT BETWEEN 'Adams' AND 'Carter'

结果集为:blob.png

显示 'Adams' AND 'Carter'范围之外的人,但是在结果集中也包括'carter'

SQL Alias(别名)

通过使用 SQL,可以为列名称和表名称指定别名(Alias)

表的 SQL Alias 语法:SELECT column_name(s)  FROM table_name  AS alias_name

列的 SQL Alias 语法:SELECT column_name AS alias_name FROM table_name

以上个Persons 表为例:想要改变'LastName'为'Family' ,改'FirstName'为' Name'

使用SELECT 语句:SELECT LastName AS Family, FirstName AS NameFROM Persons

结果集:blob.png

SQL SELECT INTO 语句可用于创建表的备份复件

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中,常用于创建表的备份复件或者用于对记录进行存档

语法:

把所有的列插入新表中:SELECT * INTO new_table_name [IN externaldatabase] FROM Old_tablenama

如果只是想把希望的列插入新表中:SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename

SQL SELECT INTO 实例 - 制作备份复件

 "Persons" 表的备份复件:SELECT * INTO Persons_backup FROM Persons

IN 子句可用于向另一个数据库中拷贝表:SELECT * INTO Persons IN 'Backup.mdb' FROM Persons

如果希望拷贝某些域,可以在 SELECT 语句后列出这些域:SELECT LastName,FirstName INTO Persons_backup FROM Persons

SQL SELECT INTO 实例 - 带有 WHERE 子句

通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:

SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'

SQL CREATE DATABASE 语句

CREATE DATABASE 用于创建数据库

语法:CREATE DATABASE database_name

创建一个名为 "my_db" 的数据库

使用CREATE DATABASE 语句:CREATE DATABASE my_db   通过 CREATE TABLE 来添加数据库表

SQL CREATE TABLE 语句

CREATE TABLE 语句用于创建数据库中的表

语法:blob.png

数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:


  • integer(size)

  • int(size)

  • smallint(size)

  • tinyint(size)

仅容纳整数。在括号内规定数字的最大位数
  • decimal(size,d)

  • numeric(size,d)

容纳带有小数的数字。

"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数

char(size)

容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度

varchar(size)容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)在括号中规定字符串的最大长度
date(yyyymmdd)容纳日期

创建一个表:该表包含 5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":


CREATE TABLE Persons ( Id_P int, LastName varchar(255),                           Id_P 列的数据类型是 int,包含整数。

FirstName varchar(255),                          其余 4 列的数据类型是 varchar,最大长度为 255 个字符              Address varchar(255), City varchar(255) )

空的表类似于这样:blob.png

可使用 INSERT INTO 语句向空表写入数据

SQL CREATE INDEX 语句

CREATE INDEX 语句用于在表中创建索引,在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据

我们可以在表中创建索引,以便更加快速高效地查询数据,用户无法看到索引,它们只能被用来加速搜索或者查询

更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引

SQL CREATE INDEX 语法:CREATE INDEX index_name  ON table_name (column_name)

在表上创建一个简单的索引。允许使用重复的值,"column_name" 规定需要索引的列

SQL CREATE UNIQUE INDEX 语法:CREATE UNIQUE INDEX index_name ON table_name (column_name)

该语法在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值

CREATE INDEX 实例

创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列

使用语句:CREATE INDEX PersonIndex ON Person (LastName)

如果希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC

使用语句:CREATE INDEX PersonIndex  ON Person (LastName DESC)

如果希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:CREATE INDEX PersonIndex  ON Person (LastName, FirstName)

SQL 撤销索引、表以及数据库     通过使用 DROP 语句,可以轻松地删除索引、表和数据库

SQL DROP INDEX 语句

使用 DROP INDEX 命令删除表格中的索引每个数据库的语法不同

用于 SQL Server 的语法:DROP INDEX table_name.index_name;

用于Oracle 语法:DROP INDEX index_name;

用于 MySQL 的语法:ALTER TABLE table_name DROP INDEX index_name;

SQL DROP TABLE 语句

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):DROP TABLE 表名称

SQL DROP DATABASE 语句

DROP DATABASE 语句用于删除数据库:DROP DATABASE 数据库名称

SQL TRUNCATE TABLE 语句

如果只需要除去表内的数据,但并不删除表本身,使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):TRUNCATE TABLE 表名称

SQL ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、修改或删除列

建立一个Persons 表:blob.png


1.如需在表中添加列,使用:ALTER TABLE table_name  ADD column_name datatype语法

实例:想在表 "Persons" 中添加一个名为 "Birthday" 的新列

使用 SQL 语句:ALTER TABLE Persons ADD Birthday date(新列 "Birthday" 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型

结果集:blob.png

2.要删除表中的列,使用:ALTER TABLE table_name  DROP COLUMN column_name语法,此语法在某些数据库系统不允许这种在数据库表中删除列的方式

实例:删除 "Person" 表中的 "Birthday" 列:ALTER TABLE Person DROP COLUMN Birthday

3.要改变表中列的数据类型,使用:ALTER TABLE table_name  ALTER COLUMN column_name datatype语法

实例:在我们希望改变 "Persons" 表中 "Birthday" 列的数据类型

使用 SQL 语句:ALTER TABLE Persons  ALTER COLUMN Birthday year("Birthday" 列的数据类型是 year,可以存放 2 位或 4 位格式的年份

SQL 连接(JOIN)

SQL join 用于把来自两个或多个表的行结合起来基于这些表之间的共同字段

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN),SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行

演示数据库

先在mysql中建立一个 "Websites"

blob.png

下面是 "access_log" 网站访问记录表的数据:

blob.png

"Websites" 表中的 "id" 列指向 "access_log" 表中的字段  "site_id"。上面这两个表是通过 "site_id" 列联系起来的。

然后,如果我们运行下面的 SQL 语句(包含 INNER JOIN):

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;

结果集:blob.png

SQL INNER JOIN 关键字

NNER JOIN 关键字在表中存在至少一个匹配时返回行

语法:SELECT column_name(s)   FROM table1    INNER JOIN table2  ON table1.column_name=table2.column_name;或者

SELECT column_name(s) FROM table1  JOIN table2
ON table1.column_name=table2.column_name;

下面的 SQL 语句将返回所有网站的访问记录:

SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count;

结果集:blob.png

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Websites" 表中的行在 "access_log" 中没有匹配,则不会列出这些行

SQL LEFT JOIN 关键字

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL

语法SELECT column_name(s) FROM table1    LEFT JOIN table2
ON table1.column_name=table2.column_name;或者

SELECT column_name(s)  FROM table1  LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

实例:把 上图的Websites 作为左表,access_log 作为右表:

实行语句:SELECT Websites.name, access_log.count, access_log.date
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC; 

结果集:blob.png

LEFT JOIN 关键字从左表(Websites)返回所有的行,即使右表(access_log)中没有匹配

SQL RIGHT JOIN 关键字

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。yu

语法:SELECT column_name(s)   FROM table1   RIGHT JOIN table2

ON table1.column_name=table2.column_name;或

SELECT column_name(s)   FROM table1   RIGHT OUTER  JOIN table2

ON table1.column_name=table2.column_name;或

举例:建立一 个"Websites" 表:blob.png  "access_log" 网站访问记录表的数据:blob.png

注意:在”acces_log“中site_id为6的在”websites“表中是没有的

用SQL 语句将返回网站的访问记录,将上表的“websites“作为左表,将上表的"access_log"表作为右表;

SELECT websites.name, access_log.count, access_log.

dateFROM websites   RIGHT JOIN access_log

ON access_log.site_id=websites.id  ORDER BY access_log.count DESC;

执行以上 SQL 输出结果如下:blob.png

RIGHT JOIN 关键字从右表(Websites)返回所有的行,即使左表(access_log)中没有匹配

SQL FULL OUTER JOIN 关键字

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

语法:SELECT column_name(s)  FROM table1  FULL OUTER JOIN table2

ON table1.column_name=table2.column_name;

举例:使用上面的"Websites" 表的数据

下面是 "access_log" 网站访问记录表的数据:blob.png

MySQL中不支持 FULL OUTER JOIN,可以在 SQL Server 测试

SELECT Websites.name, access_log.count, access_log.date
FROM Websites
FULL OUTER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;

FULL OUTER JOIN 关键字返回左表(Websites)和右表(access_log)中所有的行。如果 "Websites" 表中的行在 "access_log" 中没有匹配或者 "access_log" 表中的行在 "Websites" 表中没有匹配,也会列出这些行

总结:

left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。 

right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。 

inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。 

full join : 外连接,返回两个表中的行:left join + right join。

SQL 函数

SQL 拥有很多可用于计数和计算的内建函数。

内建 SQL 函数的语法是:SELECT function(列) FROM 表

SQL AVG 函数

AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

语法:SELECT AVG(column_name) FROM table_name

建立一个"Orders" 表:blob.png

现在计算计算 "OrderPrice" 字段的平均值

使用如下 SQL 语句:SELECT AVG(OrderPrice) AS OrderAverage FROM Orders

结果为:blob.png

如果想筛选 OrderPrice 值高于 OrderPrice 平均值的客户

使用SQL语句:SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

结果为:blob.png

SQL COUNT() 函数

COUNT() 函数返回匹配指定条件的行数

1.SQL COUNT(column_name) 语法,COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):

SELECT COUNT(column_name) FROM table_name

以上面的"Orders" 表为例来计算客户 "Carter" 的订单数

使用 SQL 语句: SELECT COUNT(Customer) AS CustomerNilsen FROM Orders WHERE Customer='Carter'

结果为:2

2.SQL COUNT(*) 语法,返回表中的记录数:SELECT COUNT(*) FROM table_name

以上面的"Orders" 表为例来查询表中的记录数

使用 SQL 语句:SELECT COUNT(*) AS NumberOfOrders FROM Orders

中的总行数为:6

SQL COUNT(DISTINCT column_name) 

计算 "Orders" 表中不同客户的数目,使用如下 SQL 语句:

SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders

结果:blob.png这是 "Orders" 表中不同客户(Bush, Carter 和 Adams)的数目

SQL FIRST() 函数

FIRST() 函数返回指定的字段中第一个记录的,也可使用 ORDER BY 语句对记录进行排序

语法:SELECT FIRST(column_name) FROM table_name

例:查找上面"Orders" 表中"OrderPrice" 列的第一个值

使用如下 SQL 语句:SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders

结果:blob.png

SQL Date 函数

SQL Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:                       SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD                                                                             DATE - 格式 YYYY-MM-DD                         

DATETIME - 格式: YYYY-MM-DD HH:MM:SS                                                DATETIME - 格式: YYYY-MM-DD HH:MM:SS      

TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS                                            SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS               

YEAR - 格式 YYYY 或 YY                                                                                 TIMESTAMP - 格式: 唯一的数字

SQL 日期处理

有下面这个 "Orders" 表:

blob.png

比较两个日期,从上表中选取 OrderDate 为 "2008-12-26" 的记录

使用SELECT 语句SELECT * FROM Orders WHERE OrderDate='2008-12-26'

结果集:blob.png

SQL MAX() 函数

MAX 函数返回一列中的最大值。NULL 值不包括在计算中

语法:SELECT MAX(column_name) FROM table_name

MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值

blob.png

以上表为例:希望查找 "OrderPrice" 列的最大值

使用如下 SQL 语句:SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders

结果为:2000

SQL LAST() 函数

LAST() 函数返回指定的字段中最后一个记录的值


或者可使用 ORDER BY 语句对记录进行排序

语法:SELECT LAST(column_name) FROM table_name

例:查找上表中 "OrderPrice" 列的最后一个值

语法:SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders

结果为:100

SQL MIN() 函数

MIN 函数返回一列中的最小值。NULL 值不包括在计算中

语法:SELECT MIN(column_name) FROM table_name

MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低

:查找 上表中"OrderPrice" 列的最小值

使用sql语句:SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders

"OrderPrice" 列的最小值为:100

SQL SUM() 函数

SUM 函数返回数值列的总数(总额)

语法:SELECT SUM(column_name) FROM table_name

来计算上表中"OrderPrice" 字段的总数:

使用sql语句:SELECT SUM(OrderPrice) AS OrderTotal FROM Orders

结果为:5700

SQL UCASE() 函数

UCASE 函数把字段的值转换为大写

语法:SELECT UCASE(column_name) FROM table_name

blob.png

我们选取上表中的选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为大写

使用sql语句:SELECT UCASE(LastName) as LastName,FirstName FROM Persons

结果:blob.png

sql LCASE ()函数

LCASE 函数把字段的值转换为小写

语法:SELECT LCASE(column_name) FROM table_name

把上表中的 "LastName" 列转换为小写

使用sql语句:SELECT LCASE(LastName) as LastName,FirstName FROM Persons

结果:blob.png

MID() 函数

MID 函数用于从文本字段中提取字符

语法:SELECT MID(column_name,start[,length]) FROM table_name


参数描述
column_name必需。要提取字符的字段。
start必需。规定开始位置(起始值是 1)
length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本

从上表 "City" 列中提取前 3 个字符


使用sql语句:SELECT MID(City,1,3) as SmallCity FROM Persons

结果:blob.png


 sql LEN() 函数

LEN 函数返回文本字段中值的长度

语法:SELECT LEN(column_name) FROM table_name

现在获取上表中的City" 列中值的长度

使用sql语句:SELECT LEN(City) as LengthOfCity FROM Persons

结果:blob.png

SQL ROUND() 函数

ROUND 函数用于把数值字段舍入为指定的小数位数

法:SELECT ROUND(column_name,decimals) FROM table_nam


参数描述
column_name必需。要舍入的字段
decimals必需。规定要返回的小数位数。

实例:”价格“表blob.png

把上表中的名称和价格舍入为最接近的整数

使用sql语句:SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products

结果为:blob.png

SQL NOW() 函数

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

在使用 Sql Server 数据库,使用 getdate() 函数来获得当前的日期时间

语法:SELECT NOW() FROM table_name

显示上”价格“表中当天的日期所对应的名称和价格

使用sql语句:SELECT ProductName, UnitPrice, Now() as PerDate FROM Products

结果:blob.png

SQL FORMAT()函数

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

语法:SELECT FORMAT(column_name,format) FROM table_name

参数描述
column_name必需。要格式化的字段。
format必需。规定格式。

以上”价格“表为例显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD")

使用sql语句:SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products

结果:blob.png

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。