2024年C C++最全MySQL之DQL——查询语言_数据库中show属于dql吗 ,C C++面试题及解析

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

1.3、数据库的存储特点

1.将数据放到表中,表再放到数据库中
            2.一个数据库中可以有多个表,每个表都有一个名字,用来标识自己,表名具有唯一性
            3.表具有一些特性,这些特性定义了数据在表中如何存储,类似java中“类”的设计
            4.表由列组成,我们也称为字段,所有表都是由一个或多个列组成的,每一列类似于就java中的“属性”
            5.表中的数据都是按行存储的,每一行类似于java中的“对象”

二、MySQL

既然要学习数据库,我们就要下载数据库管理系统才可以,这里我们选用的MySQL,大家可以前往他的官网进行下载使用免费版本:MySQL

安装好MySQL之后,我们需要启动他的服务:

2.1、 MySQL服务的登录和退出

方式一:通过MySQL自带的客户端
        ​                    只限于root用户
    ​        方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd
    ​             登录:​mysql 【-h主机名 -P端口号 】-u用户名 -p密码  (完整版,即远程登陆,可省略中口号中的代码,省略版仅支持登陆本机用户) 
                 退出:
        ​exit或ctrl+C
          

2.2、 MySQL服务的启动和停止

方式一:计算机——右击管理——服务——MySQL
    ​        方式二:通过管理员身份运行cmd命令提示行
    ​                net start mysql(启动服务)
    ​                net stop mysql(停止服务)

2.3、MySQL常见数据指令

常见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=nn就是你要删除的行对应的字段
12.查看MySQL版本方法1.在进入MySQL数据中         1.select version();          2.退出MySQL数据库之后         (1).mysql --version         (2).mysql -V

2.4、MySQL语法规范

1.不区分大小写,但建议关键字大写,表名,列名小写
    2.每条命令最好以分号结尾
    3.每条命令根据需要,可以进行缩进,或换行
    4.注释
        单行注释
            #注释文字
            – 注释文字
                注意,–之后必须打空格
     多行注释
            /*注释文字*/

三、MySQL之DQL语言

在该部分我们学习以下内容:

基础查询、条件查询、排序查询、常见函数、分组函数、分组查询、连接查询、子查询、分页查询、union联合查询,内容较多,我们慢慢展开。

3.1、简单查询

在进行查询前呢我们最好下载一个图形化客户端进行操作,这里我学习用的SQLyog,大家可以在CSDN搜索如何下载和使用该软件,这里就不做过多介绍。

当我们第一次进行查询的时候,一定注意要进入你查询的数据库中才能进行查询操作

3.1.1、简单查询语句语法

select 查询列表 from 表名;
            他的意思,类似于java中的System.out.println(打印的内容),把我们查询的内容显示出来。

特点:
                    1、查询的列表可以是表中 的字段 ,常量值,表达式,函数
                    2、查询的结果是一个虚拟的表格
    ​  图示:

以下给大家介绍几种常用的操作

3.1.2、给字段起别名

语法:select 字段 AS 别名;

注意:如果别名与关键字冲突,别名应该使用双引号或者单引号括起来,建议使用双引号

起别名的好处:
                                    1、便于理解
                                    2、如果要查询的字段有重名的情况,使用别名可以区分开来

3.1.3、去重

语法:select distinct 字段 from 表名;

去重前:

去重之后:

很明显的看到我们去重之前有107行数据,而去重之后 仅剩余12行数据。

3.1.4、MySQL中+号的作用以及concat函数

在学习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…)
            实例用法
               

3.1.5、ifnull函数

ifnull函数的含义:ifnull的执行是检查如果字段中有值为null的情况,没有则返回你设置的值
           语法: select ifnull(原值字段,你设置的返回值)

图示:

3.2、条件查询

语法:

select 
        查询列表(第三步执行)
·    from 
        表名(第一步执行)
    where 
        筛选条件(第二部执行)

筛选条件我们可以大致分为三类:

3.2.1、按条件表达式筛选:

条件运算符:> < = != <> >= <=

3.2.2、按逻辑表达式筛选:

逻辑运算符:

逻辑运算符
| &&  | || | ! |
| and | or | not |

该连接符主要用于连接表达式

作用:
                    1、&&和and:两个条件都为true,则结果为true,反之为false
                    2、   ||和or:只要有一个条件为true,则结果为true,反之为false
                    3、!和not:如果连接的条件本身为false,则结果为true,否则为false

3.2.3、模糊查询:

该类连接符分类:

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值,又可以判断普通的数值,可读性较低

3.3、排序查询

语法:

select
        要查询的东西
    from
        表
    where 
        条件
  order by 排序的字段|表达式|函数|别名 【asc|desc】

排序方式:

* ASC:升序,默认的
 * DESC:降序

特点
    1.asc代表的是升序,desc代表的是降序
        如果关键字不写,默认是升序
    2.order by子句一般是放在查询语句的最后面,limit子句除外
    3.order by子句中可以支持单个字段,多个字段,表达式,函数,别名
    4.length函数表示返回字符串长度

3.4、常见函数

3.4.1、字符函数

concat: 拼接
substr: 截取子串
upper: 转换成大写
lower: 转换成小写
trim: 去前后指定的空格和字符
ltrim: 去左边空格
rtrim: 去右边空格
replace: 替换
lpad: 左填充
rpad: 右填充
instr: 返回子串第一次出现的索引
length: 获取字节个数

3.4.2、数学函数

rand: 随机数
floor: 向下取整
    返回<=该参数的最大整数
ceil: 向上取整
    返回>=该参数的最小整数
mod: 取余
truncate: 截断
rand:获取随机数,取值范围0-1

3.4.3、日期函数

now: 当前系统日期+时间
curdate: 当前系统日期
curtime: 当前系统时间
str_to_date: 将字符转换成日期
date_format: 将日期转换成字符
datediff:两个日期相差天数
monthname:以英文形式返回月

3.4.4、其他函数

database: 当前库
user: 当前连接用户
version: 版本
password(‘字符’):返回该字符的加密形式
md5(‘字符’):返回该字符的md5加密形式

3.4.5、流程控制函数

该函数式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效果:

案例:

3.5、分组函数

* 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分组查询的语句)

3.6、分组查询

语法:

select 查询的字段,分组函数
    from 表
    group by 分组的字段

特点:

1、可以按单个字段分组
    2、和分组函数一同查询的字段最好是分组后的字段
    3、可以按多个字段分组,字段之间用逗号隔开
    4、可以支持排序
    5、having后可以支持别名

注意:

分组函数做筛选不能放在where后面

能做分组前筛选的,尽量选择分组前筛选,以提高效率

分组可以按单个字段也可以按多个字段并且可以搭配着排序使用

题外话:

where 和 having 的区别?
    1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
    2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

3.7、连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

在我们对表进行查询操作时,会出先一个现象就是我们有一个表由m行,另一个表由n行,而当我们对两张表进行连接查询时,对连接条件进行了错误的添加,就会出现m*n行数据,那么这肯定不是我们想要的结果,因为他包含了太多重复的无用的数据,该现象就叫做笛卡尔乘积效应

发生原因:

  1. 省略连接条件
  2. 连接条件无效
  3. 所有表中所有行互相连接

如何解决:

添加有效的连接条件

3.7.1、连接查询的分类:

3.7.2、sql92标准下的连接查询

它只支持内连接中的等值连接,非等值连接,自连接

语法:

SELECT 查询列表
        FROM 表名1 别名1 ,表名2 别名2 
        WHERE 连接条件 【等值连接,非等值连接,自连接
        AND 筛选条件    
        GROUP BY 分组列表        
        HAVING 分组后筛选条件    
        ORDER BY 排序列表

等值连接,什么意思呢?

①多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③多表的顺序一般没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序,分组,筛选
连接条件为等于号

举例:

非等值连接:连接条件不为等于号

举例:

 很明显这里的连接条件是between and

自连接:自己表中内容进行连接,

自连接需要注意对表起别名作区分

3.7.3、sql99标准下的连接查询

内连接:

语法:

select 字段列表 
        from 表名1 
        [inner] join 表名2 on 条件
        where 筛选条件【等值连接,非等值连接,自连接
        group by 分组条件
        having 分组后的筛选条件
        order by 排序字段

等值连接:

①添加排序、分组、筛选
②inner可以省略
③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集

实例:

非等值连接:连接条件不为等号

实例:

自连接:在自己表内为连接条件

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

的交集

实例:

非等值连接:连接条件不为等号

实例:

自连接:在自己表内为连接条件

[外链图片转存中…(img-2dgeM1By-1715529021099)]
[外链图片转存中…(img-vAhOvNbc-1715529021100)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值