当前位置: 首页 > news >正文

mysql高级sql语句 二

目录

一. 求交集

1.1 内连接

1.2 左连接

1.3 右连接

1.4 子查询

1.5 多表查询

1.6 并集+分组

二. 求差集

2.1 求左表差集

2.2 求右表差集

2.3 求两个表的差集

三. 视图表view

3.1 视图表的使用

3.2 视图表里的数据能不能修改?

四. case语句

五. 无值 ' ' 和 空值NULL 的区别

六、正则表达式

七. Mysql输入数据的方法

八. Mysql导出导入CSV文件

九. 如何删除重复数据

9.1 进保留一条重复的数据

9.2 一条重复的数据都不保留


一. 求交集

1.1 内连接

select A.字段 from 左表 A inner join 右表 B on A.字段 = B.字段;select A.字段 from 左表 A inner join 右表 B using(字段);                (合并相同的字段)

1.2 左连接

select B.字段 from 左表 A left join 右表 B on A.字段 = B.字段 where B.字段 is not null;

1.3 右连接

select A.字段 from 左表 A right join 右表 B on A.字段 = B.字段 where A.字段 is not null;

1.4 子查询

select A.字段 from 左表 A where A.字段 in (select B.字段 from 右表 B);select A.字段 from 左表 A where exists (select B.字段 from 右表 B where A.字段 = B.字段);

1.5 多表查询

select A.字段 from 左表 A, 右表 B where A.字段 = B.字段;

1.6 并集+分组

select A.字段 from (select distinct 字段 from 左表 union all select distinct 字段 from 右表) as A group by A.字段 having count(A.字段) > 1;            # A代表并集后的结果抽象出来的派生表

二. 求差集

2.1 求左表差集

select A.字段 from 左表 A left join 右表 B on A.字段 = B.字段 where B.字段 is null;
select A.字段 from 左表 A where A.字段 not in (select B.字段 from 右表 B);
select A.字段 from 左表 A where not exists (select B.字段 from 右表 B where A.字段 = B.字段);

2.2 求右表差集

select B.字段 from 左表 A right join 右表 B on A.字段 = B.字段 where A.字段 is null;

2.3 求两个表的差集

select A.字段 from 左表 A left join 右表 B on A.字段 = B.字段 where B.字段 is null
select B.字段 from 左表 A right join 右表 B on A.字段 = B.字段 where A.字段 is null;
select A.字段 from (select distinct 字段 from 左表 union all select distinct 字段 from 右表) as A group by A.字段 having count(A.字段) = 1;

三. 视图表view

3.1 视图表的使用

CREATE VIEW ----视图,可以被当作是虚拟表或存储查询。

        视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。

        临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。

        视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

语法:

CREATE VIEW "视图表名" AS "SELECT 语句";drop view 视图表名;    #删除视图表

3.2 视图表里的数据能不能修改?

  • 如果定义的select语句查询的字段是没有被处理过的源表字段,则可以通过视图表修改源表的数据

  • 如果定义的select语句查询的字段是被函数group by等命令处理过的字段,则不能直接修改视图表的数据

四. case语句

CASE ----是 SQL 用来做为 IF-THEN-ELSE 之类逻辑的关键字

语法一:

SELECT CASE "字段名"WHEN "数值1" THEN "结果1"WHEN "数值2" THEN "结果2"...[ELSE "default"]END
FROM "表名";

语法二:

SELECT CASEWHEN "公式1" THEN "结果1"WHEN "公式2" THEN "结果1"...[ELSE "default"] ENDFROM "表名";#ELSE 子句则并不是必须的。

五. 无值 ' ' 和 空值NULL 的区别

无值:

  • 无值'' 的长度为 0,不占用空间

  • 可以通过 字段名 = '' 字段名 !=或<> '' 来过滤字段的值是否为无值的行

  • 指定字段使用函数 count(字段) 不会忽略无值的行

空值:

  • 空值NULL 的长度为 NULL,占用空间

  • 可以通过 字段名 is null 字段名 is not null 来过滤字段的值是否为NULL的行

  • 指定字段使用函数 count(字段) 会忽略NULL的行

六、正则表达式

匹配模式描述实例
^匹配文本的开始字符     ‘^bd’ 匹配以 bd 开头的字符串
$匹配文本的结束字符 ‘qn$’ 匹配以 qn 结尾的字符串
.匹配任何单个字符‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串
*匹配零个或多个在它前面的字符‘fo*t’ 匹配 t 前面有任意个 o
+匹配前面的字符 1 次或多次‘hom+’ 匹配以 ho 开头,后面至少一个m 的字符串
字符串匹配包含指定的字符串‘clo’ 匹配含有 clo 的字符串
p1 | p2匹配 p1 或 p2 ‘bg|fg’ 匹配 bg 或者 fg
[...]匹配字符集合中的任意一个字符‘[abc]’ 匹配 a 或者 b 或者 c
[^...]匹配不在括号中的任何字符 ‘[^ab]’ 匹配不包含 a 或者 b 的字符串
{n}匹配前面的字符串 n 次‘g{2}’ 匹配含有 2 个 g 的字符串
{n,m}匹配前面的字符串至少 n 次,至多m 次‘f{1,3}’ 匹配 f 最少 1 次,最多 3 次

使用语法:

SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};

七. Mysql输入数据的方法

  • 使用insert into 语句插入数据
  • 使用load date infile 'csv文件'语句

  • 使用第三方客户端工具,比如 navicat

八. Mysql导出导入CSV文件

1)修改mysql配置文件,在[mysqld]配置项下面添加 secure_file_priv="" ,重启服务

2)创建导出目录,并授权权限 mkdir mysql-output; chown mysql:mysql mysql-output/

select * into outfile '/opt/test/xy103.csv' fields terminated by ',' enclosed by '"' lines terminated by '\n' from xy103;          #导出表数据到CSV文件中load data infile '/opt/test/xy103.csv' into table xy103 fields terminated by ',' enclosed by '"' lines terminated by '\n';     #导入CSV文件数据到mysql表中fields terminated by ','    指定CVS文件的字段分隔符
enclosed by '"'             指定CVS文件的字段内容边界符
lines terminated by '\n'    指定CVS文件的行分隔符

九. 如何删除重复数据

9.1 进保留一条重复的数据

语法:

create view 视图表名 as select min(id) from 表 group by 重复的字段名;delete from 表 where id not in (select 字段 from 视图表名);

9.2 一条重复的数据都不保留

语法:

create view 视图表名 as select 重复的字段名 group by 重复的字段名 having count(字段) > 1;delete from 表 where 重复的字段名 in (select 字段 from 视图表名);

 


http://www.mrgr.cn/news/52433.html

相关文章:

  • 【力扣热题100】3194. 最小元素和最大元素的最小平均值【Java】
  • 文心一言 VS 讯飞星火 VS chatgpt (371)-- 算法导论24.4 3题
  • 6CXX:UICC告诉终端数据长度
  • 【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码
  • 跟李沐学AI—pytorch版本锚框代码解析
  • 解读 Java 经典巨著《Effective Java》90条编程法则,第5条:优先考虑依赖注入来引用资源
  • esxi配置磁盘直通虚拟机
  • [每日一练]利用apply函数和lambda函数实现数据的聚合
  • C++ IO多路复用 epoll模型
  • Qml-Item的构造和显示顺序
  • RISC-V笔记——显式同步
  • [openwrt-21.02]openwrt-21.02 升级nat46软件包操作说明
  • 链式法则 反向传播
  • 牵手App红娘来助力,打造线上交友“好管家”
  • JDK、JRE、JVM相关知识点
  • 【IC设计】复旦微行业分析
  • 再见了 印象笔记!推荐一个非常好用的开源笔记系统,8.6k Start(带私活源码)
  • HashMap常见面试题(超全面):实现原理、扩容机制、链表何时升级为红黑树、死循环
  • 028 elasticsearch索引管理-ElasticsearchRestTemplate
  • 七、【智能体】扣子人设:智能体背后的关键设计,你真的了解吗?