发布时间:2020-10-13编辑:dyy阅读(2051)
SQL 是用于访问和处理数据库的标准的计算机语言,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等
SQL 指结构化查询语言,访问数据库,面向数据库执行查询,从数据库取回数据,数据库中插入新的记录,更新数据库中的数据,从数据库删除记录,创建新数据库,在数据库中创建新表,在数据库中创建存储过程,在数据库中创建视图,设置表、存储过程和视图的权限
RDBMS 指的是关系型数据库管理系统,RDBMS 中的数据存储在被称为表(tables)的数据库对象中
数据库表是相关的数据项的集合,它由列和行组成,一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)
上面的表包含三条记录(每一条对应一个人)和五个列(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 表名称;
我们将上表取名为orders表
如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:
SELECT DISTINCT
Company FROM Orders 从orders表中获取company列中前三个值
SQL WHERE子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
操作符 | 描述 | 操作符 | 描述 |
= | 等于 | >= | 大于等于 |
< > | 不等于 | <= | 小于等于 |
> | 大于 | BETWEEN | 在某个范围内 |
< | 小于 | LIKE | 搜索某种模式 |
上面的运算符可在 WHERE 子句中使用:
使用WHERE 子句 SELECT * FROM Persons WHERE City='Beijing'
选取"Persons" 表中city列带有Beijing的那一行
结果为:
在使用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 运算符显示
一条记录。
原始表:
在上述原始表中使用 AND 来显示所有姓为 "Carter" 并且名为 "Thomas" 的人
使用:sELECT * FROM Persons WHERE FirstName='Thomas' AND
LastName='Carter'
使用OR运算符实例:使用 OR 来显示所有姓为 "Carter" 或者名为 "Thomas" 的人:
使用:SELECT * FROM Persons WHERE firstname='Thomas' OR
lastname='Carter'
结合 AND 和 OR 运算符
把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):
SELECT * FROM Persons WHERE (
FirstName='Thomas' OR
FirstName='William')
AND
LastName='Carter'
SQL ORDER 子句
先建立一个表,取名为orders
ORDER BY 语句用于对结果集进行排序
1.以字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果为:
2.以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
结果为:
3.以逆字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果:
4.以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
SQL
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行
语法:INSERT INTO 表名称 VALUES (值1, 值2,....)
也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
想上表中插入行:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
结果:
在指定的列中插入数据:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
SQL Update 语句
Update 语句用于修改表中的数据
语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
建立一个表:
更新某一行中的一个列,为上表中的为 lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
结果为:
更新某一行的若干列,修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
结果:
SQL DELETE 语句
DELETE 语句用于删除表中的行
语法:DELETE FROM 表名称 WHERE 列名称 = 值
删除上表中的”wilson“行
DELETE FROM Person WHERE LastName = 'Wilson'
结果为:
删除所有行
可以在不删除表的情况下删除所有的行。可以使表的结构、属性和索引都是完整的:
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表(用在例子中)
通过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%'
语句中的"%" 可用于定义通配符(模式中缺少的字母)
结果集:
从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:
使用SELECT 语句:SELECT * FROM Persons WHERE City LIKE '%g'
结果集:
从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:
使用SELECT 语句:SELECT * FROM Persons WHERE City LIKE '%lon%'
结果集:
也以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:
使用SELECT 语句:SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
结果集:
SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符,SQL 通配符必须与 LIKE 运算符一起使用。
使用 _ 通配符
从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:
使用SELECT 语句:SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
结果集:
从上面的 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
使用SELECT 语句:SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
结果集:
使用 [charlist] 通配符
从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
使用SELECT 语句:SELECT * FROM Persons WHERE City LIKE '[ALN]%'
结果集:
或者从上面的 "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')
结果集:
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'
结果集:
注意:在例子中要求是以字母顺序显示介于 "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'
结果集为:
显示 '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 Name
FROM Persons
结果集:
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 语句用于创建数据库中的表
语法:
数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:
| 仅容纳整数。在括号内规定数字的最大位数 |
| 容纳带有小数的数字。 "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) )
空的表类似于这样:
可使用 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 表:
1.如需在表中添加列,使用:ALTER TABLE table_name ADD column_name datatype语法
实例:想在表 "Persons" 中添加一个名为 "Birthday" 的新列
使用 SQL 语句:ALTER TABLE Persons ADD Birthday date(新列 "Birthday" 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型)
结果集:
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" 表
下面是 "access_log" 网站访问记录表的数据:
"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;
结果集:
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;
结果集:
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;
结果集:
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" 表: "access_log" 网站访问记录表的数据:
注意:在”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 输出结果如下:
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" 网站访问记录表的数据:
在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" 表:
现在计算计算 "OrderPrice" 字段的平均值
使用如下 SQL 语句:SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
结果为:
如果想筛选 OrderPrice 值高于 OrderPrice 平均值的客户
使用SQL语句:SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
结果为:
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
结果:这是 "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
结果:
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" 表:
比较两个日期,从上表中选取 OrderDate 为 "2008-12-26" 的记录
使用SELECT 语句:SELECT * FROM Orders WHERE OrderDate='2008-12-26'
结果集:
SQL MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中
语法:SELECT MAX(column_name) FROM table_name
MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值
以上表为例:希望查找 "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
我们选取上表中的选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为大写
使用sql语句:SELECT UCASE(LastName) as LastName,FirstName FROM Persons
结果:
sql LCASE ()函数
LCASE 函数把字段的值转换为小写
语法:SELECT LCASE(column_name) FROM table_name
把上表中的 "LastName" 列转换为小写
使用sql语句:SELECT LCASE(LastName) as LastName,FirstName FROM Persons
结果:
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
结果:
LEN 函数返回文本字段中值的长度
语法:SELECT LEN(column_name) FROM table_name
现在获取上表中的City" 列中值的长度
使用sql语句:SELECT LEN(City) as LengthOfCity FROM Persons
结果:
SQL ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数
语法:SELECT ROUND(column_name,decimals) FROM table_nam
参数 | 描述 |
column_name | 必需。要舍入的字段 |
decimals | 必需。规定要返回的小数位数。 |
实例:”价格“表
把上表中的名称和价格舍入为最接近的整数
使用sql语句:SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products
结果为:
SQL NOW() 函数
NOW 函数返回当前的日期和时间
在使用 Sql Server 数据库,使用 getdate() 函数来获得当前的日期时间
语法:SELECT NOW() FROM table_name
显示上”价格“表中当天的日期所对应的名称和价格
使用sql语句:SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
结果:
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
结果:
标签: