查询语法
select 【distinct】* form 表名
*代表所有列 ,查询时尽量不用select *, 效率非常低
a)查询某列
select 列名1,列名2 表名 from 表名
b)去重查询 distinct笔试
select distinct 列名 from 表名
若加多个列名用逗号隔开,代表两列数据都相同时才会去掉
c)对查询的列进行算术运算
select 列名1+列名2 from 表名
d)对查询结果重命名 as 笔试
select 列名1+列名2 as ‘新名’ from 表名
as可省略
eg: select math+english+chinese as ’总成绩’from student;
eg:将所有姓唐的学生总成绩增加%60 --》先写结果最后写条件
select name,(chinese+math+english)*1.6 from student
where name like ’唐%’
%为通配符 表示找唐xx/ ’%唐’则是找xx唐
e)where 子句
比较运算符:between...and 闭区间查找
in() 具体值查找(枚举)
like’’
not like’’
is null
> < >= <= !=
逻辑运算符:and
or
not
用as起的别名不能作为查询的列名
f)排序
select * from [表名] order by [列名] asc/desc;
此处的order by 后的列名 可以引用别名
order by 语句要放在命令的最后.
g)分页
select [列名] from [表名] where 条件 limit 启始位置,记录条数
select [列名] from [表名] where 条件 limit记录条数 offset 起始位置
聚合函数
a)count 函数
select count(*)|count(列名) from [table_name] where condition
count(*)会统计一共的记录数,count(列名)会排除为null的情况
b) sum函数返回满足where条件的行的和
select sum(列名) {,sum(列名)...} from tbl_name [where condition]
sum仅对数值起作用,否则无意义
c)avg函数
select avg(列名) [,avg(列名),...] from tbl_name [where condition];
d) max/min函数返回满足where条件的一列的大/小值
select max(列名) from tbl_name [where condition]
e) 对指定列进行分组
题中出现“每个”的字样,一般需要用到分组。
select column1, column2, .. from table group by column;
having和group by配合使用,对group by结果进行过滤
select avg(sal) as myavg from EMP group by deptno having myavg<2000
多表查询:
select column1, column2, .. from table1,table2 【where 条件】
若没有where子句,直接用from 字句查询两个表,则是用的笛卡儿积查询,这样就有大量的重复内容,因此需要用where子句
两个表中有列名相同的,则需要通过[表名].列名 指出需要用哪个表中的列名。
自查寻:
须在from后给表起别名,然后通过[别名.列名](select中也需这样引用) 的方式调用列名
合并多个表的select执行结果
union 去重合并
union all 不去重合并
SQL查询中各个关键字的执行先后顺序== from > on> join > where > group by > with > having > select > distinct > order by > limit==