--聚集函数
--AVG()返回list1列的平均值,只针对一列,多个列要多个AVG
select AVG(list1) as list2 from table_name;
--COUNT()返回list1列的行数,COUNT(*)返回表的行数,包括行空,即NULL,但是指定列就会忽略NULL
select COUNT(*) as alias_list from table_name;
select COUNT(list) as alias_list from table_name;
--MAX() MIN() SUM()指定列的最大值,最小值,总和;SUM会忽略NULL的行
--聚集函数中的参数,ALL为默认,还有distinct
--这里值list1列表中的不同值的平均值
select AVG(distinct list1) as list2 from table_name;
--可以同时使用多个聚集函数,用,隔开
--group by,这里按list分组,计算每个组的行数
select list , count(*) as alias_list from table_name group by list
--group by 在where语句之后,order by 之前
/*过滤分组
having是对分组过滤,where是对行过滤
*/
--这里过滤出行数大于2的组
select list,count(*) as alias_list from table_name group by list having count(*x)>2;
--一般使用group by就跟随者oreder by
--2个表,2表有共同处于,表1的一个数据在表2需满足情况,子查询,注意字表的select只能是单列,在子表的select除list2外不能出现第二个列
select list1 from table_name1 where condition in (select
list2 from table_name2 where condition)
--根据以上的sql语句,可以类推进行n表的查询,以及一个表的子查询
--子查询还能放在from之前,而不仅仅是where之后
select list1 (select list2 from table_name2 where table_name2.list3=table_name1.list4)as alias_list from table_name1
--table_name.list_name 完全限定名,一般用于子查询中,因为2个表有相同的名字,不使用则默认当前表
--联结表,2个表结合,n个表同理
--必须有一个where语句,否则表1的每一行会与表2的每一行匹配,是一个笛卡儿积
select list1,list2,list3 from table_name1,table_name2 where table_name1.list1=table_name2.list1
--令外一种写法,在这里用on代替where
select list1,list2,list3 from table_name2 INNER JOIN table_name1 om table_name1.list1=table_name2.list1
--as也能用作表的别名,但是表的别名不会在查询的结果中显示出来,而list的则会。
--自联结,同一个表
select t1.list1,t2.list2 from table_name as t1,table_name as t2
where t1.list3=t2.list3
--自然联结,两表,简单的来说where后面的列表相同,每列只返回一次
select t1.list1,t2.list2 from table_name1 as t1,table_name2 as t2
where t1.list3=t2.list3
--外联结,可能还包含没有关联行的那些表
select table_name1.list1,table_name2.list2 from table_name1 LEFT OUTER JOIN table_name2 on condition;
--LEFT OUTER JOIN 从左边的表选择所有行,right OUTER JOIN 从右边的表选择所有行
--UNION将多个select语句合在一起
select list1 from table_name where condition1
UNION
select list1 from table_name where condition2
/*
1.union必须至少2条select以上
2.union查询的列必须相同,表达式,聚集函数也是,但顺序不必相同
3.列数据必须兼容,类型不必完全相同,但是必须DBMS可以隐藏的转换。
*/
--union会自动消除同行,在union的多个select语句中,order只能出现一次,也是在最后