mysq篇-查询

普通查询

SELECT * FROM execute_database WHERE database_code="da_busniness" ORDER BY gmt_created DESC LIMIT 4;

通配符条件查询

//包含
SELECT * FROM execute_sql WHERE database_app LIKE "%ACCOUNT%";
//以APP结尾
SELECT * FROM execute_sql WHERE database_app LIKE "%APP";
//以t\p开头
SELECT * FROM execute_sql WHERE table_code RLIKE "^[tp]";

去重查询

distinct

SELECT DISTINCT 语句用于返回唯一不同的值。

1.distinct 必须放在第一个字段上

//错误示例
SELECT database_app,DISTINCT database_code,database_name FROM execute_database;

2.distinct对后面的字段整体去重,取唯一值

SELECT DISTINCT database_code,database_app,database_name FROM execute_database;

3.distinct对null不过滤,返回的结果中包含null

SELECT DISTINCT database_table FROM execute_database;

4.与count函数组合使用,查不重复数据的数量,注意:会过滤null

SELECT COUNT(DISTINCT database_table) num FROM execute_database;
//null数据不计算在内

group by 分组

1.不重复数据,及数据的重复条数

//分组去重
SELECT database_app,database_code,database_name,COUNT(database_app) FROM execute_database GROUP BY database_app,database_code,database_name;
//只查重复的数据
SELECT database_app,database_code,database_name,COUNT(database_app) repeat_num FROM execute_database GROUP BY database_app,database_code,database_name HAVING repeat_num>1;

UNION 连表

UNION操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。
1.默认去重

SELECT database_code as un FROM execute_database
UNION
SELECT database_app as un FROM execute_sql
ORDER BY un desc;

2.不去重用UNION ALL

SELECT database_code as un FROM execute_database
UNION ALL
SELECT database_app as un FROM execute_sql
ORDER BY un desc;

JOIN 连表

资料:https://www.runoob.com/sql/sql-join.html
简介:
INNER JOIN:关键字在表中存在至少一个匹配时返回行,与JOIN相同。
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

INNER JOIN

SELECT * FROM execute_database db
INNER JOIN execute_sql sq 
ON db.id = sq.database_id;
//返回满足db.id = sq.database_id的数据

LEFT JOIN

SELECT * FROM execute_database db
LEFT JOIN execute_sql sq 
ON db.id = sq.database_id;
//db(左表)数据全部返回,sq(右表)满足db.id = sq.database_id数据返回

RIGHT JOIN

SELECT * FROM execute_sql sq
RIGHT JOIN execute_database db
ON db.id = sq.database_id;
//sq(左表)满足db.id = sq.database_id数据返回,db(游标)数据全部返回

### FULL JOIN
注:MySQL中不支持 FULL OUTER JOIN

SELECT * FROM execute_database db
FULL OUTER JOIN execute_sql sq
ON db.id = sq.database_id;
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL OUTER JOIN execute_sql sq
ON db.id = sq.database_id' at line 2

case语法的应用

MySQL 的 case when 的语法有两种:
简单函数

CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

搜索函数

CASE WHEN [expr] THEN [result1]…ELSE [default] END

参考:https://www.cnblogs.com/chenduzizhong/p/9590741.html

left join 中 on 后面加条件 where 和 and 的区别

一、left join on

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

二、left join on and

(1)如果and语句是对左表进行过滤的,那么不管真假都不起任何作用。
(2)如果and语句是对右表过滤的,那么左表所有记录都返回,右表筛选以后再与左表连接返回。

三、left join on where

where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了。
(1)此时相当于inner join on
(2)此时on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。

四、inner join on and 和 inner join on where

无区别,不管是对左表还是右表进行筛选,on and 和 on where都会对生成的临时表进行过滤。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值