数据库多表查询 联合查询 增删改查

插入

方式一

语法:

insert into 表名 (字段名,...) values (值,...);

特点:

1、要求值的类型和字段的类型要一致或兼容

2、字段的个数和顺序不一定与原始表中的字段个数和顺序一致

但必须保证值和字段一一对应

3、假如表中有可以为null的字段,注意可以通过以下两种方式插入null值

①字段和值都省略

②字段写上,值使用null

4、字段和值的个数必须一致

5、字段名可以省略,默认所有列

方式二

语法:

insert into 表名 set 字段=值,字段=值,...;

两种方式的区别:

1.方式一支持一次插入多行,语法如下:

insert into 表名(字段名,..) values(值,..),(值,...),...;

2.方式二支持子查询,语法如下:

insert into 表名
查询语句;

修改

一、修改单表的记录

语法:

update 表名 set 字段=值,字段=值 where 筛选条件;`

二、修改多表的记录【补充】

语法:

update 表1 别名
left|right|inner join 表2 别名
on 连接条件
set 字段=值,字段=值
where 筛选条件;

删除

方式一:使用delete

一、删除单表的记录

语法:

delete from 表名 where 筛选条件 limit 条目数

二、级联删除[补充]

语法:

delete 别名1,别名2 from 表1 别名
inner|left|right join 表2 别名
on 连接条件
where 筛选条件

方式二:使用truncate

语法:

truncate table 表名

两种方式的区别【面试题】

  1. truncate删除后,如果再插入,标识列从1开始;delete删除后,如果再插入,标识列从断点开始
  2. delete可以添加筛选条件;truncate不可以添加筛选条件
  3. truncate效率较高
  4. truncate没有返回值;delete可以返回受影响的行数
  5. truncate不可以回滚;delete可以回滚

基础查询

1.去除重复的记录distinct

select distinct address from stu;

2.查询时 as 来别名列明

select name as 名字 ,age as 年龄,from user;

SELECT userCode AS 名字 FROM smbms_user;

语法:

select 列名1, ... ,列名n from 表名
where 条件        -- 1、条件
group by 列名     -- 2、分组
having 条件       -- 3、条件
order by 列名     -- 4、排序
limit 开始,条数   -- 5、分页

关于列的操作

1、查询所有列所有行

select * from 表名

2、查询指定列

#多列列名使用,隔开
select 列名 from 表名

3、给列起别名

select 列名 [as] 别名,列名n [as] 别名n

4、列查询并进行算术运算

#列和固定数值
select 列名+\-\*\/\%数值 from 表名
#列和列
select 列名+\-\*\/\%列名 from 表名

5、多列进行合并为一列查询

select concat(列名1,列名2,...)合并后列名 from 表名

6、查询过程增加常量列

select * ,'常量' 列名 from 表名

条件查询(where)

1、比较运算符作为处理条件

==(=,>,

select * from 表名 where 列名=值

2、多条件

1)同时满足(and)

select * from 表名 where 列名1=值 and 列名2=值

数据库多表查询 联合查询 增删改查

2)或者(or)

#不同列
select * from 表名 where 列名1=值 or 列名2=值
#同一列的不同值
select * from 表名 where 列名 in (值1,值2,...)
select * from 表名 where 列名 not in (值1,值2,...)

数据库多表查询 联合查询 增删改查

数据库多表查询 联合查询 增删改查

3)模糊查询(like)

#查询l开头的名字,任意长度
select * from 表名 where 列名 like 'l%'
#查询l开头的名字,固定长度
select * from 表名 where 列名 like 'l__'
#查询包含o的名字
select * from 表名 where 列名 like '%o%'

数据库多表查询 联合查询 增删改查

4)上下界(between)

select * from 表名 where 列名 between 下界值 and 上界值

排序查询(order by)

数据库多表查询 联合查询 增删改查

升序

select * from 表名 order by 列名
select * from 表名 order by 列名 asc

降序

select * from 表名 order by 列名 desc

数据库多表查询 联合查询 增删改查

排序相等行,在进行排序

数据库多表查询 联合查询 增删改查
select * from 表名 order by 列名1 desc,列名2 desc

分页查询(limit)

#起始位置默认为0,查询不包括起始位置
select * from 表名 limit 起始位置,每页条目数

公式

#假如要显示的页数为page,每一页条目数为size
select 查询列表
from 表
limit (page-1)*size,size;

聚合函数

关于某一列进行操作, 和行没有关系
count() 返回结果集中行的数目 max() 返回结果集中所有值的最大值 min() 返回结果集中所有值的最小值 sum() 返回结果集中所有值的总和 avg() 返回结果集中所有值的平均值

用法

聚合函数null值不参与运算,如果希望null值也参与那么需要ifnull()函数处理

select 函数名(列名) from 表名

数据库多表查询 联合查询 增删改查

数据库多表查询 联合查询 增删改查

分组查询(group by)

select 分组列名,聚合函数 from 表名 group by 分组列名
#一般和聚合函数一起使用
#如,查询student表中的男女两个分组中的最大年龄和最小年龄
select ssex,max(sage),min(sage) from student group by ssex

条件筛选(having)

group by后不可以使用where进行筛选,需要使用 having关键字

如果能用where筛选数据的话,绝不使用having

where和having的区别?

  • 都是进行条件判断的关键字
  • where条件判断是在分组前判断,having条件判断是在分组后判断
  • where关键字要写在group by前面,having关键字要写在group by后面
  • where条件里不能写聚合函数,having条件里可以写聚合函数
#如,查询年龄大于11的各个年龄段的人数
select sage,count(sage) from student group by sage having sage > 11
#可以使用where就不要用having
select sage,count(sage) from student where sage > 11 group by sage

联合查询(union)

  1. 要求多条查询语句的查询 列数必须一致
  2. 要求多条查询语句的查询的各列类型、顺序最好一致
  3. union 去重,union all包含重复项
1. 将2个表的数据进行拼接,针对拼接后的重复数据 去重显示
select 列名 from 表名1 where 条件
union
select 列名 from 表名2 where 条件
2. 将2个表的数据进行拼接,针对拼接后的重复数据 不去重显示
select 列名 from 表名1 where 条件
union all
select 列名 from 表名2 where 条件

多表联合查询

#sql92
select * from 表1,表2;
#sql99
select * from 表1 cross join 表2;

笛卡尔积组合,形成数据没有价值

内连接(inner join)

select 列名 from A表
inner join B表 on 关联条件;

外连接

左外连接(left)

select 列名 from A表
left join B表 on 关联条件;

右外连接(right)

select 列名 from A表
right join B表 on 关联条件;

自连接

#查询1号课程成大于2号课程的学生id
select * from sc s1
inner join sc s2
on s1.sno=s2.sno
where s1.cno=1 and s2.cno=2 and s1.score>s2.score

去重(distinct)

select distinct 列名 from 表名;

子查询

嵌套查询,就是指一个sql语句里面还有一条sql语句

将查询的结果(可以作为值,也可以作为表),再次被sql语句使用

结果为一个值

#查询李华老师所带课程
select * from course where tno =
(
      select tno from teacher where tname = '李华'
)

结果为一个表(多个值)

#查询李华老师所带学生的信息
-- 1 获取李华老师的编号
select tno from teacher where tname = '李华'
-- 2 根据老师的编号获取所带学科的编号
select cno from course where cno in
(
      select tno from teacher where tname = '李华'
)
-- 3 根据学科编号获取学生的编号
select sno from sc where cno in
(
  select cno from course where cno in
  (
      select tno from teacher where tname = '李华'
  )
)
-- 4 根据学生编号,获取学生的信息
select * from student where sno in
(
  select sno from sc where cno in
  (
    select cno from course where cno in
    (
        select tno from teacher where tname = '李华'
    )
  )
)

any(满足该字段任何一个值,’或’)

#查询学生表中,年龄大于张三或tony的学生信息
select * from student where sage > any(
    select sage from student where sname = '张三' or sname = 'tony'
)

all(满足该字段所有的值,’且’)

#查询学生表中,年龄大于张三并且大于tony的学生信息
select * from student where sage > all(
    select sage from student where sname = '张三' or sname = 'tony'
)

exists和in的区别

扩展

按照条件显示不同信息(case、when、then、else、end)

#查询student表中,按照年龄显示是否成年
select *,
case
  when sage >= 18 then '成年'
    else '未成年'
    end
from student

Original: https://www.cnblogs.com/am0304/p/16481567.html
Author: 超甜的小布丁
Title: 数据库多表查询 联合查询 增删改查

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622537/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java Activiti 工作流引擎 SSM 框架模块设计方案

    工作流模块 1.模型管理 :web在线流程设计器、预览流程xml、导出xml、部署流程 2.流程管理 :导入导出流程资源文件、查看流程图、根据流程实例反射出流程模型、激活挂起 3….

    数据库 2023年6月6日
    098
  • 接口测试

    :配置windows中特定应用的抓包(默认抓取不到) :添加备注信息 :重新发起指定请求 :清空指定会话内容 :断点放行 :模式切换 :相应数据解码 :抓取指定进程发出的请求 :关…

    数据库 2023年6月16日
    0100
  • 即时通讯课设Android端问题记录

    转眼间,就已经是大四学生,目前正在写毕设。Android 端没有系统的学习过,都是哪里不会查哪里,基本靠度娘。所以,在此记录下课设开发过程中,Android 端遇到的问题。 在主线…

    数据库 2023年6月9日
    046
  • SQL 版本号排序

    SQL 语句直接对内容为版本号格式的字段进行排序时,排序效果通常不是最终想要的效果,因为最终需要的效果,是需对版本号里的每一段(通常以小数点分隔)按数值进行排序。 解决这个问题,主…

    数据库 2023年6月16日
    066
  • MySQL数据库 DDL 阻塞问题定位 【转载】

    陈臣,甲骨文MySQL首席解决方案工程师,公众号《MySQL实战》作者,有大规模的MySQL,Redis,MongoDB,ES的管理和维护经验,擅长MySQL数据库的性能优化及日常…

    数据库 2023年6月16日
    076
  • ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

    本次 Apache ShardingSphere 5.1.2 版本更新为大家带来了三大全新功能,其中之一即为使用 ShardingSphere-Proxy chart 在云环境中快…

    数据库 2023年6月16日
    080
  • JSP的文件上传和下载

    文件的上传和下载 文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。比如:微信头像,就使用了上传。邮箱中也有附件的上传和下载功能。 文件的上传…

    数据库 2023年6月11日
    078
  • Golang context

    Context Go 语言中提供了 context 包,通过显示传递 context, 实现请求级别的元数据、取消信号、终止信号的传递。context 包提供了从现有的上下文值(c…

    数据库 2023年6月16日
    077
  • 红黑树添加删除

    上一篇写了234树对比红黑树,和红黑树某些情况需要调整的原因,这篇就只写红黑树的添加和删除 红黑树 JAVA技术交流群:737698533 性质 每个节点要么红色要么黑色 根节点是…

    数据库 2023年6月16日
    048
  • 页面静态化

    网站的首页频繁被访问,为了提升访问速度,除了我们之前已经学过的使用缓存技术外,还可以使用页面静态化技术。 页面静态化即将动态渲染生成的页面结果保存成html文件,放到静态文件服务器…

    数据库 2023年6月14日
    073
  • 0x03MySQL的SQL基础

    0x03MySQL的SQL基础1.SQL介绍结构化的查询语言,关系型数据库中用的一类语言。SQL标准 89 92 99 03MySQL 2.SQL类常用型2.1 mysql自带的功…

    数据库 2023年6月9日
    077
  • JUC学习笔记(六)

    JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为: CountDownLatch: 减少计数 CyclicBar…

    数据库 2023年6月6日
    091
  • Nginx平滑升级版本

    Nginx平滑升级版本 一, 查看现目前版本,准备预升级版本的安装包 #查看nginx版本 /usr/local/nginx/sbin/nginx -v #测试nginx访问是否正…

    数据库 2023年6月11日
    074
  • 模板语法之继承

    什么是模板继承 模板继承就是指可以使父模板的内容重用,子模板直接继承父模板的全部内容,并可以覆盖父模板中相应的块 继承的语法 父模&am…

    数据库 2023年6月14日
    082
  • Array源码刨析

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    071
  • 系统设计的11个考虑

    有了《系统架构的11条原则》,真正到设计阶段还有另外11个考虑。 系统正确性 考虑一:负负得正 假如我们看到某个代码,明显有逻辑错误,想随手改改。你就要考虑一件事情:这段明显有问题…

    数据库 2023年6月6日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球