增删改查sql语句面试(sql面试常见增删改查)

增删改查sql语句面试(sql面试常见增删改查)把查询结果去除重复记录 distinct 注意 原表数据不会被修改 只是查询结果去重 去重需要使用一个关键字 distinct 从一张表中单独查询 称为单表查询 emp 表和 dept 表联合起来查询数据 从 emp 表中取员工名字 从 dept 表中取部门名字 这种 跨表查询 多张表联合起来查询数据 被称为连接查询 根据 语法的年代 分类 SQL92 1992 年的时候出现的语法 SQL99 1999 年的时候出现的语法 我们这里重点学习 SQL99



把查询结果去除重复记录【distinct

注意:原表数据不会被修改,只是查询结果去重。

去重需要使用一个关键字:distinct





从一张表中单独查询,称为单表查询。

emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。

这种跨表查询,多张表联合起来查询数据,被称为连接查询。

根据语法的年代分类:

  • SQL92:1992年的时候出现的语法
  • SQL99:1999年的时候出现的语法

我们这里重点学习SQL99.(这个过程中简单演示一个SQL92的例子)

根据表连接的方式分类:

  1. 内连接:
    • 等值连接
    • 非等值连接
    • 自连接
  2. 外连接:
    • 左外连接(左连接)
    • 右外连接(右连接)
  3. 全连接(不讲)

无条件限制

当两张表进行连接查询时,没有任何条件的限制会发生什么现象?


当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积。

这种现象被称为:笛卡尔积现象。(笛卡尔发现的,这是一个数学现象。)

有条件限制

怎么避免笛卡尔积现象?

连接时加条件,满足这个条件的记录被筛选出来!


思考:

最终查询的结果条数是14条,但是匹配的过程中,匹配的次数减少了吗?

还是56次,只不过进行了四选一。次数没有减少。

注意:

通过笛卡尔积现象得出,表的连接次数越多效率越低,尽量避免表的连接次数。

等值连接

sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。


sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where


非等值连接


自连接




内外连接的区别?


思考:

外连接的查询结果条数一定是 >= 内连接的查询结果条数?--正确。



两张表的连接可以选择内连接或者是外连接。

那么三张表乃至四张表该怎么进行连接呢?

语法:

​ select
​ ...

​ from

​ a
​ join

​ b

​ on

​ a和b的连接条件

​ join

​ c

​ on

​ a和c的连接条件

​ right join

​ d

​ on

​ a和d的连接条件

一条SQL中内连接和外连接可以混合。都可以出现!




select语句中嵌套select语句,被嵌套的select语句称为子查询。

子查询都可以出现在哪里呢?

select

​ ..(select).
from

​ ..(select).

where

​ ..(select).







union的效率要高一些。对于表连接来说,每连接一次新表,

则匹配的次数满足笛卡尔积,成倍的翻。。。

但是union可以减少匹配的次数。在减少匹配次数的情况下,

还可以完成两个结果集的拼接。

a 连接 b 连接 c

a 10条记录

b 10条记录

c 10条记录

匹配次数是:1000

a 连接 b一个结果:10 * 10 --> 100次

a 连接 c一个结果:10 * 10 --> 100次

使用union的话是:100次 + 100次 = 200次。(union把乘法变成了加法运算)






将查询结果集的一部分取出来。通常使用在分页查询当中。

百度默认:一页显示10条记录。

分页的作用是为了提高用户的体验,因为一次全部都查出来,用户体验差。

可以一页一页翻页看。

完整用法:limit startIndex, length

startIndex是起始下标,length是长度。

起始下标从0开始。

缺省用法:limit 5; 这是取前5.


注意:mysql当中limit在order by之后执行!!!!!



每页显示3条记录
第1页:limit 0,3 [0 1 2]
第2页:limit 3,3 [3 4 5]
第3页:limit 6,3 [6 7 8]
第4页:limit 9,3 [9 10 11]

每页显示pageSize条记录
第pageNo页:


记公式:

select
...
from
...
where
...
group by
...
having
...
order by
...
limit
...

执行顺序?
1.from
2.where
3.group by
4.having
5.select
6.order by
7.limit..

create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);

create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);

表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。

字段名:见名知意。

表名和字段名都属于标识符。

很多数据类型,我们只需要掌握一些常见的数据类型即可。

varchar(最长255)

  1. 可变长度的字符串

  2. 比较智能,节省空间

  3. 会根据实际的数据长度动态分配空间

  • 优点:节省空间

  • 缺点:需要动态分配空间,速度慢。

char(最长255)

  1. 定长字符串

  2. 不管实际的数据长度是多少,分配固定长度的空间去存储数据。

  3. 使用不恰当的时候,可能会导致空间的浪费

  • 优点:不需要动态分配空间,速度快。

  • 缺点:使用不当可能会导致空间的浪费。

varchar 和 char我们应该怎么选择

  • 性别字段你选什么?因为性别是固定长度的字符串,所以选择char。

  • 姓名字段你选什么?每一个人的名字长度不同,所以选择varchar。

其他



创建一个学生表:

有学号、姓名、年龄、性别、邮箱地址


删除表:



insert插入数据(DML)

语法格式:

​ insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);

​ 注意:字段名和值要一一对应。什么是一一对应?数量要对应。数据类型要对应。


insert插入日期

数字格式化:format


格式化数字:format(数字, '格式')


:将字符串类型转换成date类型
:将date类型转换成具有一定格式的字符串类型。

注意:

数据库中的有一条命名规范:所有的标识符都是全部小写单词和单词之间使用下划线进行衔接。



怎么办?可以使用str_to_date函数进行类型转换。

​ str_to_date函数可以将字符串转换成日期类型date?

​ 语法格式:

​ str_to_date('字符串日期', '日期格式')

mysql的日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒


date和datetime两个类型的区别?

  • date是短日期:只包括年月日信息。
  • datetime是长日期:包括年月日时分秒信息。


语法格式:

​ update 表名 set 字段名1 = 值1,字段名2 = 值2,字段名3 = 值3... where 条件;

注意:没有条件限制会导致所有数据全部更新。



语法格式?

​ delete from 表名 where 条件;

注意:没有条件,整张表的数据会全部删除!


                    
编程小号
上一篇 2025-03-01 08:40
下一篇 2025-05-30 18:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/35930.html