SQL总结
 

SQL总结  


0

from  https://blog.csdn.net/qq_38735934/article/details/81981113

1、只检索前五行数据

mysql: SELECT comment_id FROM t_comment LIMIT 5;

 

oracle:SELECT comment_id FROM t_comment WHERE ROWNUM <=5;

2、从第n行数据开始检索n行数据

SELECT id FROM user LIMIT n OFFSET n;

所以,LIMIT指定返回的行数。带OFFSET的LIMIT指定从哪儿开始。

3、sql中的注释问题

SELECT id  --这是一个注释

FROM user;

#这是一条注释

SELECT id FROM user;

/*这是一个多行注释

*/

SELECT id FROM user;

4、排序查找

#按照2.3列进行排序

SELECT id ,name,age FROM user ORDER BY 2,3; 

5、指定排序方向

DESC 降序   ASC升序(实际应用,没什么用,因为默认就是升序的)

6、范围值检查

SELECT ID FROM user WHERE age BETWEEN 5 AND 10;

 

7、空值检查

SELECT  comment_id FROM t_comment WHERE comment_text IS NULL;

8、and操作符和or操作符的顺序

WHERE子句可以包含任意数目的AND和OR操作符,但是存在优先级的问题。and的优先级高于or,解决办法是在过程中使用()

9、in操作符

in最大的优点就是可以包含其他的select语句,能动态的简历where字句。

10、通配符 %和_和[]

%匹配多个字符,_匹配单个字符,[]是用来指定一个字符集。

#找出id是1或者4开头的信息

SELECT comment_id FROM t_comment WHERE comment_id LIKE '[14]%'

11、聚集函数
AVG()              返回某列的平均值
COUNT()         返回某列的行数
MAX()              返回某列的最大值
MIN()               返回某列的最小值
SUM()              返回某列值之和

12、聚集不同值DISTINCT

平均值只考虑各个不同的价格:

SELECT AVG(DISTINCT prod_price) AS avg_price FROM Products WHERE vend_id = 'DLL01';

13、分组数据 GROUP BY 和 HAVING

SELECT uid, COUNT(*) AS name_count

 FROM t_user 
GROUP BY room_name;

 

 查询评论超过帖子评论超过10的帖子

SELECT content_id, COUNT(*) AS post
FROM t_content
GROUP BY comment_count
HAVING COUNT(*) >= 10;

 

where 和 having的区别:

# WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

where和having也可以结合使用:

例如:列出具有两个以上产品且其价格大于等于4的供应商:

SELECT id, COUNT(*) AS num_shop FROM Products WHERE prod_price >= 4 GROUP BY id HAVING COUNT(*) >= 2;

14、利用子查询进行过滤

#例如 现在有customer 表 和 order表

#查询订购了某商品的顾客

第一步:SELECT order_num FROM OrderItems WHERE product_id = "002";

第二步:根据查询结果:SELECT cust_id FROM order WHERE order_num IN (20007,20008);

合并上面的两条sql语句SELECT cust_id FROM order WHERE order_num IN (SELECT order_num FROM OrderItems WHERE product_id = "002");

15、内连接

SELECT stu_number,detail_graduate  FROM  student  INNER JOIN  detail  ON  student.stu_number = detail.stu_number;

 

16、外连接

要检索没有订单顾客在内的所有顾客

SELECT Customers.cust_id,Orders.order_num FROM Customers LEFT OUTER JOIN Orders ON Customers.cust_id = Orders.cust_id;

17、查询每门课都大于80的同学

SELECT name FROM table GROUP BY name HAVING MIN(fenshu)>80

---------------------
作者:星星点灯ht 
原文: https://blog.csdn.net/qq_38735934/article/details/81981113  

Share:

 

登录注册