sql必知必会拾遗
sql必知必会拾遗
很少一点,课上老师讲的比较全,而且大部分函数只是在实验时会用。
检索数据
- 通常sql关键字使用大写,对列名和表名用小写。
SELECT
时使用DISTINCT
会作用在所有列。
限制结果
TOP
使用TOP
限制返回多少行。
如:
1 | SELECT TOP 5 sno FROM S; |
这是标准SQL,不同DBMS有各自的定义。
LIMIT
与OFFSET
返回从第几行到第几行的数据。
如:
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 | select rtrim(vend_name) || '(' || rtrim(vend_country) || ')' as vend_title |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZWN's blog!
评论