内连接(取的是交集)指的是数据相符合的全部信息(两个表中的所有字段,前提是符合 on后面的连接条件)
eg:select e.id,e.name,d.name from emp e inner join dept d on e.dept_id=d.id;
左外连接,右外连接(取得是交集+全集(单个表))
左连接:select emp.name ,dept.name from emp left join dept on
emp.dept_id=dept.id ;
右链接:select emp.name ,dept.name from emp right join dept on emp.dept_id=dept.id ;
一对多关系
如果以多表为主(左连接以左边的表为主,右连接同理)则数据记录与多表的记录条数相同
如果以一表为主,则数据记录条数会发生变化,(eg:学生表共30条记录,占据三个部门,且有一个未分属部门,部门表中有5个部门,则最终的记录为 30-1+2 含义:以谁为主,谁要全出来,所以5个部门要全出来,29条记录占据三个部门,再加两个部门,则为最终的记录结果数) 实际是部门表全出,但是某一个部门有多条数据而已
子查询:
标量 -- 针对是值 用值去匹配
列-- 一列
行- 一行
子表 -- 超过一行一列
count(*) 统计行数,只要存在即可
count(列名) 统计不为null的
in 与between
| 对比项 | IN 操作符 | BETWEEN 操作符 | 
| 操作对象类型 | 值列表(固定值或子查询结果) | 范围(数值范围、日期范围等) | 
| 匹配逻辑 | 判断字段是否等于列表中的 某个值 | 判断字段是否在指定的 闭区间 [min, max] 内 | 
| 语法示例 | 
 | 
 | 
| NULL 处理 | 若列表包含 ,则 时返回 (需显式处理) | 若边界值为 ,则整个表达式返回 | 
| 场景 | 推荐操作符 | 示例 | 
| 筛选离散值(如部门 ID、状态) | 
 | 
 | 
| 筛选连续范围(如薪资、日期) | 
 | 
 | 
| 子查询结果匹配 | 
 | 
 | 
in 对应的是离散的值,betwee对应的是范围,c in(a,b) 对应的关系是 c= a or c= b
直接查询:允许结果集存在重复列名,数据库会自动重命名(但可能导致不可预测的列名)。
select tb_emp.*,tb_dept.name from tb_emp , tb_dept where tb_dept.id=tb_emp.dept_id and tb_dept.name='教研部'; 为什么这里没有说列明重复,但是当作为一个子类是却说列明可能重复
带上前缀也不行吗??? 查询时结果是不带表名的 ,只根据字段名匹配
子查询:要求列名必须唯一,否则报错
 
                             
                 
                 
                