select语法:
select * ,字段名,表达式,函数调用,…
from 表1,表2,…
where 分组前的过滤条件
group by 分组字段
having 分组后的过滤条件
order by 字段名 排序规则
- 如何去除查询结果中的重复值?
–使用distinct关键字 去除重复值
–只能位于select和字段之间
–某些数据库版本中还能够排序
–去重(排重)、排序
select distinct pub from Book
- 排序 order by 子句
根据不同的字段对查询的结果进行排序
位置:select 语句的最后
本质:在返回查询结果后,改变结果的返回的顺序
order by 子句 一定在select语句的末尾
本质:查询所有结果后改变顺序
order by 字段名 排序规则,…
规则:升序 asc 从小到大 可默认不写
降序 desc 从大到小 - 数据库中的函数:
数据库提供函数的可以简化SQL
1、 单行函数
一条记录 ——> 一个结果
LEN(‘ABC’) 返回3 表示字符串的长度
2、 多行函数(组函数、聚集函数)
多条记录 ——> 一个结果
SUM() 求总和
AVG() 求平均数 avg(salary)
COUNT() 统计记录条数
MAX()求最大值
MIN() 求最小值
组函数经常和group by子句配合使用
语法:where之后
group by 字段 根据该字段分组
如果不指定group by子句,默认将所有的记录作为一组
如果需要在分组后进一步过滤,可以采用having子句 分组后的过滤 - 多表查询
需求:查询出员工的信息以及所在部门的名称
涉及两张表:emp dept
问题:为什么需要多表查询(多张表)?
之所以将部门的名称存于dept表中,
是因为:为了满足第三范式(3NF——拆表),避免了数据的冗余以及不一致问题
为了形成良好的设计,进行了拆表 数据分布在多张表中
实际开发中,需要使用一条sql语句同时查回多表的数据
语法:
from 表1,表2,表3,…
使用where子句过滤,去除笛卡尔积- 给表起别名的好处
1、 简化表名
2、 区分不同表的相同字段名 e.id d.id
3、 提高查询效率
- 给表起别名的好处