IT修炼手册之SQL基础查询

Where 条件查询
这里写图片描述

group 与统计函数

group by

作用:把行 按 字段 分组;常见于统计场合,通过统计函数来综合应用:
max : 求最大
sum : 求总和
avg : 求平均
count:求总行数

Order by 排序功能

order by col desc/asc,col2 desc/asc,col3 desc/asc

1、按照 col 来排序

desc 是降序

asc 是升序

2、排序的字段选择是有顺序的。

2.1先按照 col 字段来排序

2.2如果 col 字段相同 按照 col2 来排序

2.3如果 col2 相同 按照 col3 来排序

Limit 限制条数

limit [offset, N],限制结果取 N 条。

从 第 n+1 行开始截取,截取 m 个给我返回,如果不写 n 的话 默认为 0

分页应用中最为典型

顺序问题

先是 where 然后 分组 然后 在 order by 然后是 limit where group by order by limit n,m

子查询
基本概念:子查询就是在原有的查询语句中,嵌入新的查询,来得到我们想要的结果集。
具体分类:
(1)where 型子查询
1、类比:
A= SELECT max(age) from t_stu select * from t_stu where age = A
2、select * from table where colName =(select colName from tableName where cloName2=。。。。)
3、把内层 sql 语句查询的结果作为外层 sql 查询的条件候选集
4、 例子:
select * from t_stu where age =(SELECT max(age) from t_stu)

(2)from 型子查询
1、类比:
tmp =SELECT name,class from t_stu where class=1 select * from tmp where;
2、SELECT * from (SELECT col1 ,col2,col3 from table_A where …) as tmp where …..
*代表 col1,col2,col3
3、把内层 SQL 的查询结果 作为临时表 供外层 SQL 使用。(外层 SQL 使用的表 是 内层 SQL 查询结果 虚拟的临时表)
4、例子:
select * from (SELECT name,class from t_stu where class=1) as tmp ;
5、子查询的弊端:
因为会创建临时表所以对容量耗费比较大(数据量比较大的情况)

主键

1、指定某个字段作为主键

2、这个字段在表里面是不允许重复的

3、通过主键来代表这条数据在表里面的唯一性

外键
Mysql 来维护外键关系危害:(t_stu 的 class_id 是外键,指定 t_class 的 id)

1、如果我们对 t_stu 表去 insert update,它会先去对 t_class 这个表做一个查询和检查, 你插入或者更改的数据里面 class_id 字段是否在 t_class 这个表里面存在。
2、如果我们对 t_stu 表在 insert 和 update 的时候 正好 t_class 也在做更新 或者 删除或者 新增操作,那么此时 t_stu 表就会被阻塞(等待)还有可能会出现死锁
严禁让 Mysql 来维护外键关系,一定要用代码逻辑来维护。

关联查询

关联两个表来查询
SELECT a.colName1,a.cloName2,b.colName,b.colName2 from table1 as a ,table 2 as b
where
a.colName=”..” and b.cloName2=”..”

连接查询

(1)左连接

A left join B; 以 A 表为依据,拿出 A 表里面的 class_id 去 t_class 表里面挨个去查,将结果汇总返回。链接依据是 on 后面的条件
如果条件不满足,A 表的数据将全部返回,B 表查到什么就是什么,不满足置为空。

(2)右连接

A rigth join B 以 B 表为依据,拿出 B 表里面的 id 去 t_stu 里面挨个去查,将结果汇总返回,连接依据是 on 后面的条件
如果条件不满足,B 表的数据将全部返回,A 表查到什么就是什么

(3)内连接

A 表和 B 表必须都满足 on 后面的条件才可以。

猜你喜欢

转载自blog.csdn.net/qq_37779333/article/details/81488183
今日推荐