sql单表查询

一般查询来说,就是用select进行查找,格式为:

select [ All | DISTINCT ] <目标列 表达式> [ , <目标列 表达式> ] ... from <表名或视图名> [ , <表名或视图名>] ... [where <条件表达式> ] [ group by <列名1> [having <条件表达式> ] ] [order by <列名2> [ ASC | DESC ] ];

整个select语句含义是,根据where子句的表达式,从from子句指定的基本表或视图中找出满足条件的元组,再按select子句中的目标表达式,选出元组中的属性值形成结果表。

如果有group by语句,结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果group by子句中带having短语,则只有满足条件的组才会输出。

如果有order by子句,结果表还要按<列名2>值的升序或降序排序。


普通的查找指定列,全部列就不说了。我们还可以查找表达式、字符串常量、函数等,甚至指定别名来改变查询结果的列标题。如:

select name , 'birth:' , 2012-age , lower(dept) from student;

其中name为指定列,'birth:'为字符串,2012-age为表达式, lower(dept)使dept列查出来的值变小写再显示出来。

select name NAME, 'birth:' BIRTH, 2012-age BIRTHDAY, lower(dept) DEPART from student;

就是指定查询结果的列标题为:NAME   BIRTH   BIRTHDAY   DEPART 


1、查询取消取值重复的行---用distinct

2、查询满足条件的元组,条件可能性如下:

比较:=,>,<,<=,>=,!=,<>,!>,!<;

确定范围:between and,  not between and

确定集合:in , not in 

字符匹配:like , not like 

空值: is null , is not null

多重条件: and ,or , not


字符串匹配,一般格式:

[not] like '<匹配串>' [escape '<换码字符>' ] 

含义是查找指定属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个整的字符串,也可以含有通配符%和_.

%(百分号)表示任意长度的字符串。如:a%b表示以a开头b结尾的任意长度的字符串。

select name from student where name like '刘%' ;

_(下划线)表示任意单个字符。如:a_b表示a开头,b结尾的长度为3的任意字符串。

select name from student where name like '刘__' ;

说明全名2个汉字。

注意。一个汉字占2个字符,就是说如果代表一个汉字要用__(2个下划线)


如果用户要查询的字符串本身含有_或者%,这时就要用escape '<换码字符>',对通配符进行转义了。

select cname from course where cname like 'db\_design' escape '\';

escape '\'表示'\'为换码字符,这样在匹配串中跟在\后面的_就不再具有通配符的含义,转义为普通的'_'字符。


空值的话只能用is null 不能用等号 = null


聚集函数(也叫聚合函数)

count();统计元组的个数或者一列中值的个数

sum();计算一列值总和(此列必须是数值列)

avg();计算一列值平均数(此列必须是数值列)

max();求一列值中最大值

min();求一列值中最小值

注意:where子句中不能用聚集函数作为条件表达式

猜你喜欢

转载自634082093-qq-com.iteye.com/blog/1756889