sql语言 -高级

本文包括对数据表数据的增删改的高级操作,包括

TOP --显示条数

用于规定要返回的记录的数目。
注释:并非所有的数据库系统都支持 TOP 子句。
SQL SERVER语法:SELECT TOP number|percent column_name(s) FROM table_name
mysql语法:SELECT column_name(s) FROM table_name LIMIT number
orcle: SELECT * FROM Persons WHERE ROWNUM <= 5

SQL:SELECT TOP 5 * FROM Persons
    SELECT TOP 50 PERCENT * FROM Persons
mysql: SEKECT * FROM Person LIMIT 5
orcle: SELECT * FROM Person ROWNUM <=5

like —匹配符匹配

用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern

# 筛选出城市以N开头的人,%是通配符,
SELECT * FROM Persons WHERE City LIKE 'N%'
# 不含lon的人
SELECT * FROM Persons WHERE City NOT LIKE '%lon%'

# 以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City NOT LIKE '[ALN]%'

通配符

%	    替代一个或多个字符
_    	仅替代一个字符
[charlist]	字符列中的任何单一字符
[^charlist]或者[!charlist]    不在字符列中的任何单一字符

IN —二者之一

允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

选取所有姓氏为 Adams 和 Carter 的人:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

BETWEEN —大小筛选

BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2

以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'

# 不在之间的
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'

Alias —别名

为列名称和表名称指定别名(Alias)。
表的别名SELECT column_name(s) FROM table_name AS alias_name
列的别名:SELECT column_name AS alias_name FROM table_name
表的别名

从两个表中选择
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
不使用
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'

列的别名

SELECT LastName AS Family, FirstName AS Name FROM Persons

JOIN —多个表一起选

join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
从两个或更多的表中获取结果。我们就需要执行 join。

两个表选,不用join:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

列出所有人的定购
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
INNER JOIN:内连接,如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

以full join为例,假如初始表格:
在这里插入图片描述
全连接返回:
在这里插入图片描述

UNION

用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
默认取并集,去掉重复的,想要保留重复的,用NION ALL

SELECT INTO 语句

从一个表中选取数据,然后把数据插入另一个表中。

SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

备份到另一个数据库
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons

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

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P


VIEE —视图

视图是基于 SQL 语句的结果集的可视化的表。
如何创建、更新和删除视图。

CREATE VIEW

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

这个视图使用下列 SQL 创建:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

我们可以查询上面这个视图:

SELECT * FROM [Current Product List]

Northwind 样本数据库的另一个视图会选取 Products 表中所有单位价格高于平均单位价格的产品:

CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) 

我们可以像这样查询上面这个视图:

SELECT * FROM [Products Above Average Price]

另一个来自 Northwind 数据库的视图实例会计算在 1997 年每个种类的销售总数。请注意,这个视图会从另一个名为 “Product Sales for 1997” 的视图那里选取数据:

CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

我们可以像这样查询上面这个视图:

SELECT * FROM [Category Sales For 1997]

我们也可以向查询添加条件。现在,我们仅仅需要查看 “Beverages” 类的全部销量:

SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'

更新

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

删除

SQL DROP VIEW Syntax
DROP VIEW view_name

日期(不同)—日期函数

处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。

只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。

在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。
内建日期函数

SQL server:
GETDATE()	返回当前日期和时间
DATEPART()	返回日期/时间的单独部分
DATEADD()	在日期中添加或减去指定的时间间隔
DATEDIFF()	返回两个日期之间的时间
CONVERT()	用不同的格式显示日期/时间

只包含日期的表中,筛选特定日期:

SELECT * FROM Orders WHERE OrderDate='2008-12-26'

NULL

默认地,表的列可以存放 NULL 值。
NULL 值的处理方式与其他值不同。
NULL 用作未知的或不适用的值的占位符。
注释:无法比较 NULL 和 0;它们是不等价的。

查找null值

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL

查找非null的数据

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

isnull() (不同)

当要计算时,我们希望把null值设置为0,可以用函数:isnull(col_name, value)

SQL Server / MS Access:
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

数据类型(不同)

太多了,不一一列举

怎么测试用的是那个sql语言?isnull()?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值