这里是对数据库的一个操作,部分为伪代码,作用就是为了理解作用,这个可以作为一个字典,随时用到可以过来查。
一、去重(distinct)
SELECT DISTINCT sex FROM Studnet;
二、限制查询结果(limit, offset)
limit是限制返回数据的条数,而offset是限制从第几条数据开始返回,注意,是从0开始算,如果返回的数不够limit限制,也不会报错
SELECT prod_name FROM Products LIMIT 5 OFFSET 5;
注意:可以简写
SELECT prod_name FROM Products LIMIT 5,5
三、数据排序(order by)
注意,order by 一定要放在最后一条子句中,不然会报错。
SELECT prod_name FROM Products ORDER BY prod_name;
可以对多个列进行,按照左到右排序。
order by 默认是升序的(ASC),所以需要加一个条件让他逆序。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;
这个降序也适用于多列排序。
四、过滤数据(where)
where顾名思义,对于普通的查询来说,可能没法获取到我们想要的数据,所以需要加一些限制的条件,这时候where就出现了。
1、范围值检查(between)
SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;
2、空值检查(Null)
注意;空值不是0,null代表没有值
SELECT prod_name FROM Products WHERE prod_price IS NULL;
五、高级过滤(添加操作符)
1、and操作符
SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4;
就是多个条件的时候需要用到and操作符;
2、or操作符,这个就是或者的意思
3、知识点
and的优先级大于or,所以如果你需要其他结果,就加上括号去修改优先级。
4、in操作符
in用来指定范围,只要满足这个范围内的数据,那就可以查询出来。
SELECT prod_name, prod_price FROM Products WHERE vend_id IN ( 'DLL01', 'BRS01' ) ORDER BY prod_name;
5、not操作符
WHERE子句中的NOT操作符有且只有一个功能, 那就是否定其后所跟的任何条件。
SELECT prod_name FROM Products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name;
6、Like操作符(少用!)
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%';
%代表多个,_代表一个字符,[ ]代表里面的其中一个元素
正如所见,SQL的通配符很有用。但这种功能 是有代价的,即通配符搜索一般比前面讨论的其他 搜索要耗费更长的处理时间。这里给出一些使用通 配符时要记住的技巧。
不要过度使用通配符。
如果其他操作符能达 到相同的目的,
应该使用其他操作符。
在确实需要使用通配符时,也尽量不要把它 们用在搜索模式的开始处。
把通配符置于开 始处,搜索起来是最慢的。
仔细注意通配符的位置。如果放错地方,可 能不会返回想要的数据。 总之,通配符是一种极其重要和有用的搜索工 具,以后我们经常会用到它
六、创建计算字段
1、执行算术计算
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM OrderItems WHERE order_num = 20008;
七、使用数据处理函数
这个非常多,可以用到再去查询
1、文本操作函数
2、日期时间处理函数
3、数值处理函数
八、汇总数据
1、聚合函数
这里只做一个例子,后续的参考着写就行
select avg(price) as avg_price from shop;
九、分组数据(group by having)
SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id;
1、过滤分组
having和where的方法是相同的,用来过滤一些数据
SELECT cust_id, COUNT(*) AS orders FROM Orders GROUP BY cust_id HAVING COUNT(*) >= 2;
说明:HAVING和WHERE的差别 这里有另一种理解方法,WHERE在数据分组前进 行过滤,HAVING在数据分组后进行过滤。这是 一个重要的区别,WHERE排除的行不包括在分组 中。这可能会改变计算值,从而影响HAVING子 句中基于这些值过滤掉的分组。