①在查询多个字段中,将所有的字段名写入
②select * from 表名;————效率低,可读性差,因为将星号转化为所有字段名需要耗费一定时间,所以在实际开发中不建议使用
给查询的列起别名
select 字段名 as/空格 别名 from 表名;
对于别名中带有空格的,或者别名是中文的,要用单引号或者双引号将别名引起来
PS:只是将显示的查询结果列名显示为别名,不修改原表的列名(select永远只有查询的功能,没有修改的功能) 在所有的数据库中,字符串统一使用单一号括起来,双引号在oracle中用不了,但是在mysql中能用
字段进行数学运算
select 字段名 数学运算式
比如 select sal *12 as ‘年薪’ from 表名
条件查询
定义
不是将表中的所有数据都查出来,而是查询出来符合条件的
格式:select ... from 表名 where 条件;
条件符号
= 等于
或者!= 不等于
< 小于
大于
>= 大于等于
between ... and ... 两个值之间,等同于 >= and 10,且B>10或者B10 and B>10 or B10且B>10,或者B10 and (B>10 or B= 60 AND score < 80 THEN '及格' WHEN score >= 80 THEN '优秀' ELSE '异常' END) AS REMARKFROM TABLE[/code]分组函数(多行处理函数)
其实都不会将NULL计入
count 计数 ————NULL不计入
sum 求和 ————NULL不计入
avg 平均值 ————NULL不计入分母
max 最大值
min 最小值
分组查询
定义
在实际应用中,可能有需求,需要先进行分组,再对每一组数据进行操作
格式:select from group by
执行顺序
select ... from ... group by ... order by ... ————执行顺序为from,where,group by,select,order by
因为select在执行时候,group by,即分组函数已经分完组了,而select xx from xx where xx>xx(max)这种,不可用,因为在执行where时还没有分组,但是在where中用到了分组函数
在一条select语句当中,如果有group by语句的话,select 后面只能跟:参加分组的字段,以及分组函数,其它的一律不能跟。————在oracle中严格这个标准,其他报错
执行顺序2
from——where——group by——having——select——order by
PS
比如,寻找每个部门,不同职位的最高薪资
select deptno,job,max(sal)from emp group by deptho,job
这样是先按部门分组,在同一个部门中,再按职位分组
having
having 对select,查询完之后的数据可以进一步过滤
having 和 where优先选择where,除非where实在做不了的, 比如,大于小于平均薪资
distinct
连接时加条件,满足这个条件的记录会被筛选出来
select a,b from A,B where A.a = B.b ;
内连接
语法
SQL92语法:select A.a,B.b from A ,B where A.a = B.b and 其他条件
缺点:结构不清晰,表的连接条件和后期进一步筛选的条件,都放到了where后面
SQL99语法:select A.a,B.b from A join B on A.a = B.b where 其他条件
优点:表连接的条件的独立的,放在on后边,如果需要进一步的筛选,再在后边加where
PS
在join的前边有个隐藏的inner,inner代表内连接
内连接之自连接
将某一个表,改两个别名,使其可以看成两个相同的表,然后再进行内连接
外连接
语法
right outer join 右外连接
left outer join 左外连接
select A.a,B.b from A left/right join B on A.a = B.b;
outer同样可以省略——right join,left join,区分内外连接看是否有l eft或right
PS
主表全部打印,次表按条件打印,没有则为NULL
两张以上的表怎么连接
select ...
from a
join b
on a和b的连接条件
join c
on a和c的连接条件
join d
on a和d的连接条件
PS:一条sql语句中,内连接和外连接可以混合,都可以出现
子查询
定义
select 语句中嵌套select语句,被嵌套的select语句称为子查询
可以出现的位置
select ..(select) ..
from ..(select)..
where ..(select)..
where中的子查询
比如查询某字段大于其最小值的,如果先查询最小值,再查询大于最小值的,就分成两句了 ,所以可以在where中写 where sal>(select min(sal) from xx);
from中的子查询
将子查询的查询结果当作一张临时表,再从表中查
select中的子查询
了解即可
一般可以替换为连接查询
union
定义
用来连接多个表,比如select ... union select ...,就将两次查询的结果连接成了一个表
优点