1.统计函数
1)算数运算符:+ - * / %(取模运算)
SELECT number,dri_length,dri_area,dri_area/dri_length AS 'dri_factor',200 AS 'dri-fee' FROM venbranch_infor
注意:AS 后的列名加上单引号
2)字符串连接符:+
SELECT CustomerID,City +' '+ Address AS 'CA' FROM Customers WHERE CustomerID = 'ALFKI'
3)聚合函数
SELECT MAX(UnitPrice) AS max_unit,MIN(UnitPrice) AS min_unit,SUM(UnitPrice) AS sum_unit,AVG(UnitPrice) AS avg_unit FROM OrderDetails
WHERE OrderID BETWEEN 10248 AND 10255;
COUNT(column_name):返回该列中行记录的个数,不包含值为NULL的行
COUNT(*):返回该表中所有行数
2.GROUP BY 和 HAVING :HAVING子句是用来对GROUP BY 的结果进一步筛选
SELECT OrderID,AVG(UnitPrice) as avg_unit FROM OrderDetails WHERE OrderID BETWEEN 10248 AND 10255 GROUP BY OrderID
用HAVING子句对GROUP BY 子句设置条件的方式与WHERE子句对SELECT子句设置条件的方式类似,但HAVING子句可以包含聚合函数。
SELECT OrderID,AVG(UnitPrice) as avg_unit FROM OrderDetails WHERE OrderID BETWEEN 10248 AND 10255 GROUP BY OrderID
HAVING AVG(UnitPrice)>15;此处若使用别名avg_unit>15是无效的
3.嵌套查询:一个SELECT语句中嵌入另一个完整的SELECT语句
1)使用比较运算符的子查询
SELECT * FROM OrderDetails WHERE UnitPrice >(SELECT AVG(UnitPrice) FROM OrderDetails)
2)使用IN的子查询
SELECT * FROM OrderDetails WHERE OrderID IN (SELECT OrderID FROM OrderDetails WHERE UnitPrice=14)
3)使用EXISTS的子查询:实际上不产生任何数据,它只返回TRUE和FALSE
SELECT * FROM OrderDetails WHERE EXISTS (SELECT * FROM OrderDetails WHERE UnitPrice=14)
注意:EXISTS字前面没有列名、常量或其他表达式。由于不产生数据,因此子查询中用*
事实上服务器在对外部查询时的每一行数据处理时都需要进行一次嵌套查询,但这个嵌套查询不需要执行完,只要发现条件成立,就会退出子查询。因此从查询效率考虑,能使用连接查询就不要使用嵌套查询,能使用EXISTS查询就不要使用IN查询。
4.视图
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生了变化,从视图中查询出来的数据也就随之改变了。对视图中数据的增删改查都将转换成对对应基本表中数据的增删改查。
CREATE VIEW viewname(column_name1,column_name2,...)
AS 子查询
for instance:
CREATE VIEW CS_Student
AS
SELECT Sno,Sname,Sage FROM Student WHERE Sdept = 'CS';
视图的作用:
1)视图能简化用户的操作。可使多张表连接成一张虚表,用户只需对该虚表进行简单的查询
2)视图能使用户以多种角度看待同一数据。方便多用户共享同一数据库
3)视图对重构数据库提供了一定程度的逻辑独立性。外模式---视图,模式---基本表,内模式---存储文件
4)视图能对机密数据提供安全保护。对不同的用户提供不同的视图,使机密数据不出现在不应该看到这些数据的人的视图上
5)适当的利用视图可以更清晰的表达查询。