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

Mysql高阶语句(二)

一、设置别名(alias ——>as)

在 MySQL 查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者 多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性.
(1)语法
对于列的别名:

SELECT column_name AS alias_name FROM table_name;

对于表的别名:

SELECT column_name(s) FROM table_name AS alias_name;

在使用 AS 后,可以用 alias_name 代替 table_name,其中 AS 语句是可选的。AS 之后的别名,主要是为表内的列或者表提供临时的名称,在查询过程中使用,库内实际的表名 或字段名是不会被改变的。
列别名设置举例:

select name as 姓名,score as 成绩 from test;    
也可以直接不加as:
select name 姓名,score 成绩 from test;

如果表的长度比较长,可以使用 AS 给表设置别名,在查询的过程中直接使用别名
举例:临时设置test表的别名为a

select a.name as 姓名,a.score as 成绩 from test as a;

 查询test表的字段数量,以‘字段总number’字样显示

select count(*) as number from test;

 注意:不使用as,也可以以正常使用:

select count(*) 字段总number from test;

as的使用场景:
1、对复杂的表进行查询的时候,别名可以缩短查询语句的长度。
2、多表相连查询的时候(通俗易懂、减短sql语句)。

此外,as还可以作为连接语句的操作符。
举例:创建test_bak表,将test表的查询记录全部插入test_bak表:

create table test_bak as select * from test;

 在此处AS起到的作用:
1、创建了一个新表test_bak 并定义表结构,插入表数据(与test表相同)
2、但是”约束“没有被完全被”复制“过来 ,但是如果原表设置了主键,那么附表的:default字段会默认设置一个0

 相似的有:
克隆、复制表结构:

create table test01_bak (select * from test);

也可以加入where 语句判断只复制socre大于等于60的数据:
方式一:

create table test02_bak as select * from test where score >=60;

 方式二:

create table test03_bak (select * from test where score>=60);

注意:
①在为表设置别名时,要保证别名不能与数据库中的其他表的名称冲突。
②列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用

二、通配符
通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。
通常通配符都是跟 like一起使用的,并协同 where子句共同来完成查询任务。常用的通配符有两个,分别是:
%:百分号表示零个、一个或多个字符 .*
_:下划线表示单个字符。
举例:
从test表中查询名字是l开头的数据:
 

 select * from test where name like 'l%';

 查询名字里是l和l中间有一个字符的数据:

 select * from test where name like 'l_l_i' ;

 查询名字中间有m的记录:

select * from test where name like '%m%' ;

查询li后面3个字符的名字的数据:

select * from test where name like 'li___' ;

 通配符“%”和“_”不仅可以单独使用,也可以组合使用
查询名字以h开头的记录:

 三、子查询
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。
PS: 子语句可以与主语句所查询的表相同,也可以是不同表
执行顺序:最内层的子查询先执行
举例:
 

select name,score from test where id in (select id from test where score >80);
从“test”的表中选择姓名和分数列,其中id列的值在子查询中被选择,该子查询选择了分数大于80的所有id。因此,此查询将返回所有分数大于80的学生的姓名和分数。
#主语句:select name,score from info where id
子语句(集合): select id from info where score >80

子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件
in: 将主表和子表关联/连接的语法(⭐⭐)

多表查询:
首先创建一个表为test_db作为多表查询使用:

create table test_db(id int);
insert into test_db values(1),(2),(3);
select * from test_db;

 多表查询:
举例:
 

select id,name,score from test where id in (select * from test_db);

 子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。

(1)语法
IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用

语法:
<表达式> [NOT] IN <子查询>

当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE。 若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需 求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。 多数情况下,子查询都是与 SELECT 语句一起使用的。
举例:
用子查询的方式查询test表中分数大于80的记录:
 

select name,score from test where id in (select id from test where score>80);

子查询还可以用在 INSERT 语句中。子查询的结果集可以通过 INSERT 语句插入到其 他的表中。
举例:先将test_sb里的记录全部删除,重新插入test表的记录

DELETE FROM test_db; 删除test_ab的数据
insert into test_db select id from test where id in (select id from test);

 

 UPDATE 语句也可以使用子查询。UPDATE 内的子查询,在 set 更新内容时,可以是单独的一列,也可以是多列。
举例:
将test表中id为2的数据的score值更新为60,并将更新后的数据插入到test01_bak表中。

 update test01_bak set score=60 where id in (select id from test where id=2);

 DELETE 也适用于子查询
删除分数大于80的记录:

delete from test where id in (select id  where score>80);

 在 IN 前面还可以添加 NOT,其作用与IN相反,表示否定(即不在子查询的结果集里面)
删除分数不是大于等于80的记录

delete from test where id not in (select id where score>=80);

 EXISTS 这个关键字在子查询时,主要用于判断子查询的结果集是否为空。如果不为空, 则返回 TRUE;反之,则返回 FALSE
查询test01_bak如果存在分数等于80的记录则计算info的字段数:

select count(*) from test01_bak where exists(select id from test01_bak where score=80);

 查询如果存在分数小于10的记录则计算info的字段数,test01_bak表没有小于10的,所以返回0:

select count(*) from test01_bak where exists(select id from test01_bak where score<50);

 子查询,别名as
#查询test01_bak表id,name 字段:

select a.id,a.name from (select id,name from test01_bak) a;
相当于
select test01_bak.id,name from test01_bak;

MySQL视图:
视图:优化操作+安全方案 ⭐⭐
数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射
视图可以理解为镜花水月/倒影,动态保存结果集(数据)
基础表info (7行记录) ——》映射(投影)–视图

作用场景[图]:
针对不同的人(权限身份),提供不同结果集的“表”(以表格的形式展示)

作用范围:

select * from test02_bak;			#展示的部分是test02_bak表
select * from view_name;	#展示的一张或多张表

功能:
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性
本质而言视图是一种select(结果集的呈现)

PS:视图适合于多表连接浏览时使用!不适合增、删、改
而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率!

视图和表的区别和联系:

区别:
①、视图是已经编译好的sql语句。而表不是

②、视图没有实际的物理记录。而表有。
show table status\G

③、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改

④、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。

⑤、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

⑥、视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

#联系:
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

举例:
需求:满足80分的学生展示在视图中。
PS:这个结果会动态变化,同时可以给不同的人群(例如权限范围)展示不同的视图。
创建视图(单表):
 

 create view v_score as select * from test02_bak where score>=80;

查看表状态:

show table status\G

查看视图

select * from v_score;

 查看视图与源表结构:

desc v_score;

 desc test02_bak;

多表创建视图:
创建test01表:

create table test01 (id int,name varchar(10),age char(10));
insert into test01 values(1,'zhangsan',20);
insert into test01 values(2,'lisi',30);
insert into test01 values(3,'wangwu',29);

举例:创建一个视图,需要输出id、学生姓名、以及年龄。

create view v_per(id,name,score,age) as select test02_bak.id,test02_bak.name,test02_bak.score,test01.age from test02_bak,test01 where test02_bak.name=test01.name;

修改原表数据:

mysql> update test02_bak set score='60' where name='liuyi';
Query OK, 1 row affected (1.62 sec)
Rows matched: 1  Changed: 1  Warnings: 0

查看视图:

mysql> select * from v_per;
+------+-----------+--------+----------+--------+
| id   | name      | score  | address  | hobbid |
+------+-----------+--------+----------+--------+
|    4 | tianqi    | 100.00 | hangzhou |      5 |
|    5 | jiaoshou  | 100.00 | laowo    |      3 |
|    6 | hanmeimei | 100.00 | nanjing  |      3 |
|    7 | lilei     | 100.00 | nanjing  |      5 |
+------+-----------+--------+----------+--------+
4 rows in set (0.00 sec)

同时可以通过视图修改原表:

mysql> update v_per set score='120' where name='tianqi';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from v_per;
+------+-----------+--------+----------+--------+
| id   | name      | score  | address  | hobbid |
+------+-----------+--------+----------+--------+
|    4 | tianqi    | 120.00 | hangzhou |      5 |
|    5 | jiaoshou  | 100.00 | laowo    |      3 |
|    6 | hanmeimei | 100.00 | nanjing  |      3 |
|    7 | lilei     | 100.00 | nanjing  |      5 |
+------+-----------+--------+----------+--------+
4 rows in set (0.00 sec)
mysql> select * from test02_bak;
+------+-----------+--------+------------+--------+
| id   | name      | score  | address    | hobbid |
+------+-----------+--------+------------+--------+
|    1 | liuyi     |  60.00 | beijing    |      2 |
|    2 | wangwu    |  50.00 | shengzheng |      2 |
|    3 | lisi      |  50.00 | shanghai   |      4 |
|    4 | tianqi    | 120.00 | hangzhou   |      5 |
|    5 | jiaoshou  | 100.00 | laowo      |      3 |
|    6 | hanmeimei | 100.00 | nanjing    |      3 |
|    7 | lilei     | 100.00 | nanjing    |      5 |
+------+-----------+--------+------------+--------+
7 rows in set (0.00 sec)

修改表不能修改以函数、复合函数方式计算出来的字段
查询方便、安全性
查询方便:索引速度快、同时可以多表查询更为迅速(视图不保存真实数据,视图本质类似select)
安全性:我们实现登陆的账户是root ——》所拥有权限 ,视图无法显示完整的约束。

相关文章:

Mysql高阶语句(二)

一、设置别名&#xff08;alias ——>as&#xff09; 在 MySQL 查询时&#xff0c;当表的名字比较长或者表内某些字段比较长时&#xff0c;为了方便书写或者 多次使用相同的表&#xff0c;可以给字段列或表设置别名。使用的时候直接使用别名&#xff0c;简洁明了&#xff0…...

算法笔记 二叉搜索树

二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种数据结构&#xff0c;用于存储具有可比较键&#xff08;通常是数字或字符串&#xff09;的元素 1 结构特点 节点结构&#xff1a;每个节点都有一个键和两个子节点&#xff08;左子节点和右子…...

微软牵手Linux:Ubuntu“系统”上架win10应用商店啦

导读继SUSE Linux登陆之后&#xff0c;Ubuntu今天正式以UWP应用的身份上架Win10应用商店。Windows Insider用户升级到Win10秋季创意者更新预览版Build 16190及以上就可以下载和安装Ubuntu系统应用。一旦下载和安装完Ubuntu应用后&#xff0c;它将开始在你的Windows10 PC上安装U…...

leetcode做题笔记126. 单词接龙 II

按字典 wordList 完成从单词 beginWord 到单词 endWord 转化&#xff0c;一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -> s2 -> ... -> sk 这样的单词序列&#xff0c;并满足&#xff1a; 每对相邻的单词之间仅有单个字母不同。转换过程中的每个单词 s…...

windows下运行springboot的jar包,修改替换class文件,修改配置文件application,打包

在windows下跑springboot的jar包&#xff0c;经常会用到一些命令行和操作。 1、修改配置文件&#xff08;以application.yml为例&#xff09; #提取文件 jar xvf mqtt-10.1.0.jar BOOT-INF/classes/application.yml#将文件装回jar包 jar uvf mqtt-10.1.0.jar BOOT-INF/classe…...

PMD 检查java代码:可以去掉无用的括号(UselessParentheses)

这个规则的优先级比较低。 https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_codestyle.html#uselessparentheses 无用的括号可以去掉。当然&#xff0c;有时候为了避免理解起来困难&#xff0c;加上括号反而更加清晰。 例如&#xff1a; public static short calc…...

【数据结构练习】栈的面试题集锦

目录 前言&#xff1a; 1.进栈过程中可以出栈的选择题 2.将递归转化为循环 3.逆波兰表达式求值 4.有效的括号 5. 栈的压入、弹出序列 6. 最小栈 前言&#xff1a; 数据结构想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#x…...

简单工厂模式概述和使用

目录 一、简单工厂模式简介1. 定义2. 使用动机 二、简单工厂模式结构1.模式结构2. 时序图 三、简单工厂的使用实例四、简单工厂模式优缺点五、简单工厂模式在Java中的应用 一、简单工厂模式简介 原文链接 1. 定义 简单工厂模式(Simple Factory Pattern)&#xff1a;又称为静…...

软件工程概述

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理&#xff0c;以工程化的原则和方法来解决软件问题的工程&#xff0c;目的是提高软件生产效率、提高软件质量、降低软件成本。 1. 计算机软件 计算机软件指的是计算机系统中的程序及其文档。程序是计算任务的…...

国际网页短信软件平台搭建定制接口说明|移讯云短信系统

国际网页短信软件平台搭建定制接口说明|移讯云短信系统 通道路由功能介绍 支持地区通道分流&#xff0c;支持关键字&#xff0c;关键词通道分流&#xff0c;支持白名单独立通道&#xff0c;支持全网通道分流&#xff0c;支持通道可发地区设置&#xff0c;通道路由分组&#x…...

Java“牵手”阿里巴巴店铺所有商品API接口数据,通过店铺ID获取整店商品详情数据,阿里巴巴店铺所有商品API申请指南

阿里巴巴平台店铺所有商品数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取阿里巴巴整店的商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、价格信息等详细信息 。 获取店铺所有商品接口API是一种用于获取电商平台…...

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

【Sql】把数据库字段用函数根据逗号分裂成列表&#xff0c;然后判断列表中是否包含目标值 【1】问题描述【2】Oracle内置函数解决【3】mysql的内置函数INSTR()【4】mysql的内置函数FIND_IN_SET() 【1】问题描述 数据库中【库信息db】和【集群信息cluster】是一对多的关系&…...

docker基本命令记录

Docker 是一个开源的容器技术,它允许开发人员将应用程序及其所有依赖项打包到一个容器中,然后轻松地在任何地方部署和运行。以下是 Docker 的一些基本操作: 基础操作: 启动 Docker:service docker start停止 Docker:service docker stop查看 Docker 信息:docker info容器操作…...

web之利用延迟实现复杂动画、animation

文章目录 效果图htmlstyleJavaScript 效果图 html <div class"container"><div class"ball"></div><input type"range" min"0" max"1" step"0.01" /> </div>style body {display…...

TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

先来介绍一些osi七层模型 分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。 应用层(数据)&#xff1a;确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用&#xff0c;为应用程序提供服务&#xff0c;DNS&#xff0c;HTTP&#xff0c;HTTPS&#xf…...

鼠标悬停阴影的效果被旁边div挡住的解决办法

出现的问题 需求要求鼠标悬停某个图片上有阴影效果&#xff0c;但阴影被旁边相邻的div挡住了&#xff0c;如图所示 解决方案 给悬停的这块div增加2个css属性 $(this).css(position, relative); $(this).css(z-index, 200);新的效果如图所示 一直写后端&#xff0c;前端的…...

Go用两个协程交替打印100以内的奇偶数

方式1&#xff08;使用无缓冲的channel&#xff09; package mainimport ( "fmt" "time")var flagChan make(chan int)func wokr1() { for i : 1; i < 100; i { flagChan <- 666 // 塞入 if i%2 1 { fmt.Println("协程1打印:", i) …...

css 文字单行多行超出长度后显示 ...

0.超出… 1、单行文本超出 <div class"content">测试数据&#xff1a;css单行文本超出显示省略号--------</div><style> .content{width: 200px;height: 200px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:el…...

C++将派生类赋值给基类

在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍…...

海外问卷调查是做什么的?

大家好&#xff0c;我是橙河。现在我来给大家简单讲解一下海外问卷调查是做什么的&#xff1f; 多年以前&#xff0c;人们就开始在网上进行海外问卷调查了。最常见的方法是通过问卷网站、做问卷或者论坛进行调查&#xff0c;现在则更多地使用各种渠道进行调查。海外国家对于问…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...