系列文章目录
数据库的查询语言是非常重要的一部分,必须掌握
目录
一、SQL语言规范
1.书写规范
MySQL 在 Windows 环境下大小写不敏感
MySQL 在 Linux 环境下大小写敏感
数据库名、表名、表的别名、变量名是严格区分大小写的
关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的
2.注释
单行注释: #注释文字(MySQL特有的方式)
单行注释: -- 注释文字(--后面必须包含一个空格)
多行注释: /* 注释文字 */
3.命名规则
字母,数字,下划线,@,#,$符合组成
首字母不能是数字和$
不允许是Mysql的关键字以及保留字
不允许出现空格和特殊字符
长度小于128位
必须保证所有的()、单引号、双引号是成对结束的 必须使用英文状态下的 半角输入方式
字符串型和日期时间类型的数据可以使用单引号(' ')表示
列的别名,尽量使用双引号(" "),而且不建议省略 as
二、基础查询
基本语法:select 列名 from 表名
as可以设置别名
distinct去重
空值运算
ifnull(expression,replacement)如果expression为空ifnull()函数返回replacement,如果不为空返回expression值
条件查询
条件查询中常用的比较运算符有: 逻辑比较操作符 = > < >= <= !=
逻辑运算符:and or not (and比or的优先级高,如果想要哪个优先级高加括号就可以)
特殊运算符:between and ,in(),like ,is null
like ,模糊查询,在值不精确的时候使用
% ,通配0到多个字符
_ ,通配一个字符,并且是一定要有一个字符
\ ,转义字符
三、SQL运算符
比较运算符
escape可以指定转义字符
位运算符、逻辑运算符、算数运算符不做笔记(和java类似)
四、排序分页
排序
order by
1. order by语句,只对查询记录显示调整,并不改变查询结果,所以执行权最低,最后执行
2. 排序的默认值是asc:表示升序,desc:表示降序
3. 如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值
排序不会改变表结构,之后在查询出来之后进行排序
分页
limit 起始索引(查询页码 - 1)* 每页显示记录数 查询记录数
注意事项:
1. 起始索引从0开始.计算公式 : 起始索引 = (查询页码 - 1)* 每页显示记录数
2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数
五、多表查询
等值连接
等值连接又称为内连接(自然连接),将两张具有关联关系的列的数据连 接起来,连接查询where子句中用来连接两个表的条件称为连接条件或者 连接谓词,当连接运算为=的时候,称之为等值连接。
select col_name....from table_name1,table_name2where [ table_name1 ] . [ col_name ] = [ table_name2 ] . [ col_name ]或select col_name....from table_name1 inner join table_name2on [ table_name1 ] . [ col_name ] = [ table_name2 ] . [ col_name ]
不等值连接
两张没有关联关系(主外键)的表,通过某个特定场景的业务连接起来, 为不等值连接
自连接
自连接就是自己和自己进行连接,需要取别名
外连接
左外连接:保留表关系中所有匹配的数据记录,包含关联左边表中不匹配的数据记录
右外连接:保留表关系中所有匹配的数据记录,包含关联右边表中不匹配的数据记录。
左外连接就是在left join的左边的表全部查询出来,右边表有空值
内连接
隐式内连接
显示内连接 inner join on
六、单行函数
单行函数接受参数返回一个结果,只对一行进行变换,每行返回一个结果,可 以嵌套,参数可以是一列或一个值。
数值函数
字符串函数
时间日期
七、聚合函数
聚合函数,一般会操作多组数据,并对每一组中的某个列,执行计算并返 回单一的值。
基础聚合函数:max min count avg sum
聚合函数出现的位置:select having orderby后面
where后面绝对不能出现
group by子句
分组查询语句中,如果select、having语句后面出现组函数,那么 select、having后面没有被组函数修饰的列,就必须出现在group by 后面!
select执行顺序
select 字段 1, 字段 2from 表where 条件group by 分组条件having 分组筛选条件order by 排序条件limit ( n - 1 ) * size,size;
select语句执行顺序:
1. from子句,组装来自表的数据,有可能是多张表
2. where子句,基于指定的条件对记录行进行筛选
3. group by子句,将数据划分为多个分组
4. 使用聚合函数对没个小组中的数据进行计算
5. having子句,进行条件筛选,这里可以使用聚合函数的计算结果
6. select选择需要查询的列(计算所有的运算表达式、去除结果中的重复 行)
7. order by子句,对结果集进行排序
8. limit 子句:限制返回的结果行数
八、子查询
标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
用in not in
行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、IN 、NOT IN
表子查询
子查询返回的结果是多行多列,可将其作为临时表,进一步进行查询,这种子 查询称为表子查询。