SQL 基础

1、去除重复的行

在SELECT 之后加上 DISTINCT 关键字

SELECT DISTINCT cust_id FROM account;

注意:产生无重复的结果集需要首先对数据进行排序,这对于大的结果集来说是相当耗时的。因此不必要为了确保取出重复行而随意使用DISTINCT。


2、排序

排序当然使用ORDER BY 字句,使用ASC 或 DESC 决定升序还是降序。

除此之外还可以根据表达式进行排序,如过根据号码后3为进行排序

SELECT cust_id FROM customer ORDER BY RIGHT(fed_id, 3);

还能根据数字占位符排序,如需要对查询结果返回第2和第5列排序:

SELECT emp_id, title, start_date, fname, lname FROM employee ORDER BY 2, 5;
这种做法并不常见,因为如果在select语句中增加新的列,可能会返回预料之外的结果。


3、成员条件

在一些情况下,不是需要显示表达式为特定的值或者某个范围,而是一个有限的集合。举个例子,在account表中找出所有产品代码为'CHK','SAV','CD','MM'的帐户:

SELECT account_id, product_id, cust_id, avail_balance FROM account WHERE product_cd = 'CHK' OR product_cd = 'SAV' OR product_cd = 'CD' OR product_cd = 'MM';
本例中where字句或许没有复杂到难以编写的程度,但想象一下如果表达式有10个甚至20个条件就令人畏惧了。对于这些情况可以使用操作符:

SELECT account_id, product_id, cust_id, avail_balance FROM account WHERE product_cd IN ('CHK', 'SAV', 'CD', 'MM');

4、匹配条件

查询名字以T开头的雇员:

SELECT emeep_id, fname FROM employee WHERE LEFT(lname, 1) = 'T';

尽管内建函数left()发挥了作用,但它并不具备灵活性,所以使用通配符是更好的做法:

SELECT emeep_id, fname FROM employee WHERE lname LIKE 'T%';
通配符%表示匹配任意字符,而 _ 表示匹配一个字符。

如果带通配符的字符串还不够灵活,那么可以使用正则表达式来构造搜索表达式:

SELECT emeep_id, fname FROM employee WHERE lname REGEXP '^[FG]';
Oracle数据库和SQL Server同样支持正则表达式。Oracle中使用regexp_like ,而SQL Server中允许在like中直接使用正则表达式。

5、NULL

  • 表达式可以为null,但不等于null
  • 两个null值彼此不相等

为了测试某个字段是否为null:

SELECT emeep_id, fname FROM employee WHERE lname IS NULL;
注意,这里使用了IS NULL 而不是 = NULL , 特别注意的是不能使用 = NULL 或者 !=NULL,应该使用 IS NULL 或者IS NOT NULL。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值