1.条件查询
select 字段1,字段2,... from 表名 `where 字段 条件 值`;
条件运算符
- =
>
- <
>=
- <=
- !=
- and
- or
- in
- not in
- between…and
2.模糊查询
模糊查询其实也是条件查询
语法: select 字段1,字段2,… from 表名 where
字段 like '_值%'
;
- _ 匹配任意一个字符
- % 匹配任意多个字符
3.排序查询
语法: select 字段1,字段2,… from 表名
order by 字段 [desc|asc]
;
- desc 降序
- asc 升序,默认是升序
5.聚合函数
注意:
聚合函数执行完,返回的结果只有一行记录
与聚合函数一同出现的列必须出现在group by后
函数:
count(字段) : 对该列不为null的行计数
sum(字段): 对该列不为null的数据求和
avg(字段): 对该列不为null的数据求和再求平均值
min(字段): 对该列不为null的数据求最小值
max(字段): 对该列不为null的数据求最大值
语法:
放在select后from前,对查询的结果列进行运算
放在having后使用
6.去重函数
-- 查询年龄不重复的共有多少人 select count(distinct age) from stu;
distinct
7.分组查询
语法: select 字段1,字段2,… from 表名 [where 字段 条件 值]
group by 字段 having 字段 条件值
;
- group by 字段,根据指定字段分组(
所有未使用聚合函数的字段
)- having 字段 值, 分组后再过滤
having和where都是过滤
- where是分组前过滤,having是分组后过滤
- where后不能使用聚合函数,having可以聚合函数
8.限制查询
就是将查询完的数据,可以限制展现条数
语法: limit n – 限制输出指定n条,从第一条开始
limit x,y – 限制输出,从x下标处输出y条,第一条的下标是0
常用于分页操作
-- 第pageNo页 select * from stu limit (pageNo-1)*pageSize,pageSize
4.多表查询的策略
- 一对一 老公 --> 老婆 , 人 —> 身份证/户口本
- 一对多 皇帝 --> 妻妾 , 人 —> 房/车
- 多对多 订单 --> 商品
1.多表联查
1.合并结果集:是将多表查询的结果纵向合并
语法:
select field1,field2 from t1 union -- 合并结果集 select field1,field2 from t2
2.内链接语法:
select 字段列表 from 表1 inner join 表2 on 表1.字段 = 表2.字段 -- 内连接特点:只会查询满足关联条件的数据 -- 内连接标准写法 select * from stu inner join class on stu.cid = class.cid; -- 内连接可以简写成(推荐) select * from stu s,class c where s.cid = c.cid;
3.外连接语法: 外连接又分为左外连接,右外连接
select 字段列表 from 表1 left|right outer join 表2 on 表1.字段 = 表2.字段 -- 查询学生信息以及对应的班级信息 -- 左外 select * from stu s left outer join class c on s.cid = c.cid -- 右外 select * from stu s right outer join class c on s.cid = c.cid -- outer可以省略 select * from stu s left join class c on s.cid = c.cid
内外连接有什么区别?
内连接只查询符合关联添加的数据
外连接会保留不符合条件的数据
左外是以左表为主,左表中有不符合条件的数据也会保留
– 右外相反…
2.子查询 --查询的结果是一张虚拟表
子查询(subquery)也叫嵌套查询
- 将sql语句当表,写在from后面
- 将sql语句当条件,写在where后面
-- 求1008学生编号、姓名、组长编号和组长姓名 SELECT t1.sid, t1.sname, t1.groupLeaderId, t2.sname FROM stu t1,( SELECT * FROM stu WHERE sid = ( SELECT groupLeaderId FROM stu WHERE sid = 1008 ) ) t2 WHERE t1.sid = 1008