1数据查询
select (*/查询属性列/计算表达式) //查询的对象
from (查询所需表) //查询的范围
where //查询的条件
group by
order by //对查询结果的处理
1 单表查询
1.选择表中的若干列
1.select Sno,Sname from Student //查询属性列
2.select * //查询所以列
3.select 2014-Sage //目标表达式是表达式形式 无列名,需要起别名
4.select lower(Sdept) //院系属性列在表中用小写表示 无列名,需要起别名
别名:select 属性 as/空格 别名
select 2014-Sdept birthday
select 2014-Sdept as birthday
2.选择表中的若干元组
where子句
插叙条件 | 谓词 |
---|---|
比较 | =,>,<,>=,<=,!=,!>,!< |
确定范围 | between and,not between and |
确定集合 | in,not in |
字符匹配 | like,not like |
空值 | is null,is not null |
多重条件 | and,or,not |
select distinct Sno from Student //distinct (去重) all(默认)
where Sage<20;
where Sage between 20 and 23;
where Sdept in('CS',"MA");
where Sname like '刘%'; //%任意长度,_一个长度,
where Sname like 'DB\_Design' escape'_'; //escape设置一个换码字符,这个字符后面的转义字符为普通字符
where Grade is null;
where Sdept='CS' and Sage<20;
3.order by 字句
排序字句:ASC(升序),DESC(降序)
order by Grade desc //按成绩降序排列
4.聚集函数
语句 | 作用 |
---|---|
count(*) | 统计元组个数 |
count (distinct/all 列名) | 统计一列多少个 |
sum (distinct/all 列名) | 计算一列值的和(int) |
avg (distinct/all 列名) | 计算一列值的平均数(int) |
max (distinct/all 列名) | 求一列中最大值 |
min (distinct/all 列名) | 求一列中最小值 |
select count(*)
select avg(Grade)
5.group by 字句
group by 属性 :对该属性相同的值分为一组,与having搭配删选使用MySQL:having能代替where,where不能代替having。SQL server不支持。
select Sno,AVG(Grade)
from SC
group by Sno //学号相同的为一组
having AVG(Grade)>=90 //删选一组的平均成绩不小于90的
2 连接查询
1.等值与非等值的连接
格式:表一 . 列 <比较运算符> 表二 . 列 比较运算符:=、>、<、>=、<=、!=
表一 . 列 between 表二 . 列 and 表三 . 列
如果属性名在连接的表中是唯一的,可以省略表名前缀。
在等值连接中把目标列中重复的属性列去掉为自然连接
当比较运算符为==时,为等值连接,其余为非等值连接。
2.自身连接
一个表与自身进行连接。
通常要为该表起两个别名First,Second
where First . Cpon = Second . Cno
3.外连接
把不满足条件的元组也保存在结果中
必须写在form中
select *
from Student left outer join sc on(Student.Sno=SC.Sno);
或
from Student left outer join sc using(Sno);
//USING()函数的作用是简化等值连接语句
4.多表连接
多表连接时一般需要符合条件连接查询