数据库查询总结

数据库查询是数据库的核心操作。

对网站的开发基本上大多数时间都是用在对数据的增删查改上。

一.数据库查询知识框图

虽然查询方法大体上可以做出如上图分类,但通过学习你会发现其实许多种查询方法是相互交叉的运用的。

二.单表查询

单表查询指的是仅涉及一个表的查询,相对来说比较简单,但是用到的各种SQL语法却是复杂查询的基础。

1.选择表中若干列

选择表中若干列或全部,其实就是关系代数中的投影运算 

SELECT SNO,SNAME FROM Student;

2.选择表中若干元组

选择表中若干行,其实就是通过where子句添加查询条件实现的

SELECT SNO,SNAME FROM Student WHERE SDEPT='CS';
//查询选了计算机专业学生的学号和姓名

SELECT SNO,SNAME FROM Student WHERE SNAME like '吴%';
//查询姓的学生的学号和姓名

 

常用到的查询条件有:

 查询条件谓词
比较=, > , < , >= , <= , != , <> , !> ,!<;NOT+上述比较运算符
确定范围BETWEEN AND,NOT BETWEEN AND
确定集合                IN, NOT IN
字符匹配LIKE,NOT LIKE
空值IS NULL, IS NOT NULL
多重条件(逻辑算)AND ,OR ,NOT

 

 

 

 

 

 

 

 DISTINCT去掉重复行

 

3.ORDER BY子句

ORDER BY子句可以对查询结果按照一个或者多个属性的升序(ASC)或者降序(DESC)排列,默认为升序

SELECT SNAME,SNO FROM Student  where SDEPT='通信工程' order by SAGE DESC;

4. 聚集函数

为了方便对查询结果做一些处理,SQL提供了许多聚集函数。主要有:

COUNT(*)统计元祖个数
COUNT ([DISTINCT|ALL] 列名)统计一列中值的个数
SUM ([DISTINCT|ALL] 列名)计算一列值的总和(此列必须是整形数)
AVG ([DISTINCT|ALL] 列名)计算一列值的平均值(此列必须是整形数)
MAX ([DISTINCT|ALL] 列名)求一列值中的最大值
MIN ([DISTINCT|ALL] 列名)求一列值中的最小值

 

 

 

 

 

 

 

DISTINCT关键词由于去掉重复值

SELECT COUNT(*) FROM Student;
//求行数,即求学生总人数

5.GROUP BY子句

GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。

select CNO,COUNT(SNO) from SC GROUP BY CNO;
//求各个课程号及相应的选课人数

select SNO from SC group by SNO HAVING COUNT(*)>3;
//查询选修了三门以上课程号的学生号

注意:

  • WHERE子句中式不能使用聚集函数作为条件表达式的。
  • 聚集函数只能用于SELECT子句和GROUP BY 中的HAVING子句,即使用having语句应该结合GroupBy语句
  • where过滤行,having过滤分组。

  • having支持所有where操作符。

例:查询平均成绩大于等于80分的学生学号和平均成绩。
下面的语句是不对的:
SELECT SNO,AVG(GRADE) FROM SC WHERE AVG(GRADE)>=90 GROUP BY SNO;
因为where子句中不能使用聚集函数作为条件表达式,正确的查询语句应该是:
SELECT SNO,AVG(GRADE) FROM SC GROUP BY SNO HAVING AVG(GRADE)>=80;


 三.连接查询

 

 

 

 

 

 

 

 

 

 

  • 17
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值