一、sql查询语句格式
select [all|distinct] [表名.]{*|列名|表达式[as 新列名]}
[into :主变量[,:主变量]…]
from 表名[表别名], …
[where 条件表达式|子查询]
[group by 列名, …
[having 分组表达式]]
[{union|intersect |except}select…from…]
[order by 列名|列序号[asc|desc], …];
二、单表查询
where 子句——运算符
比较:<、<=、>、>=、=、<>、not + ~
确定范围:
between a and b、not between a and b
确定集合:in、not in
字符匹配:like,not like
空值:is null、is not null
多重条件:and、or、not
1----
select sname name, 'year of birth:' birth,
2003-sage birthday,lower(sdept) department
fromstudent;
2--- 选择表中的行
消除重复行: distinct(缺省为all)
selectdistinct sno fromstudent
3---betweenand
求年龄在~ (含, 22)之间的学生名及年龄(或不在~之间)
select sname, sagefromstudent
where sage between 18 and 22; (where sage>=18 and sage<=22);
4--- in or not in
select*from student
wheresdept in (‘ie’, ‘cs’, ‘ma’);(where sdept=‘ie’or sdept=‘cs’or sdept=‘ma’)
5--- like
格式:
[not] like ‘匹配串’[escape ‘换码字符’]
%: 表示任意长度(≥)的任意字符
_: 表示单个的任意字符
escape ‘换码字符’: 匹配串中‘换码字符’(转义符)之后的字(%,__),被定义为普通字符(不作通配符用)
列出课程名称中带有‘_’的课号及课名:
select cno ,cnamefrom coursewhere cname like ‘%"_%’escape ‘"’
求以‘data_base’开头且倒数第五个字符为’s’的课程名
select cnamefrom coursewhere cname like ‘data"_base%s_ _ _ _’escape’"’;
6--- null
select sno, cno from sc where grade is null;
7--- 分组与组函数(jbxue小编注:好好研究这些函数,在
数据库编程中,用的相当广泛了。)
只有出现在group by子句中的属性,才可出现在select子句中
组函数的使用:
count([distinct|all] *|列名)
sum([distinct|all] 列名)
avg([distinct|all] 列名)
max([distinct|all] 列名)
min([distinct|all] 列名)
组函数可用于select子句中的目标列表中,或在having子句的分组表达式中用作条件。
对分出的每一组用having进行筛选,筛选条件要用到组函数。
having 与where的区别:
where 决定哪些元组被选择参加运算,作用于关系中的元组
having 决定哪些分组符合要求,作用于分组
例:统计各系学生的人数。
select sdept,count(*) as stu_count
from student
group by sdept
例:求选修了课程的学生人数
select count(distinct sno) from sc;
例:求选修各门课的人数及平均成绩
select cno, count(sno), avg(gr) fromsc group by cno;
例:求选修课程在2门以上且都及格的学生号及总平均分
select sno, avg(grade) from sc group by sno having count(cno)>2 and min(grade)>=60;
8--- 排序
用order by子句对查询结果按照一个或多个列的值进行升/降排列输出,升序为asc;
降序为desc,空值将作为最大值排序。