SQL检索输出的时候,如果我想按照一定顺序输出怎么实现呢?还是拿上期的数据做栗子,假设根据stock_code做排序,可以通过下面的2句实现:
select * from stock_base order by stock_code;select * from stock_base order by stock_code asc;
如果想倒序的话,则应该用
select * from stock_base order by stock_code desc;
SQL检索的排序是通过order by + 字段名实现的,后面有两个关键字:asc、desc。asc是正序排序,这个关键字可以忽略不写。
order by后面可以加多个字段,每个字段后面指定是正序排序还是倒序排序。比如:
select * from stock_base order by stock_code asc, stock_name desc;
这里是先根据stock_code做正序排序,排完序后再根据stock_name做倒序排序。
再来说下分组吧,分组涉及2个新的关键字:group by, having。先来看下group by吧,这里我想统计一下sz开通的有多少,sh开头的多少,SQL怎么实现呢:
select substr(stock_code, 1, 2) diff, count(1) count from stock_base group by substr(stock_code, 1, 2);
分析一下这句SQL吧,这里用到了substr()函数来切割stock_code,从第一个开始,取2个字符,然后根据这2个字符进行分组,分别计算有多少数量,字段后面的diff、count都是前面那个运算后结果列的别名。运行结果如下:
说到过滤,SQL里其实是分为2种的,一种是where条件语句,一种是having条件语句。有什么区别呢?简单点说吧,where语句是用在分组前的,having语句是用在分组后的。上面这个结果,如果我要看除了sh以外的件数,这里用到了不等于符号,语句是这样的:
select substr(stock_code, 1, 2) diff, count(1) count from stock_base group by substr(stock_code, 1, 2) having diff != 'sh';
我觉得where和having是有很多共同点的,关键还是看怎么去使用。基础的SQL检索语句的语法这里已经捋了一下,后续要是想到再补吧。下期介绍MySQL的几个常用函数。