初识MySQL之DQL语言

一、数据库相关概念

1.1 数据库常见的概念

①DB:数据库,存储数据的容器。

②DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB。

③SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用,其中SQL语言分为以下几类:

(1)DML(Data Manipulate Language):数据库操作语言,用于添加、删除、修改数据库记录,并检查数据完整性。

(2)DDL(Data Define Language):数据定义语言,用于库和表的创建、修改、删除,关键字:creat,drop,alter等。

(3)TCL语言(Data Control Language):数据事物语言。

(4)DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录(数据),关键字:select,where等。

1.2 常见的数据库管理系统

Mysql、Oracle、Db2、Sqlserver,其中MySQL前身属于瑞典的一家公司,在08年被sun公司收购,09年被Oracle公司收购。

1.3 数据库的好处

①可以持久化数据到本地。

②结构化查询。

二、数据库存储数据的特点

①数据存储到表中,然后表再放到库中。

②一个库中有多张表,每张表只有唯一的表名用来标识自己。

③表中有一个或多个列,列又称为“字段”,相当于Java中的“属性”。

④表中的每一行数据,相当于Java中的“对象”。

三、初始MySQL

3.1 MySQL的优点

①开源、免费、成本低。

②性能高、移植性也好。

③体积小,便于安装。

3.2 MySQL的安装

3.2.1 MySQL的介绍

MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的

官方网址:https://www.mysql.com/

3.2.2 安装

注意

安装路径不要包含中文或者空格等特殊字符(使用纯英文目录),默认安装在C盘。

具体安装步骤请参见《MySQL数据库安装手册》,MySQL属于c(客户端)/s(服务端)架构的软件,一般来说安装服务端,它有企业版和社区版,目前的版本号有5.5、5.6、5.7和8.0。

3.3 MySQL服务的启动和停止

方式一:

计算机--右击--管理--服务--MySQL;

方式二:

通过管理员身份运行cmd命令提示行,

启动:net start 服务名,

停止:net stop 服务名。

3.4 MySQL服务端的登录和退出

方式一:

通过MySQL自带的客户端,但只限于root用户。

方式二:

通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd,

登录:mysql【-h 主机名 -p 端口号】 -u 用户名 -p 密码,

退出:exit或ctrl+c。

四、DQL语言的学习

4.1 基础查询

4.1.1 语法

select 查询列表 from 表名

4.1.2 特点

①查询列表可以是字段、常量、表达式、函数、也可以是多个。

②查询结果是一个虚拟表。

4.1.3 示例

(1)查询单个字段

select 字段名 from 表名;

(2)查询多个字段

select 字段名,字段名 from 表名;

(3)查询所有字段

select * from 表名;

(4)查询常量

select 常量值;

注意:字符型和日期性的常量值必须用单引号引起来,数值型不需要。

(5)查询函数

select 函数名(实参列表);

(6)查询表达式

select 1024/1000;

(7)起别名

as 别名或空格 别名

(8)去重

select distinct 字段名 from 表名; 

(9)+

作用:做加法运算。

select 数值+数值;

select 字符+数值;(先试图将字符转换成数值,如果转换成功,则继续运算,否则转换成0,再做运算)

select null+值;(结果都为null)

(10)【补充】concat函数

功能:拼接字符。

select concat(字符1,字符2,字符3,...);

(11)【补充】ifnull函数

判断某字段或表达式是否为null,如果为null,返回指定的值,否则返回原本的值。

select ifnull(commission_pct,0) from employees;

(12)【补充】isnull函数

功能:判断某字段或表达式是否为null,如果是,返回1,否则返回0。

4.2 条件查询

4.2.1 语法

select 查询列表

from 表名

where 筛选条件

4.2.2 筛选条件

(1)简单条件运算符

>     <     <>          <=>(安全等于)。

(2)逻辑运算符

and、or、not。

(3)模糊查询

like:一般搭配着通配符使用,用于判断字符型数值或数值型。

通配符:%——任意多个字符,_——任意单个字符。

between and 和 in。

is null/is not null:用于判断null值。

(4)is not null PK <=>:

 

4.3 排序查询

4.3.1 语法

select 查询列表

from 表

【where筛选条件】(【】里的内容可以是否需要进行添加或省略)

order by 排序列表 asc|desc

4.3.2 特点

(1)asc代表升序,desc代表降序,如果不写,默认是升序。

(2)order by 子句中可以支持单个字段、多个字段、表达式、函数、别名。

(3)order by 子句一般放在查询语句的最后面,limit子句除外。 

4.3.3 注意

如果有多个排序条件,则当之前的条件一样,才会判断第二条件。

4.4 常见函数

4.4.1 概念

类似于Java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。

4.4.2 好处

(1)提高了实现细节。

(2)提高了代码的重用性。

4.4.3 特点

①叫什么(函数名)。

②做什么(函数功能)。

4.4.4 单行函数

①字符函数:

concat:拼接

substr:截取字符

upper:转换成大写

lower:转换成小写

trim:去前后指定的空格和字符

ltrim:去左边空格

rtrim:去右边空格

replace:替换

lpad:左填充

rpad:右填充

instr:返回字符第一次出现的索引

length:获取字节个数

②数学函数:

round:四舍五入

rand:随机数(返回0~1之间的小数)

floor:向下取整

ceil:向上取整

mod:取余

truncate:截断

③日期函数:

now:当前系统日期+时间

curdate:当前系统时间

str_to_date:将字符转换成日期

date_formate:将日期转换成字符

④其他函数【补充】

version:版本

datebase:当前库

user:当前连接用户

password('字符'):返回字符的密码形式

md5('字符'):返回该字符的md5加密形式

⑤流程控制函数【补充】:

(1)if处理双分支

(2)case语句,处理多分支:

情况1:处理等值判断

情况2:处理条件判断

4.5 分组函数

4.5.1 功能

做统计使用,又称为统计函数、聚合函数、组函数。

4.5.2 所属函数

count:计算个数(一般选择非空的列:主键、count(*))

max:计算最大值

min:计算最小值

sum:计算和

avg:计算平均值

4.5.3 特点

①以上五个分组函数都忽略null值,除了count(*)。

②sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型。

③都可以搭配distinct使用,用于统计去重后的结果。

④count的参数可以支持字段、常量值、一般使用count(*)做统计行数。

⑤和分组函数一同查询字段要求是group by后的字段。 

4.5.4 注意事项

聚合函数的计算,排除null值。

解决方法:

(1)选择不包括非空的列进行计算

(2)IFNULL函数

4.6 分组查询

4.6.1 语法

select 查询的字段,分组函数

from 表

group by 分组的字段;

4.6.2 特点

①可以按单个字段分组。

②和分组函数一同查询的字段最好是分组后的字段。

③可以按多个字段分组,字段之间用逗号隔开。

④可以支持排序

⑤having后可以支持别名,建议group by、having后不使用别名,因为Oracle等不支持或写的时候比较麻烦。

4.6.3 面试题

where和having的区别?

1.where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来。

2.where后不可以跟聚合函数,having可以进行聚合函数的判断。

4.7 连接查询

4.7.1 笛卡尔乘积现象

概念:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接。

发生原因:没有有效的连接。

如何避免:添加有效的连接。

4.7.2 分类

①按年代分类:

(1)sql2标准,其仅仅支持内连接,Oracle、Sqlservery支持一部分外连接,但MySQL不支持。

(2)sql99标准【推荐】,支持内连接+外连接(左外和右外)+交叉连接。

②按功能分类:

(1)内连接,其又分为等值连接、非等值连接和自连接。

(2)外连接,其又分为左外连接、右外连接和全外连接。

(3)交叉连接。

4.7.3 sql92标准

 ①等值连接:

(1)语法

(2)特点

 多表等值连接的结果为多表的交叉部份;

n表连接时,至少需要n-1个连接条件;

多表的顺序没有要求;

一般需要为表起别名;

可以搭配前面介绍的所有子句使用,比如排序、分组、筛选。

②非等值连接

(1)语法

③自连接

(1)语法

4.7.4 sql99标准

①语法

 

②特点

(1)表的顺序可以调换。

(2)内连接的结果=多表的交集。

(3) n表连接至少需要n-1个条件。

③内连接

(1)语法

 (2)特点

可以添加排序、分组、筛选;

inner可以省略;

筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读;

inner join连接和sql92语法中等值连接效果是一样的,都是查询多表的交集。

④外连接

(1)语法

(2)特点

 外连接的查询结果为主表的所有记录,如果从表中有和它匹配的,则显示匹配的值,如果从表中没有和它匹配的,则显示null值;

左外连接,left join左边的是主表,  右外连接,right join右边的是主表,   full join两边都是主表;

左外和右外交换两个表的顺序,可以实现同样的效果;

全外连接+内连接的结果+表1中有但表2中没有的+表2中有但表1没有的;

外连接查询结果=内连接结果+主表中有而从表没有的记录。

 ⑤交叉连接

 (1)语法

 (2)特点

类似于笛卡尔乘积。

4.7.5 sql92和sql99PK

①从功能上来看:

sal99支持的较多。

②从可读性来看:

sql99实现连接条件和筛选条件的分离,可读性较高。

4.7.6 总结

4.8 子查询

4.8.1 概念

出现在其他语句内部的select语句,称为子查询或内查询;

内部嵌套其他select语句的查询,称为外查询或主查询。

4.8.2 分类

①按子查询出现的位置

(1)select后面

仅仅支持标量子查询

(2)from后面

支持表子查询,将子查询结果充当一个表,要求必须起别名。

(3)where或having后面 ★

支持标量子查询★(单行)

支持列子查询 ★(多行)

支持行子查询(用的较少)

其特点:

子查询放在小括号内;

子查询一般放在条件的右侧;

标量子查询,一般搭配着单行操作符使用     单行操作符(> < >= <= = <>),  列子查询,一般搭配着多行操作符来使用    多行操作符(IN、ANY/SOME、ALL);

子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果。

(4)exists后面(相关子查询)

语法:

exists(完整的查询语句)。

结果:

结果:1或0。

②按结果集的行列数不同

(1)标量子查询(结果集只有一行一列),非法使用标量子查询(其子查询不是一行一列或是表格中没有查询信息)。

(2)列子查询(结果集只有一列多行)。

(3)行子查询(结果集有一行多列)。

(4)表子查询(结果集一般为多行多列)。

4.9 分页查询

4.9.1 应用场景

应用场景:当要显示的数据,一页显示不全,需要分页提交spl请求。

4.9.2 语法

select 查询列表

from 表

limit(page-1)*size;

4.9.3 特点

①limit语句要放在查询语句的最后。

②公式:要显示的页数page,每页的条目数size。

5.0 union联合查询 

5.0.1 概念

将多条查询语句的结果合并成一个结果.

5.0.2 语法

select

查询语句1

union

查询语句2

union

...

5.0.3 应用场景

要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致。

5.0.4 特点★

①.要求多条查询语句的查询列表数是一致的!

②要求多条查询语句的查询的每一列的类型和顺序最好一致。

③union关键字默认去重,如果使用union all 可以包含重复项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值