| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL之DQL——查询语言 -> 正文阅读 |
|
[大数据]MySQL之DQL——查询语言 |
前言 ? ? ? ? 今天给大家带来关于数据库查询相关操作,希望各位看官能看个愉快 ? 目录 ? ? ? ?3.1.4、MySQL中+号的作用以及concat函数 一、基本概念????????在学习MySQL之前我们先来了一下几个基本概念: 1.1、基本概念? ? ? ? 数据库?【DB(datebase)】:数据库指的是长期存在计算机内、有组织、可共享的、大量数据的集合。数据是按照特定的数据模型来组织、存储在数据库中的。 ? ? ? ?数据库管理系统【DBMS(Datebase Management System)】:又称为数据库软件(产品),用于管理DB中的数据 ????????而我们学习的SQL语言又有哪些分类呢? 1.2、SQL语言的分类
1.3、数据库的存储特点
???????? 二、MySQL? ? ? ? 既然要学习数据库,我们就要下载数据库管理系统才可以,这里我们选用的MySQL,大家可以前往他的官网进行下载使用免费版本:MySQL。 ? ? ? ? 安装好MySQL之后,我们需要启动他的服务: ? 2.1、 MySQL服务的登录和退出?
|
功能 | 代码 | 备注 |
---|---|---|
1.查看所有的数据库 | show databases ; | ?? ?注意,分号之前要加空格,否则会报错 |
2.进入某个数据库指令 | use 数据库名; | |
3.在数据库中查找表的指令 | show tables; | |
4.在一个数据库中想要查看另一个数据库的表的指令 | show tables from 数据库名 | ?? ?注意 ? ? ? ? 使用该指令我们的用户依旧在原库,也就是test中,只是查看了mysql数据库中的表而已。 |
5.查找我目前所在库的位置 | select database(); | |
6.创建新表指令 | ?create table 表名( 字段名 类型; ……….); | |
7.查看表名结构 | desc 表名; | |
8.查看表中数据 | select * from 表名; | |
9.向表中添加数据 | insert into 表名 (字段...) values(); | |
10.修改表中数据 | update 表名 set 某字段= '修改后的值' where id=n; | ? ?这里的n是你自己表中字段所对应的ID |
11.删除表中数据 | delete from 表名 where id=n | n就是你要删除的行对应的字段 |
12.查看MySQL版本方法 | 1.在进入MySQL数据中 ?????????2.退出MySQL数据库之后 |
? ? ?
?? ?1.不区分大小写,但建议关键字大写,表名,列名小写
?? ?2.每条命令最好以分号结尾
?? ?3.每条命令根据需要,可以进行缩进,或换行
?? ?4.注释
?? ??? ?单行注释
?? ??? ??? ?#注释文字
?? ??? ??? ?-- 注释文字
?? ??? ??? ??? ?注意,--之后必须打空格
?? ??? ?多行注释
?? ??? ??? ?/*注释文字*/
? ? ? ? 在该部分我们学习以下内容:
? ? ? ? ? ? ? ? 基础查询、条件查询、排序查询、常见函数、分组函数、分组查询、连接查询、子查询、分页查询、union联合查询,内容较多,我们慢慢展开。
? ????????在进行查询前呢我们最好下载一个图形化客户端进行操作,这里我学习用的SQLyog,大家可以在CSDN搜索如何下载和使用该软件,这里就不做过多介绍。
? ? ? ? ? ?当我们第一次进行查询的时候,一定注意要进入你查询的数据库中才能进行查询操作。
????????select 查询列表 from 表名;
? ? ????????他的意思,类似于java中的System.out.println(打印的内容),把我们查询的内容显示出来。
????????特点:
?? ?????????????????1、查询的列表可以是表中 的字段 ,常量值,表达式,函数
?? ?????????????????2、查询的结果是一个虚拟的表格
?? ??? 图示:
?????????
? ? ? ? ?以下给大家介绍几种常用的操作
? ? ? ? ? ? ? ? 语法:select 字段 AS 别名;
? ? ? ? ? ? ? ??注意:如果别名与关键字冲突,别名应该使用双引号或者单引号括起来,建议使用双引号??????? ? ? ?
? ? ? ? ? ? ? ? 起别名的好处:
?????????????????????????????????? ?1、便于理解
?? ?????????????????????????????????2、如果要查询的字段有重名的情况,使用别名可以区分开来
? ? ? ? ? ? ? ? 语法:select distinct 字段 from 表名;
? ? ? ? ? ? ? ? ? ? ? ? 去重前:
? ? ? ? ? ? ? ? 去重之后:
?????????
? ? ? ? ? ? ? ? 很明显的看到我们去重之前有107行数据,而去重之后 仅剩余12行数据。?
? ? ? ? 在学习java的时候我们可以使用+号去做字符串拼接操作,但是,在MySQL中我们可以使用+号来完成字符串拼接的功能吗?很显然是不可以的。
????????MySQL中的+号的功能
? ? ???????仅仅只有一个功能 : 运算符
? ? ? ? ? ?分为以下三种情况:
?? ??? ??? ??? ?1、两个操作数都为数值型,则做加法运算
? ? ? ? ? ? ? ? ?例如:select 100+90;?
?? ??? ??? ??? ?2、其中一方为字符型,试图将字符型数值转换为数值型
?? ??? ??? ??? ??? ?如果转换成功,则做加法运算
?? ??? ??? ??? ??? ??? ?select '123'+90;?
?? ??? ??? ??? ??? ?如果转换失败,则将字符型数值转换为0;
?? ??? ??? ??? ??? ??? ?select 'hello' + 90;?? ?
?? ??? ??? ??? ?3、只要其中一方为null,结果就一定是null;
?? ??? ??? ??? ??? ?select null + 90;
? ? ? ? concat函数
? ? ? ? ? ? ? ? 那么在MySQL中,他也有自己的字符串拼接函数,就是concat
? ? ? ? 语法:concat(str1,str2....)
?? ?????????实例用法
? ? ? ?????????
????????? ?ifnull函数的含义:ifnull的执行是检查如果字段中有值为null的情况,没有则返回你设置的值
? ? ? ? ? ?语法:?select ifnull(原值字段,你设置的返回值)
? ? ? ? ? ?图示:
????????????????
?
? ? ? ? 语法:
? ? ?select?
?? ??? ?查询列表(第三步执行)
·?? ?from?
?? ??? ?表名(第一步执行)
?? ?where?
?? ??? ?筛选条件(第二部执行)
?筛选条件我们可以大致分为三类:
????????????????条件运算符:> < = != <> >= <=
????????????????逻辑运算符:
?? ????? ?? ?
&&? | || | ! |
and | or | not |
? ? ? ? ? ? ? ? 该连接符主要用于连接表达式
? ? ? ? ? ? ? ? 作用:
? ? ? ? ? ? ? ? ? ? 1、&&和and:两个条件都为true,则结果为true,反之为false
? ? ? ? ? ? ? ? ? ? 2、? ?||和or:只要有一个条件为true,则结果为true,反之为false
? ? ? ? ? ? ? ? ? ? 3、!和not:如果连接的条件本身为false,则结果为true,否则为false
? ? ? ? ? ? ? ? 该类连接符分类:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? like,between and,in,is null,<=>(安全等于)
? ? ? ? ? ? ? ? like:
? ? ? ? ? ? ? ? ? ? ? ? 该连接符的应用场景大多用于查询某个字段中包含某个字符等,一般和通配符搭配使用
?? ?通配符
?? ??? ?% 任意多个字符,包含0个字符
?? ??? ?_ 任意单个字符
? ? ? ? ? ? ? ? between and:
????????????????????????? ? ? ? 他所查询的就是某个区间的值大多应用场景:也可以用条件表达式去完成
? ? ? ? ? ? ? ? ? ? ? ? 特点:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
????????????????????????????????1、可以提高语句简洁度
????????????????????????????????2、两个区间的值的顺序不可颠倒
????????????????????????????????3、包含临界值
? ? ? ? ? ? ? ? ?in:
????????????????????????判断某字段的值是否属于in列表中的某一项
? ? ? ? ? ? ? ? ? ?注意特点:
????????????????????????①使用in提高了语句简洁度
????????????????????????②in列表的值必须是同一类型或兼容
????????????????????????③in字段不支持通配符
? ? ? ? ? ? ? ? ?is null :
????????????????????????用于判断字段值是否为null
?? ?????????????????????注意:
?????????????????????????? ?????????=或<>不能用于判断null值
?? ?????????????????????????????????is null 或 is not null可以判断null值
?????????????????那么相反如果想要查询相反值就是is not null
????????????????安全等于????<=>:
?? ?????????????
?? ??? ?????????与 isnull进行比较
?? ??? ??? ?????????????????isnull仅仅可以判断null值,可读性较高,建议使用
?? ??? ??? ?????????????????安全等于既可以判断null值,又可以判断普通的数值,可读性较低
????????????????
? ? ? ? 语法:
? ??select
? ? ? ? 要查询的东西
? ? from
? ? ? ? 表
? ? where?
? ? ? ? 条件
? ? order by 排序的字段|表达式|函数|别名 【asc|desc】
?排序方式:??????????
?* ASC:升序,默认的
?* DESC:降序
特点
?? ?1.asc代表的是升序,desc代表的是降序
?? ??? ?如果关键字不写,默认是升序
?? ?2.order by子句一般是放在查询语句的最后面,limit子句除外
?? ?3.order by子句中可以支持单个字段,多个字段,表达式,函数,别名
?? ?4.length函数表示返回字符串长度
concat: 拼接
substr: 截取子串
upper: 转换成大写
lower: 转换成小写
trim: 去前后指定的空格和字符
ltrim: 去左边空格
rtrim: 去右边空格
replace: 替换
lpad: 左填充
rpad: 右填充
instr: 返回子串第一次出现的索引
length: 获取字节个数?? ?
rand: 随机数
floor: 向下取整
?? ?返回<=该参数的最大整数
ceil: 向上取整
?? ?返回>=该参数的最小整数
mod: 取余
truncate: 截断
rand:获取随机数,取值范围0-1
now: 当前系统日期+时间
curdate: 当前系统日期
curtime: 当前系统时间
str_to_date: 将字符转换成日期
date_format: 将日期转换成字符
datediff:两个日期相差天数
monthname:以英文形式返回月
database: 当前库
user: 当前连接用户
version: 版本
password(‘字符’):返回该字符的加密形式
md5('字符'):返回该字符的md5加密形式
? ? ? ? ? ? ? ? 该函数式MySQL中比较重要的函数
? ? ? ? ? ? ? ? 首先是case函数
? ? ? ? ? ? ? ? 他分为两种使用方法:
? ? ? ? ? ? ? ? (一):
? ? ? ? ? 类似于java中的Switch case函数
语法:
? ? ? ? case 要判断的字段或表达式
????????when 常量1 then 要显示的值1或语句1;
????????when 常量2 then 要显示的值2或语句2;
????????...
????????else 要显示的值n或语句n;
????????end
?
案例:
? ? ? ? (二):
? ? ? ? ? ? ? ?类似于java中的多重if语句
语法:
case?
when 条件1 then 要显示的值1或语句1(语句要加分号)
when 条件2 then 要显示的值2或语句2
。。。
else 要显示的值n或语句n
end
案例:
? ? ? ? ?其次是if函数:
? ? ? ? 类似于if else效果:
案例:
* count:计算个数
?? ?* 一般选择非空的列:主键
?? ?* count(*)
?? ??? ?表示统计表中所有行数,包括null
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg:计算平均值????????
?注意:
1、以上五个分组函数都忽略null值,除了 count(*)
2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
3、都可以搭配distinct使用,用于统计去重后的结果
4、count的参数可以支持:
?? ?字段、*、常量值,一般放1
?? ?效率
?? ??? ?MYISAM存储引擎下 ?,COUNT(*)的效率高
?? ??? ?INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)要高一些
5.和分组函数一同查询的字段要求是group by后的字段(group by是3.6分组查询的语句)
语法:
? ? select 查询的字段,分组函数
? ? from 表
? ? group by 分组的字段
特点:
? ?1、可以按单个字段分组
? ? 2、和分组函数一同查询的字段最好是分组后的字段
? ? 3、可以按多个字段分组,字段之间用逗号隔开
? ? 4、可以支持排序
? ? 5、having后可以支持别名
注意:
? ? ? ? 分组函数做筛选不能放在where后面
? ? ? ? 能做分组前筛选的,尽量选择分组前筛选,以提高效率
? ? ? ? 分组可以按单个字段也可以按多个字段并且可以搭配着排序使用
题外话:
????????where 和 having 的区别?
?? ?1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
?? ?2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
????????在我们对表进行查询操作时,会出先一个现象就是我们有一个表由m行,另一个表由n行,而当我们对两张表进行连接查询时,对连接条件进行了错误的添加,就会出现m*n行数据,那么这肯定不是我们想要的结果,因为他包含了太多重复的无用的数据,该现象就叫做笛卡尔乘积效应:
发生原因:
1. 省略连接条件
2. 连接条件无效
3. 所有表中所有行互相连接如何解决:
添加有效的连接条件
????????
? ? ? ? 它只支持内连接中的等值连接,非等值连接,自连接
语法:
? ? ? ? SELECT 查询列表
?? ??? ?FROM 表名1 别名1 ,表名2 别名2?
?? ??? ?WHERE 连接条件 【等值连接,非等值连接,自连接】
?? ??? ?AND 筛选条件?? ?
?? ??? ?GROUP BY 分组列表?? ??? ?
?? ??? ?HAVING 分组后筛选条件?? ?
?? ??? ?ORDER BY 排序列表?? ??
等值连接,什么意思呢?
①多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③多表的顺序一般没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序,分组,筛选
连接条件为等于号
举例:
?
非等值连接:连接条件不为等于号
举例:
?很明显这里的连接条件是between and
自连接:自己表中内容进行连接,
自连接需要注意对表起别名作区分?
? 内连接:
? ? ? ? 语法:
? ? ? ? select 字段列表?
?? ??? ?from 表名1?
?? ??? ?[inner] join 表名2 on 条件
?? ??? ?where 筛选条件【等值连接,非等值连接,自连接】
?? ??? ?group by 分组条件
?? ??? ?having 分组后的筛选条件
?? ??? ?order by 排序字段
等值连接:
①添加排序、分组、筛选
②inner可以省略
③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
实例:
?非等值连接:连接条件不为等号
实例:
?自连接:在自己表内为连接条件
实例:
?外连接:
应用场景:用于查询一个表中有,另一个表没有的记录
特点:
1、外连接的查询结果为主表中的所有记录
?? ?如果从表中有和它匹配的,则显示匹配的值
?? ?如果从表中没有和它匹配的,则显示null
?? ?外连接查询结果=内连接结果+主表中有而从表没有的记录
?2、左外连接,left join左边的是主表
?? ? ? ?右外连接,right join右边的是主表
?3、左外和右外交换两个表的顺序,可以实现同样的效果?
?4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的? ? ? ? 左外连接:
? ? ? ? select 字段列表?
?? ??? ?from 表名1?
?? ??? ?left[outer] join 表名2 on 条件
?? ??? ?where 筛选条件
?? ??? ?group by 分组条件
?? ??? ?having 分组后的筛选条件
?? ??? ?order by 排序字段
?右外连接:
? ? ? ? 语法:
?? ??? ?select 字段列表?
?? ??? ?from 表名1?
?? ??? ?right[outer] join 表名2 on 条件
?? ??? ?where 筛选条件
?? ??? ?group by 分组条件
?? ??? ?having 分组后的筛选条件
?? ??? ?order by 排序字段
实例:
全外由于MySQL不支持,因此这里只了解其语法:
?? ??? ?select 字段列表?
?? ??? ?from 表名1?
?? ??? ?full[outer] join 表名2 on 条件
?? ??? ?where 筛选条件
?? ??? ?group by 分组条件
?? ??? ?having 分组后的筛选条件
?? ??? ?order by 排序字段
?交叉连接:
语法:
?? ??? ?select 字段列表?
?? ??? ?from 表名1?
?? ??? ?cross join 表名2 on 条件
?? ??? ?where 筛选条件
?? ??? ?group by 分组条件
?? ??? ?having 分组后的筛选条件
?? ??? ?order by 排序字段就是笛卡尔乘积
实例:
?
含义:
出现在其他语句(不仅限于查询语句)中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
分类:
select语句后面仅仅支持标量子查询
?from后面:支持表子查询:将子查询结果充当一张表,要求必须起别名
实例:
exists后面(相关子查询)
?? ??? ?查询的括号内一般是一个连接查询语法:
????????exists(完整的查询语句)
结果:1或0?
实例:
?where或having后面支持:
? ? ? ? 标量子查询
? ? ? ? 列子查询
? ? ? ? 行子查询
where或having后面标量子查询:
? ? ? ? 特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
?? ?> < >= <= = <>
?? ?列子查询,一般搭配着多行操作符使用
?? ??? ?in、any/some、all
④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
?where或having后面行子查询
实例:
?where或having后面列子查询
列子查询一般搭配逻辑操作符使用:
?
?
?实例:
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
?? ?select 查询列表
?? ?from 表
?? ?【join type join 表2
?? ?on 连接条件
?? ?where 筛选条件
?? ?group by 分组字段
?? ?having 分组后的筛选
?? ?order by 排序的字段】
?? ?limit 【offset,】size;{offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数}特点:
①limit语句放在查询语句的最后
②公式
?? ?要显示的页数 page,每页的条目数size
?? ?select 查询列表
?? ?from 表
?? ?limit (page-1)*size,size;
?应用场景:
要查询的结果来自于多个表,且多个表之间没有任何直接的连接关系
但查询的信息一致时(即两张表查询的信息相同)含义:将多条查询语句的结果合并成一个结果
特点:
1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all可以包含重复项语法:
?? ?查询语句1
?? ?union
?? ?查询语句2
?? ?union
?? ?......
写在最后:
? ? ? ? 最后,求三连关注啊?,后面会给大家带来其他操作哦。下次见
?
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:34:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |