MySQL怎么查询一组数据_mysql_数据查询_单表查询

1.单表查询:

1.1选中表中若干列:

SELECT子句的可以是表中属性列,也可以是表达式,还可以是字符常量。

SELECT Sname,'year of birth:',2014-Sage FROM student;

1.2选定表中若干行:

1.去掉重复行:

想要去除查询结果中重复的行,可以使用DISTINCT,没有DISTINCT,则默认为ALL,即保留重复。

SELECT DISTINCT Sno FROM SC;

2.查询满足条件的元组:

a.比较大小

SELECT Sname FROM Student WHERE Sdept='CS';

SELECT Sname,Sage FROM Student WHERE Sage<20;

b.确定范围:

使用谓词BETWEEN……AND……和NOE BETWEEN……AND……查询属性值在(或不在)指定范围的元组

SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;

c.确定集合:

谓词IN可以用来属性值属于指定集合的元组。

SELECT Sname,Ssex FROM Student WHERE Sdept IN ('CS','BS','AS');

SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN ('CS','BS','AS');

d.字符串匹配:

谓词LIKE可以用于字符串匹配

一般语法格式:[NOT] LIKE '' [ESCAPE'']

通配符:

%(百分号):表示任意长度(可为0)的字符串

_(下划线):表示任意单个字符

如果用户要查询的字符串中本身就含有%或_,这时就要用ESCAPE''对通配符转义。

SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE'\' ;

自己在mysql上亲测,貌似不能用ESCAPE。

e.涉及空值的查询:

SELECT Sno,Cno FROM SC WHERE Grade IS NULL;

SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;

f.多重条件查询:

逻辑运算符AND和OR可用来连接多个查询条件。AND优先级高于OR,可用括号改变优先级。

谓词IN是多个OR运算符的缩写。

SELECT Sname,Ssex FROM Student WHERE Sdept='CS' AND Sage<20;

3.ORDER BY子句

用户可用 ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,默认值为升序。对于空值的处理,根据系统而定。

SELECT * FROM Student ORDER BY Sdept,Sage DESC;

4.聚集函数:

COUNT(*)

COUNT([DISTINCT|ALL] )

SUM([DISTINCT|ALL] )

AVG([DISTINCT|ALL] )

MAX([DISTINCT|ALL] )

MIN([DISTINCT|ALL] )

SELECT COUNT(*) FROM Student;

SELECT COUNT(DISTINCT Sno) FROM SC;

当聚集函数遇到空值时,除COUNT(*)外,都跳过空值只处理非空值。

注:WHERE子句中是不能用聚集函数作为条件表达式的。聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句。

5.GROUP BY

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

对查询结果分组的目的是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果。分组后聚集函数将作用于每一组,即每一组都有一个函数值。

SELECT COUNT(Sno) FROM student GROUP BY Sdept;

如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。

SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>=2;

先用 GROUP BY 子句按Sno进行分组,再用聚集函数COUNT对每一组进行计数;HAVING短语给出了选择组的条件,只用满足条件才会被选择出来。

注:WHERE子句和HAVING短语的区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组。 HAVING短语作用于组,从中选择满足条件的组。

WHERE子句中不能使用聚集函数作为条件表达式。

SELECT Sno FROM SC GROUP BY Sno HAVING AVG(Grade)>=80;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值