[转]sql查询语句总结
作者:cmscn 日期:2009-08-13
数据查询
查询查询格式:
Select */列名,.../表达式
from 表名/视图
where 条件
order by 列名1 asc,列名2 desc
group by 列名1,列名2 HAVING 过滤条件
查询指定列
Select Sno,Sname FROM Student
查询全部列
Select * FROM Student
更改查询结果中的列标题
old_name as new_name 或 new_name= old_name
查询学生表中的姓名和出生年份,并将系别小写显示
Select Sname,’Year of Birth:’,2004-Sage, LOWER(Sdept) FROM Student
消除取值重复的行
Select DISTINCT Sno FROM SC
限制结果集中返回的行数
select top 5 * from xs
select top 10 percent from xs
查询满足条件的元组
常用的查询条件
Select Sname FROM Student Where Sdept=‘CS’
Select Sname,Sage FROM Student Where Sage<20
Select Sname,Sage FROM Student Where NOT Sage>=20
Select DISTINCT Sno FROM SC Where Grade<60
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
判断表达式的值是否在子查询的结果中 :IN ,NOT IN
Select Sname,sgender FROM Student Where Sdept IN (‘IS’,’MA’,’CS’)
Select Sname,sgender FROM Student Where Sdept NOT IN (‘IS’,’MA’,’CS’)
谓词LIKE的一般语法格式为
[NOT] LIKE ‘<匹配串>’ [‘ESCAPE’ <换码字符>]
查找姓刘的学生的姓名,年龄,性别
Select Sname,Sno,sgender FROM Student Where Sname LIKE ‘刘%’
匹配规则
“%” 匹配零个或多个字符
“_” 匹配任意单个字符
Escape 定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待
如escape “\”,定义 \ 作为转义字符,则可用\%去匹配%,用\_去匹配_
查询课程名称以”db_”开头的所有课程情况
Select * from course where cname like ‘db\_%’ escape ‘\’
查询课程名称以”db_”开头,且倒数第3 个字符为I的课程和详细情况
Select * From course Where cname like ‘db\_%I__’escape ‘\’
查询 学号是98001的学生信息(注意:这里的学号是字符型)
Select * FROM Student Where Sno LIKE ‘98001’
Select * FROM Student Where Sno=‘98001’
查询“欧阳”姓的学生信息
Select Sname FROM Student Where Sname like ‘欧阳__’
查缺少成绩的学生的学号和相应的课程号
Select Sno,Cno FROM SC Where Grade IS NULL
查所有有成绩的记录的学生学号和课程号
Select Sno,Cno FROM SC Where Grade IS NOT NULL
查CS系年龄在20岁以下的学生姓名
Select Sname FROM Student Where Sdept=‘CS’ AND Sage<20
注意运算符优先级
Select sname, sage, sdept FROM student Where sage=18 or sage=19 AND sdept=‘cs’
排序,分组,多表查询,嵌套查询,集合查询
对查询结果排序
查询学生的学号和成绩,并按成绩的降序排列
Select Sno,Grade FROM SC Where Cno=‘3’ orDER BY Grade DESC
查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列
Select * FROM Student orDER BY Sdept,Sage DESC
使用集函数
主要集函数
COUNT ([DISTINCT|ALL] *) 统计元组个数
COUNT ([DISTINCT|ALL] <列名>) 统计一列中值的个数
SUM ([DISTINCT|ALL] <列名>)计算一列值的总和
AVG([DISTINCT|ALL] <列名>)计算一列值的平均值
MAX([DISTINCT|ALL] <列名>)求一列值中的最大值
MIN([DISTINCT|ALL] <列名>)求一列值中的最小值
例1:查询学生总人数 Select COUNT(*) FROM Student;
例2:查询选修了课程的学生人数 Select COUNT(DISTINCT Sno) FROM SC;
例3:计算1号课程的学生平均成绩 Select AVG(Grade) FROM SC Where Cno=‘1’;
例4:查询学习1号课程的学生最高分数 Select MAX(Grade) FROM SC Where Cno=‘1’;
对查询结果分组
group by 列名 [having 条件表达式]
group by将表中的元组按指定列上值相等的原则分组,然后在每一分组上使用聚集函数,得到单一值
having则对分组进行选择,只将聚集函数作用到满足条件的分组上
例:查询各个课程号与相应的选课人数
Select Cno,COUNT(Sno) FROM SC GROUP BY Cno;
查询选修了3门以上课程的学生的学号
Select Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3
比较连接查询
连接查询中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:
[<表名1>.] <列名1> <比较运算符> [<表名2>.] <列名2>
其中比较运算符主要有:=、>、< 、 >= 、 <= 、 !=。
当连接运算为 = 时,称为等值连接。使用其他运算符称为非等值连接。
连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但不必是相同的。
将Student与SC中同一学生 的元组连接起来
Select Student.*,Sc.* FROM Student,SC Where Student.Sno=SC.Sno
复合条件连接
Select Student.Sno,Sname FROM Student, SC Where Student.Sno=SC.Sno AND SC.Cno=‘2’ AND SC.Grade>90
Select Student.Sno, Sname, Cname, Grade FROM Student, SC, Course Where Student.Sno=SC.Sno AND SC.Cno=Course.Cno
嵌套查询
在SQL语言中,一个Select-FROM-Where语句称为一个查询块。
将一个查询块嵌套在另一个查询块的Where子句或HAVING短语的条件中的查询称为嵌套查询。
Select Sname FROM Student Where Sno IN(Select Sno FROM SC Where Cno=‘2’);
带有比较运算符的子查询
Select Sno, Sname, Sdept FROM Student Where Sdept = (Select Sdept FROM Student Where Sname=‘刘晨’)
into 子句
可将查询出的数据村入另一个表中
举例:
由学生表创建“计算机系学生”表,包含学号和姓名列
select 学号,姓名into 计算机学生from xs where 专业名=‘计算机’
集合查询
并操作UNION的使用
Select * FROM Student Where Sdept=‘CS’ UNION Select * FROM Student Where Sage<=19
查询既选修了课程1又选修了课程2的学生
Select Sno FROM SC Where Sno IN (Select Sno FROM SC Where Cno=‘1’) AND Sno IN (Select Sno FROM SC Where Cno=‘2’);
评论: 0 | 引用: 0 | 查看次数: 445
发表评论