mysql 笛卡尔去重_MySQL查询

MySQL 查询

1、基本查询语句

SELECT 属性列表FROM

[WHERE 条件表达式1]

[GROUP BY 属性名1 [HAVING条件表达式2]]

[ORDER BY 属性名2 [ASC | DESC]]

解释:

A)属性列表:属性1, 属性2, ... ...属性n

B)属性1 = 100

C)GROUP BY:把字段中的数据进行分组

D)[HAVING 条件表达式2]]:满足条件表达式2的行会被输出

E)ORDER BY:排序,ASC为升序,DESC为降序

例:SELECT id, name, age, sex

FROM 学生表

WHERE age < 25

ORDER BY id ASC;

2、 单表查询

a) 查询表中所有字段

SELECT * FROM 表名;

b) 查询表中指定字段

SELECT 属性1,属性2, ... ...属性n FROM表名;

3、 限制查询

SELECT * FROM 表名

WHERE 条件表达式;

条件表达式的组成

比较

=、>、=、<=、!=、<>、!>、!<

指定范围

BETWEEN AND、NOT BETWEEN AND

指定集合

IN、NOT IN

匹配字符

LIKE、NOT LIKE

是否为空

IS NULL、IS NOT NULL

多个条件表达式的组合

AND、OR

A)IN的用法

属性名 IN (元素1,元素2,元素3)

解释:属性只能是集合中的一种。

B)BETWEEN AND的用法

属性名 BETWEEN 取值1 AND取值2

解释: 等价于  取值1 <= 属性名&&属性名<=取值2

C)LIKE的用法

属性名 LIKE ‘AAA%BBB_D’

解释:字符串匹配,其中 ’%’ 表示任意个字符, ’_’ 表示一个字符

注:耗费系统资源,不推荐使用

D)IS NULL的用法

属性名 IS NULL

解释:当属性的值为空时,表达式为真

E)AND OR的用法

(表达式1 )AND (表达式2 OR表达式3)

解释:括号可以控制优先级

默认情况下,先执行AND,再执行OR,即

(表达式1 AND表达式2) OR (表达式3)

4、 查询记录去重复

SELECT DISTINCT 属性名列表FROM表名;

5、 查询结果排序

SELECT * FROM 表名

ORDER BY 属性1 DESC,属性2 ASC;

解释: 对属性名1按照降序排列,当属性名1相同时,对属性名2按照升序排列。

6、分组查询

GROUP BY 属性名[HAVING条件表达式] [WITH ROLLUP]

A)单独使用GROUP BY

20180110225136667957.png

20180110225136670887.png

B)GROUP BY + GROUP_CONCAT()组合使用

20180110225136667957.png

20180110225136674793.png

C)[HAVING 条件表达式]组合使用

20180110225136676746.png

D)多字段分组

SELECT * FROM 表名GROUP BY字段A,字段B;

多字段分组时:取去重字段A和去重字段B的 笛卡尔积

E)[WITH ROLLUP]组合使用

20180110225136677723.png

7、限制显示记录条数

LIMIT n

解释:查询仅显示前n条记录,LIMIT是MySQL特有的关键字。

8、函数的用法

SELECT sec, COUNT(sec) AS 别名FROM表名;

写在 与 属性相同的位置

9、COUNT()

用于统计记录的条数

10、 SUN()

用于求和整行记录

11、AVG()

整行记录求平均值

12、MAX()

整行记录求最大值

13、MIN()

整行记录求最小值

14、多表查询(连接查询)

A)内连接查询

SELECT 属性列表

FROM  表1,表2

WHERE 表1.属性1 =表2.属性2

要点:需要把表1中的一条属性和表2中的一条属性关联起来,使表1与表2形成关联关系。

思想:取两个表满足WHERE条件的交集。

B)外连接查询

SELECT 属性列表

FROM 表1 LIFT | RIGET表2

WHERE 两个表的关联条件

分为左连接和右连接

左连接:(表1∩ 表2)∪ 表1

右连接:(表1∩ 表2)∪ 表2

15、 子查询

查询语句的嵌套使用,内层查询结果成为外层查询的条件。

A)带IN的子查询

SELECT * FROM 表

WHERE d_id IN

(SELECT d_id FROM 子表);

B)带比较运算符的子查询(=、>、=、<=、!=、<>、!)

SELECT * FROM 表

WHERE d_id =

(SELECT d_id FROM 子表);

C)带EXISTS的子查询

EXISTS表示存在的意思,他只能判断真假,因此子SELECT语句应该返回真假。

SELECT * FROM 表

WHERE d_id EXISTS

(SELECT d_id FROM 子表WHERE d_id = 1333);

解释:只有子表 d_id 为1333的 记录存在时, 才会执行 查询语句

D)带ANY和ALL的子查询

SELECT * FROM 表

WHERE a >=

(SELECT d_id FROM 子表)

解释:ANY表示a只要>=ANY()中的任何一个元素就为真

ALL表示a要>=ALL()中的所有元素才为真

16、合并查询结果

SELECT语句1

UNION | UNION ALL

SELECT语句2

UNION | UNION ALL

SELECT语句3

... ...

UNION:合并结果并去掉重复的记录

UNION ALL:合并结果不去掉重复记录

17、给表起别名

SELECT *

FORM 表名 表别名

WHERE 表别名.id = 1;

18、给字段起别名

属性名 [AS] 属性别名

19、使用正则表达式查询

SELECT * FROM 表

WHERE name REGEXP ‘正则表达式’;

20180110225136681629.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值