进阶1:基础查询

语法:
SELECT 要查询的东西
【FROM 表名】;

  1. 类似于Java :System.out.println(要打印的东西);
  2. 特点:
  3. ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
  4. 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数

进阶2:条件查询

条件查询:根据条件过滤原始表的数据,查询到想要的数据
语法:
select
要查询的字段|表达式|常量值|函数
from

where
条件 ;

  1. 分类:
  2. 一、条件表达式
  3. 示例:salary>10000
  4. 条件运算符:
  5. > < >= <= = != <>
  6. 二、逻辑表达式
  7. 示例:salary>10000 && salary<20000
  8. 逻辑运算符:
  9. and(&&):两个条件如果同时成立,结果为true,否则为false
  10. or(||):两个条件只要有一个成立,结果为true,否则为false
  11. not(!):如果条件成立,则not后为false,否则为true
  12. 三、模糊查询
  13. 示例:last_name like 'a%'

进阶3:排序查询

  1. 语法:
  2. select
  3. 要查询的东西
  4. from
  5. where
  6. 条件
  7. order by 排序的字段|表达式|函数|别名 asc|desc

进阶4:常见函数

4.1 单行函数

1、字符函数
concat拼接
substr截取子串
upper转换成大写
lower转换成小写
trim去前后指定的空格和字符
ltrim去左边空格
rtrim去右边空格
replace替换
lpad左填充
rpad右填充
instr返回子串第一次出现的索引
length 获取字节个数

  1. 2、数学函数
  2. round 四舍五入
  3. rand 随机数
  4. floor向下取整
  5. ceil向上取整
  6. mod取余
  7. truncate截断
  8. 3、日期函数
  9. now当前系统日期+时间
  10. curdate当前系统日期
  11. curtime当前系统时间
  12. str_to_date 将字符转换成日期
  13. date_format将日期转换成字符
  14. 4、流程控制函数
  15. if 处理双分支
  16. case语句 处理多分支
  17. 情况1:处理等值判断
  18. 情况2:处理条件判断
  19. 5、其他函数
  20. version版本
  21. database当前库
  22. user当前连接用户

4.2分组函数

  1. sum 求和
  2. max 最大值
  3. min 最小值
  4. avg 平均值
  5. count 计数
  6. 特点:
  7. 1、以上五个分组函数都忽略null值,除了count(*)
  8. 2sumavg一般用于处理数值型
  9. maxmincount可以处理任何数据类型
  10. 3、都可以搭配distinct使用,用于统计去重后的结果
  11. 4count的参数可以支持:
  12. 字段、*、常量值,一般放1
  13. 建议使用 count(*)

进阶5:分组查询

语法:
select 查询的字段,分组函数
from 表
group by 分组的字段

  1. 特点:
  2. 1、可以按单个字段分组
  3. 2、和分组函数一同查询的字段最好是分组后的字段
  4. 3、分组筛选
  5. 针对的表 位置 关键字
  6. 分组前筛选: 原始表 group by的前面 where
  7. 分组后筛选: 分组后的结果集 group by的后面 having
  8. 4、可以按多个字段分组,字段之间用逗号隔开
  9. 5、可以支持排序
  10. 6having后可以支持别名

进阶6:多表连接查询

  1. 笛卡尔乘积:如果连接条件省略或无效则会出现
  2. 解决办法:添加上连接条件

6.1、传统模式下的连接 :等值连接——非等值连接

  1. 1.等值连接的结果 = 多个表的交集
  2. 2.n表连接,至少需要n-1个连接条件
  3. 3.多个表不分主次,没有顺序要求
  4. 4.一般为表起别名,提高阅读性和性能

6.2、sql99语法:通过join关键字实现连接

  1. 含义:1999年推出的sql语法
  2. 支持:
  3. 等值连接、非等值连接 (内连接)
  4. 外连接
  5. 交叉连接
  6. 语法:
  7. select 字段,...
  8. from 1
  9. inner|left outer|right outer|crossjoin 2 on 连接条件
  10. inner|left outer|right outer|crossjoin 3 on 连接条件
  11. where 筛选条件】
  12. group by 分组字段】
  13. having 分组后的筛选条件】
  14. order by 排序的字段或表达式】
  15. 好处:语句上,连接条件和筛选条件实现了分离,简洁明了!

6.3、自连接

案例:查询员工名和直接上级的名称

sql99

  1. SELECT e.last_name,m.last_name
  2. FROM employees e
  3. JOIN employees m ON e.`manager_id`=m.`employee_id`;

sql92

  1. SELECT e.last_name,m.last_name
  2. FROM employees e,employees m
  3. WHERE e.`manager_id`=m.`employee_id`;

进阶7:子查询

含义:

  1. 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询
  2. 在外面的查询语句,称为主查询或外查询

特点:

  1. 1、子查询都放在小括号内
  2. 2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
  3. 3、子查询优先于主查询执行,主查询使用了子查询的执行结果
  4. 4、子查询根据查询结果的行数不同分为以下两类:
  5. 单行子查询
  6. 结果集只有一行
  7. 一般搭配单行操作符使用:> < = <> >= <=
  8. 非法使用子查询的情况:
  9. a、子查询的结果为一组值
  10. b、子查询的结果为空
  11. 多行子查询
  12. 结果集有多行
  13. 一般搭配多行操作符使用:anyallinnot in
  14. in 属于子查询结果中的任意一个就行
  15. anyall往往可以用其他查询代替

进阶8:分页查询

应用场景:

  1. 实际的web项目中需要根据用户的需求提交对应的分页查询的sql语句

语法:

  1. select 字段|表达式,...
  2. from
  3. where 条件】
  4. group by 分组字段】
  5. having 条件】
  6. order by 排序的字段】
  7. limit 【起始的条目索引,】条目数;

特点:

  1. 1.起始条目索引从0开始
  2. 2.limit子句放在查询语句的最后
  3. 3.公式:select * from limit page-1)*sizePerPage,sizePerPage
  4. 假如:
  5. 每页显示条目数sizePerPage
  6. 要显示的页数 page

进阶9:联合查询

引入:
union 联合、合并

语法:

  1. select 字段|常量|表达式|函数 from 表】 where 条件】 union all
  2. select 字段|常量|表达式|函数 from 表】 where 条件】 union all
  3. select 字段|常量|表达式|函数 from 表】 where 条件】 union all
  4. .....
  5. select 字段|常量|表达式|函数 from 表】 where 条件】

特点:

  1. 1、多条查询语句的查询的列数必须是一致的
  2. 2、多条查询语句的查询的列的类型几乎相同
  3. 3union代表去重,union all代表不去重