sql必知必会拾遗

很少一点,课上老师讲的比较全,而且大部分函数只是在实验时会用。

检索数据

  • 通常sql关键字使用大写,对列名和表名用小写。
  • SELECT时使用DISTINCT会作用在所有列。

限制结果

TOP

使用TOP限制返回多少行。

如:

1
SELECT TOP 5 sno FROM S;

这是标准SQL,不同DBMS有各自的定义。

LIMITOFFSET

返回从第几行到第几行的数据。

如:

1
SELECT sno FROM S LIMIT 5 OFFSRT 5;

返回从第六行起的五行数据。第一个数是检索行数,第二个指示从哪开始。

注意第一个被检索的是第零行,而不是第一行。

SQL虽然有一致的实现但不同DBMS有不同的方式

数据排序

  • ORDER BY一定是SELECT的最后一条子句,否则报错。
  • ORDER BY的列通常是要展示的列,但使用非检索的列也合法。

按多个列排序

如:

1
SELECT sno , name , gender FROM S ORDER BY name,sno;

排序规则:首先对所有元组按name排序,对有相同name的元组内按照sno排序,否则sno对排序不起作用(比如name都不一样)

按列位置排序

如:

1
SELECT sno, name, gender FROM S ORDER BY 2, 1;

SELECT出的属性的位置代替属性名,除此之外与上面相同。

数据过滤

NOT

功能就是否定后面的条件,如:

1
SELECT name FROM s WHERE NOT sno = '1';

通常在复杂字句中NOT非常有用,如NOT IN, NOT EXIST, NOT BETWEEN

计算字段

字符串拼接

例:Vendors表包含供应商名和地址信息。假如要生成一个供应商报表,需要在格式化的名称(位置)中列出供应商的位置。 此报表需要一个值,而表中数据存储在两个列vend_name和vend_country中。此外,需要用括号将vend_country括起来,这些东西都没有存储在 数据库表中。解决办法是把两个列拼接起来。

在SQL中的SELECT语句中,可使用一个特殊的操作符来拼接两个列。根据你所使用的DBMS,此操作符可用加号(+)或两个竖杠(||)表示。在MySQL和MariaDB中,必须使用特殊的函数。

说明:是+还是||? Access和SQL Server使用+号。DB2、Oracle、PostgreSQL、SQLite和Open Office Base使用||,下面以Oracle为例:

1
2
select rtrim(vend_name) || '(' || rtrim(vend_country) || ')' as vend_title
from vendors order by vend_name;