MySQL数据库

去重

如果我们需要去重重复的数据,可以使用DISTINCT关键字来实现

SELECT DISTINCT 字段 FROM ......;

注意:使用DISTINCT的SELECT子句中只能查询一列数据,如果查询多列去重就会失效。DISTINCT关键字只能在SELECT子句中使用一次

条件查询

很多时间,用户感兴趣的并不是逻辑表里的全部记录,而只是他们当中能够满足某一种或某几 种条件的记录。这类条件要用WHERE子句来失效数据的筛选。

SELECT ...... FROM ...... WHERE 条件 [AND|OR] 条件 ……;

条件筛选的四类运算符

运算符: 数学运算符,比较运算符,逻辑运算符,按位运算符

数学运算符
序号表达式意义例子
1+加法1+2+3
2-减法1-2-3
3*乘法1*2*3
4/除法6/3
5%求模10%3

比较运算符
序号表达式意义例子
1>大于age>18
2>=大于等于agr>=18
3<小于sal<4000
4<=小于等于sal<=4000
5=等于deptno=10
6!=不等于deptno!=30
7IN包含deptno IN(10,20,30)
8IS NULL为空comm IS NULL
9IS NOT NULL不为空comm IS NOT NULL
10BETWEEN AND范围sal BETWEEN 4000 AND 9000
11LIKE模糊查询ename like "%c"
12REGEXP正则表达式ename REGEXP "[a-zA-Z]{4}"

逻辑运算符
序号表达式意义例子
1AND与关系age>18 AND sex="男"
2OR或关系empno=8000 OR deptno=20
3NOT非关系NOT deptno=30
4XOP异或关系age>18 XOP sex="男"

按位运算符
序号表达式意义例子
1&位于关系3&7
2|位或关系3|7
3~位取反~10
4^位异或3^7
5<<左移10<<1
6>>右移10>>1

WHERE子句注意事项

WHERE子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最 多的条件写在最左侧。

高级查询

聚合函数

SUN函数

SUM函数用于求和,只能用于数字类型,字符类型的统计结果为0,日期类型统计结果是毫秒数相加。

数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。

字符串求和位0,日期求和毫秒数相加

MAX函数

MAX函数用于获得非空值的最大值。

MIN函数

MIN函数用于获得非空值的最小值。

AVG函数

AVG函数用于获得非空值的平均值,非数字数据统计结果为0。

字符串求和为0

COUNT函数

COUNT(*)用于获得包含空值的记录数,COUNT(列名)用于获得包含非空值的记录数。

只统计非空的数据

常见错误

聚合函数不能出现在WHERE子句中

分组函数

GROUP BY子句的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对每个小区域分别进行数据汇总处理。

逐级分组

数据库支持多列分组条件,执行的时候逐级分组。

查询每个部门里,每种职位的人员数量和平均底薪。

对SELECT子句的要求:

查询语句中如果含有GROUP BY子句,那么SELECT子句中的内容就必须要遵守规定。

SELECT子句中可以包括聚合函数,或者GROUPBY子句的分组列,其余内容均不可以出现在SELECT子句中。

汇总

WITH ROLLUP配合分组函数进行再次汇总。

GROUP_CONCAT函数

GROUP_CONCAT函数可以把分组查询中的某个字段拼接成一个字符串。

HAVING子句

表连接查询数据

笛卡尔积

从多张表中提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连 接,产生笛卡尔积。

关联条件查询

规定了连接条件的表连接语句,就不会出现笛卡儿积。

关联条件的数据为N-1个

表连接的分类

表连接分为两种:内连接和外连接

内连接是结果集中只保留符合连接条件的记录

外连接是不管符不符合连接条件,记录都要保留在结果集中。

内连接

内连接是最常见的一种表连接,用于查询多张关系表符合连接条件的记录。

语法结构:

SELECT …… FROM 表1

[INNER] JOIN 表2 ON 条件

[INNER] JOIN 表3 ON 条件

..........

内连接的多种语法形式:

SELECT …… FROM 表1 JOIN 表2 ON 连接条件;

SELECT …… FROM 表1 JOIN 表2 WHERE 连接条件;

SELECT …… FROM 表1,表2 WHERE 连接条件;

外连接

外连接与内连接的区别在于,除了符合条件的记录之外,结果集中还会保留不符合条件的记录。

语法结构:

‘SELECT …… FROM 表1

LEFT JOIN 表2 ON 条件

左连接,右连接

左外连接就是保留左表所有的记录,与右表做连接。如果右表有符合条件的记录就与左表连接。如果右表没有符 合条件的记录,就用NULL与左表连接。右外连接也是如此。

子查询

子查询可以写在三个地方:

WHERE子句、FROM子句、SELECT子句,但是只有FROM子句子查询是最可取的

单行子查询和多行子查询

单行子查询的结果集只有一条记录,多行子查询结果集有多行记录

多行子查询只能出现在WHERE子句和FROM子句中。

WHERE子句中的多行子查询

WHERE子句中,可以使用IN、ALL、ANY、EXISTS关键字来处理多行表达式结果集的条件判断

EXISTS关键字

EXISTS关键字是把原来在子查询之外的条件判断,写到了子查询的里面。

SELECT …… FROM 表名 WHERE [NOT] EXISTS(子查询);

效率极低,不建议使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值