注意事项:select格式,groupby 连接 子查询(MySQL)

 
 
#########select语句
##1.基础格式 
select 子句from 子句
where 表达式
group by 子句
having 表达式
order by 子句
limit 子句
union 操作符;
##2.关于group by
-- 特别注意:只有聚合函数和group by分组的字段才能出现在select语句中
-- 出现聚合函数sum,avg,count之类的时候   

select sex,count(sex)
from studentgroup by sex; -- select包含sex group by sex  

select x.id,x.name,sum(c.score),avg(c.score) ,count(*)
from student x,score c where s.id=c.id
group by x.id,x.name -- select 语句中id,name并不是聚合函数的,所以一定要同时加上having avg(c.score) >=80;-- having字段后面跟的是聚合函数的条件   

##3.关于连接  
-- 1.全连接 
select distinct kc.id,xskc.id
from kc,xskc   -- kc,xskc之间就形成了全连接  (笛卡尔积)
where kc.id=xskc.id ;-- 设置where子句变成等值连接

-- 2.内连接 inner join 和全连接有时候是可以通用的
select a.*,b.* from student a,b
where a.sex=b.sex;
select a.*,b.* from student a inner join b on a.sex=b.sex;
-- on之后的条件是连接表的条件 其他不属于连接条件的可以用where子句指定  
select a.*,b.* from student a inner join b on a.sex=b.sex
where a.id='206';


-- 2.自联结:在同一张表中查找具有相同列值的行
select a.学号,a.课程号,b.课程号,a.成绩
    from xs_kc as a  
join  xs_kc as b on a.成绩=b.成绩 and a.学号=b.学号 and a.课程号!=b.课程号;

select a.sex
from sc as a
left join sc as b on a.sex=b.sex 
where a.course='01' and b.course='02';
-- 注意这个时候都是限定cousre=1/2-- 如果仅用一张表是行不通的,所以有了自联结




##4.子查询 -- in/not in-- >/</=....操作符 :只返回一个结果-- >any,>all,>=any,....操作符 :当返回多个结果
-- exist的子查询返回逻辑值:在where子句中测试组查询返回的行是否存在

 select n-ame from student 
where not exist (select * from sc where studen.id=sc.id and sc.course=01);
-- 查询没有选修01课程的姓名


##5.where子句
注意不能再where子句中使用列别名

##6.count
count(*)返回检索行的总数目(不论是不是有缺失值)
count(列名)返回的数据中不包含缺失值




猜你喜欢

转载自blog.csdn.net/kylin_learn/article/details/81034425
今日推荐