数据库查询语言

系列文章目录

数据库的查询语言是非常重要的一部分,必须掌握

一、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_name2
where [ table_name1 ] . [ col_name ] = [ table_name2 ] . [ col_name ]
select col_name....
from table_name1 inner join table_name2
on [ 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, 字段 2
from
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

表子查询

子查询返回的结果是多行多列,可将其作为临时表,进一步进行查询,这种子 查询称为表子查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值