本文最后更新于 2024年11月9日
1.常量
2.字符常量
3.表达式
4.函数
5.别名
别名有特殊字符,加双引号
6.去重
查员工表涉及的部门编号,字段前加上 DISTINCT
7.拼接
加号的作用是数学运算不能连接字符串,两个操作数都为数值,则进行运算,其中一方为字符型,则试图将字符转换为数值,如果转换成功,继续运算,如果转换失败,则字符型的值转换为 0,只要其中一方为 NULL,结果为 NULL
拼接
NULL 和任何值拼接,结果都是 NULL
ifnull() 如果为空值
8.条件查询
9.模糊查询
百分号代表通配符,任意字符,也包含 0 个字符,下划线 _ 代表任意单个字符,
查询第三个字母是 n,第五个字母是 n
查询第二个字符就是下划线的特殊情况,要进行转义或切换通配符,否则直接__%查询会把所有查出
10.范围查询
BETWEEN AND 可以提高简捷度,结果包含区间值,临界值的位置不能颠倒,否则零行
11.IN 查询
IN 值必须相同或兼容,不能使用通配符
12.NULL 查询
查询 NULL 用 IS / IS NOT,等于和不等于号不能判断空值
安全等于可用于普通值也可以判断空值
13.排序查询
升序, ASC 可以省略
降序
条件排序
表达式排序
按照姓名长度
多字段排序
14.子查询
出现在其他语句中的查询语句就是子查询,也叫内查询。
子查询分为几种
- 标量子查询:结果集一行一列
- 列子查询:结果集一列多行
- 行子查询:结果集一行多列
- 表子查询:只要是查询结果就构成
子查询的使用规则
- 子查询必须放在小括号内。
- 子查询通常放在条件的右侧,例如
WHERE
、HAVING
子句中的条件判断。
- 标量子查询:通常配合单行操作符(如
=
、<>
等)使用。
- 列子查询:通常配合多行操作符(如
IN
、ANY
、SOME
、ALL
)使用。
子查询位置与支持情况
SELECT
后面:仅支持标量子查询。
FROM
后面:支持表子查询。
- **
WHERE
和 HAVING
**:支持标量子查询、列子查询,并且能支持行子查询。
- **
EXISTS
**:后面支持表子查询,通常用于判断某个条件是否存在。
14.1标量子查询
工资大于107号员工的人
与141号相同工种,工资比143号大的人
哪个部门最低工资大于50号部门的最低工资
工资最少
14.2 列子查询
location_id 是1400,1700的部门的员工
比job_id 是 ‘IT_PROG’的任意一个员工工资少的其他工种的员工
比job_id 是 ‘IT_PROG’的所有的员工工资都少的其他工种的员工
查询编号最小,工资最高的人 行子查询
14.3 SELECT 后的子查询
每个部门员工个数
102号员工的部门名
from后的子查询
每个部门平均工资等级
14.4 EXISTS后子查询
相关子查询,布尔类型,看查询是否有值,括号内写查询语句
查询有员工的部门
没有配偶的男生
15.连接查询
连接查询的分类:
按年代
按功能
- 内连接 :等值连接 非等值连接 自连接
- 外连接 :左外连接 右外连接 全外连接
- 交叉连接
15.1 笛卡尔积
所有行全部连接,因缺少条件造成
15.2 等值连接sql92
员工名和部门名
有奖金的员工名,工种号和工种名
每个城市的部门数量
15.3 非等值连接sql92
15.4 自连接sql92
员工名和上级的名字
15.5 等值连接sql99
INNER省略
15.6 非等值连接sql99
15.7 外连接
外连接
查一个表有一个表没有,主表都显示,副表和主表匹配的显示出来,没有匹配的用空填充。
15.7.1左外连接
left join 左边是主表
15.7.2 右外连接
right join 右边的是主表
没有员工的部门
15.7.3 交叉连接
笛卡尔积