Sql语句DQL操作 查询操作单表 多表 子表(嵌套)

DQL 查询语句

查询指定的列

  • **语法 : ** SELECT [查询列表] FROM 表名
  • 结果可以是:表格中的字段,常量,表达式,函数
  • 查询的结果是虚拟表格,不可以操作 是只读的
  • 可以对查询结果进行 算术运算(+ - * /);
  • **特点: **
    • 查询的列表可以是:表中的字段,常量,表达式,函数
    • 查询的结果是一个虚拟的表格

查询结果处理

特定列查询 select column 1, column2 form table(表名)

全部列的查询select * from TABLE (表名)

-- 使用该表来进行举例子
CREATE DATABASE IF NOT EXISTS student  CHARSET utf8CREATE TABLE stu(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 
number INT(5) NOT NULL, 
stuname VARCHAR(10) NOT NULL, 
age INT(3) CHECK(age>18), 
birthday DATE, 
weight DOUBLE, 
opertime DATETIME
)INSERT INTO stu (number ,stuname,birthday)VALUES(456,'cwy','2023-01-01');

算术运算符: + - * /

排除重复行:select distinct column1,column2 from table

-- 查询指定的列  * 表示查询所有列
SELECT id,number FROM stu
SELECT * FROM stu
-- 查询结果进行算术运算
SELECT id+1, number/2 FROM stu
-- 查询去重  对查询结果进行去重
SELECT DISTINCT stuname FROM stu

image-20231220192647855

查询的时候可以使用函数 select也是一个函数

函数:类似于java中方法,将一组逻辑语句事先在数据库可以中定义好,可以直接调用

分类:

  • 单行函数:如concat,length,ifull等;
  • 分组函数:做统计使用,又称为统计函数,聚合函数,组合函数
单行函数

字符函数

length()函数:获取参数值的字节个数

SELECT stuname,LENGTH(stuname) FROM stu

image-20231220192723831

char_length(列名)获取变量字符串的长度

SELECT stuname,LENGTH(stuname) FROM stu
-- 与length()用法一样

concat(str1,str2,.....)拼接字符串 str 指的是为字符串的列 如果其中str含NULL结果都为NULL

instr(str ,指定字符)查找指定字符在str中首次出现的位置

ELECT INSTR(stuname,'w')  FROM stu

image-20231220193449507

trim(str) 默认去除str前后的空格,str为指定的子串且来自父类字符串

lpad(str,length,字符),与 rpad(str,length,字符) 在字符左右填充length长的字符 注意length指的是字节的长度

-- lpad(str,length,字符)  在str左边填充length长度的 字符
SELECT LPAD(stuname,6,'w')  FROM stu
-- rpad 同上 在右边填充

image-20231220194228464

replace(sre, 目标字符,替换字符)

-- replace(str,目标字符,替换字符) 把str中的目标字符  替换为 替换字符
SELECT REPLACE(stuname,'d','w')  FROM stu

upper(str)转大写 lower(str)转小写 str可以是字符串的列也可也是 字符串 但如果是字符串他会单独显示一列为str大写

-- upper()转大写  lower() 转小写 
SELECT UPPER(stuname) FROM stu -- 为字符串的列

image-20231220194728980

-- upper()转大写  lower() 转小写
SELECT UPPER('dqw') FROM stu

image-20231220194820834

逻辑处理

case when 条件 then 结果1 else 结果2 end;(可以有多个when)

-- 表示id为123时 为1 否则都为2
SELECT CASE WHEN   id=123 THEN 1 ELSE 2 END FROM stu;

image-20231220195308612

is null SELECT CASE WHEN age IS NULL THEN 1 ELSE 2 END FROM stu; 判断age是否为null

ifnull(被检测值,默认值)函数检测是否为null如果为null返回指定值,否则返回原本值

SELECT IFNULL(age,0) FROM stu;-- 判断age是否为空 不是返回原本值 否则返回 0

image-20231220195729364

if(条件,结果1,结果2) if- else 的效果

SELECT IF(age>50,0,1) FROM stu;

image-20231220200123703

日期函数

now();返回当前日期

-- 获取当前日期 年月日 时分秒
SELECT NOW() FROM stu;

image-20231220200539675

curdate()获取当前日期 不包含时分秒 curtime() 获取当前时分秒 不包含日期

可以获取指定部分 年 ,月, 日, 小时 , 分钟,秒

TEAR(日期列) MONTH(日期列) DAY(日期列) HOUR(日期列) MINUTE(日期列) SECOND(日期列)

str_to_date(字符串格式的日期,格式)将日期格式的字符转化为指定格式的日期

date_format(日期列,格式) 将日期转化为字符串

datediff(big ,small)返回两个日期相差的天数

日期格式

image-20231220201533179

分组函数

功能: 用作统计使用,又称为聚合函数或统计函数或组函数

分类:sum求和 avg平均值 max最大值 min最小值 count计数(非空)

  1. sum,avg一般用于处理数值型max min count可以处理任何类型
  2. 以上分组函数都可以忽略null值
  3. count函数的一般使用 count(*)用作统计行数.
  4. 和分组函数一同查询的字段要求是 group by后的字段 group by必须在语句最后
- 求和函数
SELECT SUM(id) FROM stu;
-- 求平均
SELECT AVG(id) FROM stu;
-- sum avg 只可以统计 数值类型  -- 求最大值
SELECT MAX(weight) FROM stu
-- 求最小值
SELECT MIN(weight) FROM stu
-- 统计函数
SELECT COUNT(weight>3) FROM stu;
-- 分组函数
-- group by 分组函数 后面对应的变量 要与前面出现的变量一样()
SELECT YEAR(birthday), COUNT(YEAR(birthday)) FROM stu GROUP BY YEAR(birthday);

image-20231220202316749

分组函数

image-20231220202400081

image-20231220203957326

.

条件查询

where(条件) where子句紧跟from子句

  • 语法select <结果> from<表名>where<条件>

  • SELECT stuname FROM stu WHERE stuname LIKE '%w%';
    -- 模糊匹配  stuname 含w数据
    

image-20231220202746174

条件中的比较

  • = ,!= 或<>,>,<,>=,<=
  • 逻辑运算
    • and
    • or
    • not

条件查询中模糊查询

LIKE: 是否匹配于一个模式,一般和通配符搭配使用,可以判断字符型数值或数值型

通配符: % 任意多个字符

  • 条件查询 'w%'表示以w开头的模糊匹配 '%w’表示以w结尾的模糊匹配 '%w%'表示包含w的模糊匹配
SELECT stuname FROM stu WHERE stuname LIKE '%w%';
-- 模糊匹配  stuname 含w数据
-- 结果如上

between and 两者之间,包含临界值

In 判断某字段的值是否输入in列表中的某一项

IS NULL(为空的) 或 IS NOT NULL(不为空的)

联合语句 UNION UNION ALL
`UNION`[SQL 语句 1]UNION[SQL 语句 2]`UNION ALL`[SQL 语句 1]UNION ALL[SQL 语句 2]

注:当使用union时 MySQL会把结果集中重复的记录删除掉,而是用UNION ALL ,MySQL会把所有记录返回,其效率高于union

排序

如果想对查询的结果进行排序 使用ORDER BY 子句排序

ORDER BY [ASC/DESC]

asc 代表的是升序 ,desc代表的是降序,如果不写,默认为升序

ORDER BY可以支持单个字段与多个字段

-- 排序 order by asc 是升序 desc是降序 
SELECT stuname ,weight FROM stu ORDER BY weight ASC

image-20231220205122063

数量限制

limit子句:对查询显示结果限制数目(sql语句最末尾位置)

SELECT * FROM table LIMIT offset rows

SELECT * FROM table LIMIT 0,5

分组查询

语法:

  • SELECT [分组函数] ,[列](要求出现在group by的后面)

    from [表]

    [where 筛选条件]

    group by 分组的列表 //分组

    [having 分组后筛选] //

    [order by 子句] //排序

    注意:查询列表比较特特殊,要求是分组函数和group by后出现的字段

  • 数据源源位置关键字
    分组前的筛选原始表group by子句前面where
    分组后筛选分组后的激活集group by 的后面having

一对多问题

​ 函数:group_concat([列名])

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据库的设计范式

设计3范式

  1. 第一范式
    • 第一范式是最基本的范式,如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足了第一范式
    • eg:联系方式---> 邮箱,手机号 ,QQ可以分解
  2. 第二范式
    • 第二范式要有主键,如果没有主键就没有唯一性,就无法找到记录(但有些表可能没有主键)
  3. 第三范式
    • 确保每列都和主键列直接相关,而不是间接相关,要求一个数据库中不包含已在其他表中包含的非关键字信息
    • 即在一张表关联其他多张表数据时,只需要关联主键即可

添加约束

CREATE TABLE major(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20))DROP TABLE stu
CREATE TABLE stu(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender CHAR(1),phone VARCHAR(12),birthday DATE)
-- 增加列(对stu)
ALTER TABLE stu ADD majorid INT;INSERT INTO major(NAME)VALUES ("计算机");
INSERT INTO major(NAME)VALUES ("网络");
INSERT INTO major(NAME)VALUES ("数学");
INSERT INTO major(NAME)VALUES ("人工智能");INSERT INTO stu(NAME,gender,phone,birthday,majorid)VALUES("张三","男","15691342128","1999-01-01",1);
INSERT INTO stu(NAME,gender,phone,birthday,majorid)VALUES("李四","女","15691222128","1998-01-31",1);
INSERT INTO stu(NAME,gender,phone,birthday,majorid)VALUES("王麻子","男","15691234456","2000-01-01",2);
INSERT INTO stu(NAME,gender,phone,birthday,majorid)VALUES("张六六","男","17999342128","1997-11-01",3);
INSERT INTO stu(NAME,gender,phone,birthday,majorid)VALUES("赵果果","男","15691347778","1999-01-01",4);
ALTER TABLE stu ADD CONSTRAINT fk_stu_major_majorid FOREIGN KEY (majorid) REFERENCES major(id);

屏幕截图 2023-12-22 172346

与下表关联

image-20231222172922017

  • 主键: 不能为空 唯一 检查

  • 外键 : 在一个表中的外键是用来与另一个表的主键关联的

  • 外键有两种情况

    1. 不加外键约束

      可以任意的对表数据进行操作,即使两个表中的数据对应不上也没有问题

    2. 添加约束

      表已经创建后的约束

      alter table [表名1] add constraint fk_[表名1]_[表名2]_[对应列] foreign key ([对应列]) reference [表名2(表名2的主键)]

      约束名规则:FK_ForeignTable_PrimaryTable_On_ForeignColumn

      ALTER TABLE stu ADD CONSTRAINT fk_stu_major_majorid FOREIGN KEY (majorid) REFERENCES major(id);
      

      image-20231222184536558

      创建表的时候添加约束

      create table student(
      id int not null auto_increment primary key,
      num int,
      name varchar(10)
      majorid int,
      -- 约束
      CONSTRAINT 约束名 foreign key(majorid ) references major(id)
      )
      

      添加约束后,不能更改主表的值使另一个表的主键孤立,也不可以添加另一个不存在的主键

    创建学生课程与专业的关系,建立 课程 与专业的关系

    CREATE TABLE course(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20)
    )-- 添加一个学生选课表  学生和课程关系表
    -- 课程信息表  多对多关系
    CREATE TABLE student_course(number INT,courseid INT)
    -- 建立 stu 与课程 course的关系
    ALTER TABLE student_course ADD CONSTRAINT fk_stu_course_number FOREIGN KEY (number) REFERENCES stu(id);
    -- 建立 课程 与专业的关系
    ALTER TABLE student_course ADD CONSTRAINT fk_stu_major_courseid FOREIGN KEY (courseid) REFERENCES course(id);

    image-20231222195003903

    course:

image-20231222195031830

major:

image-20231222195046482

image-20231222195102071

多表关联查询

关联查询,多表关联到一起查询

eg:

-- 关联查询  多表关联一起查询
-- 学号 姓名 性别 电话 专业名称  -----信息来源于两行表中
SELECT * FROM stu,major

image-20231222195619960

image-20231222195632782

但是你会发现每个名字出现多次,这是因为关联时,没有任何限制,会产生笛卡尔乘积现象,这是我们不想要的效果

  • 笛卡尔现象 表一 m行 表二 n行 查询结果 = m*n行

  • 发生原因:没有有效的连接条件

  • 解决办法:添加有效的连接条件

  • 连接按照功能分类:

    • 内连接
    • 外连接
      • 左外连接
      • 右外练级

子查询

DQL基础查询中子查询的语法规则如下:

  1. 从子查询(表子查询)
SELECT column1,column2,... 
FROM 
(SELECT column1,column2,... FROM table_name...) AS alias_name`

例如:

SELECT name,age FROM (SELECT name,age FROM users) AS u
  1. WHERE子查询(标量子查询和列子查询)

(1) 标量子查询

语法:
SELECT column1,column2,...
FROM [table_name]
WHERE column1 = (SELECT column FROM table_name WHERE...)

例如:

SELECT name,age FROM users WHERE id = (SELECT id FROM users WHERE name='John')

(2) 列子查询

语法:
SELECT column1,column2,... 
FROM [table_name] 
WHERE column1 IN (SELECT column FROM table_name WHERE...)`

例如:

SELECT name,age FROM users WHERE id IN (SELECT id FROM orders WHERE status='completed')

  1. HAVING子查询

与WHERE子查询类似,但放在HAVING后用于过滤分组后的结果。

语法:
SELECT column1, aggregate_function(column2) 
FROM [table_name]
GROUP BY column1 
HAVING aggregate_function(column2)
operator (SELECT column FROM table_name WHERE...)`

以上就是DQL中子查询的基本语法规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 Spring 上下文(Context)层次结构

前言 在使用 Spring 框架进行应用程序开发时&#xff0c;Spring 上下文&#xff08;Context&#xff09;是一个非常重要的概念。Spring 上下文提供了一个环境&#xff0c;用于管理应用程序中的对象&#xff08;通常称为 Bean&#xff09;及其之间的依赖关系。在复杂的应用程序…

数据仓库与数据挖掘实验练习6-7(实验四2024.5.22)

tips&#xff1a; 列出虚拟环境&#xff1a;conda env list 激活虚拟环境&#xff1a;activate hi 进入jupyter-lab&#xff1a;jupyter lab 练习6 1. 处理字符串空格 发现问题: 使用 values 属性查看数据时&#xff0c;如果发现 Name 列没有对齐&#xff0c;很可能是 Name 左…

spring模块(三)Spring AOP(2)使用

一、demo 1、spring项目 &#xff08;1&#xff09;pom <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency>&l…

0元入驻抖音小店,真的是好事吗?

大家好&#xff0c;我是喷火龙。 抖音小店去年推出0元入驻抖音小店个人店的政策&#xff0c;简而言之就是只要一张身份证就可以开店&#xff0c;不需要营业执照&#xff0c;也不需要交保证金。 很多人一听很心动&#xff0c;因为没有任何成本就可以开店&#xff0c;于是纷纷跑…

重新思考:Netflix 的边缘负载均衡

声明 本文是对Netflix 博客的翻译 前言 ​ 在先前关于Zuul 2开源的文章中&#xff0c;我们简要概述了近期在负载均衡方面的一些工作。在这篇文章中&#xff0c;我们将更详细地介绍这项工作的原因、方法和结果。 ​ 因此&#xff0c;我们开始从Zuul和其他团队那里学习&#…

Mac上如何安装低版本chrome浏览器

背景 为了排查项目上使用chrome低版本的兼容性问题&#xff0c;需要在本机【mac系统】上安装一个低版本的chrome浏览器。 不同版本的chrome下载地址 https://www.slimjet.com/chrome/google-chrome-old-version.php 下载后要记得你下载的旧版本的版本号&#xff0c;后面修改…

ICML 2024 | 北大、字节提出新型双层位置编码方案,有效改善长度外推效果

在这项工作中&#xff0c;我们利用语言序列的内在分段特性&#xff0c;设计了一种新的位置编码方法来达到更好的长度外推效果&#xff0c;称为双层位置编码&#xff08;BiPE&#xff09;。对于每个位置&#xff0c;我们的 BiPE 融合了段内编码和段间编码。段内编码通过绝对位置…

如何恢复未保存/误删除的Excel文档?

想象一下&#xff0c;您已经在一个非常重要的 Excel 上工作了几个小时&#xff0c;而您的计算机卡住了&#xff0c;您必须重新启动计算机。Excel 文件未保存/误删除&#xff0c;您只是因为忘记点击保存按钮而损失了数小时的工作时间。但是&#xff0c;当您意识到一小时前在 Exc…

【Linux】如何优雅的检查Linux上的用户登录、关机和重启日志

在诸如Ubuntu、Debian、Linux Mint、Fedora和Red Hat等广受欢迎的Linux发行版中&#xff0c;系统会忠实记录用户的登录、关机、重启以及运行时长信息。这些信息对管理员调查事件、排查故障或汇总用户活动报告极为宝贵。 Linux系统及应用程序日志通常保存在/var/log/目录下&…

Docker CIG使用

Docker CIG是什么 CIG为&#xff1a;CAdvisor监控收集、InfluxDB存储数据、Granfana图表展示 这个组合是一个常见的监控 Docker 容器的解决方案,它包括以下三个组件: cAdvisor (Container Advisor): cAdvisor 是一个开源的容器资源监控和性能分析工具。它能够收集有关正在运行的…

【Python001】python批量下载、插入与读取Oracle中图片数据(已更新)

1.熟悉、梳理、总结数据分析实战中的python、oracle研发知识体系 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.背景说明2.环境搭建2.1 参考链接2.2 `oracle`查询测试代码3.数据请求与插入3.1 `Oracle`建表语句3.2 `Python`代码实现3.3 效果示例4.问题链…

机器学习预测-CNN数据预测示例

介绍 这段代码是一个基于 TensorFlow 和 Keras 的深度学习模型&#xff0c;用于进行数据的回归任务。让我逐步解释一下&#xff1a; 导入必要的库&#xff1a;这里导入了 NumPy 用于数值计算&#xff0c;Pandas 用于数据处理&#xff0c;Matplotlib 用于绘图&#xff0c;Tenso…

Excel查找匹配函数(VLOOKUP):功能与应用解析

文章目录 概述VLOOKUP函数语法查询并返回单列结果查找并返回多列结果MATCH函数VLOOKUPMATCH 从右向左逆向查找&#xff1a;INDEX函数INDEXMATCH 函数匹配方式查找匹配注意事项函数名称错误: #NAME?值错误&#xff1a;#VALUE!引用错误&#xff1a;#REF!找不到数据&#xff1a;#…

amis 文件上传 大文件分块上传

amis 图片/文件上传组件 receiver&#xff1a;参数配置为上传接口。 {"type": "input-image", // "type": "input-file","label": "照片","name": "url", "imageClassName": &qu…

VUE3视频播放器 videojs-player/vue

简介 官网&#xff1a; https://gitcode.com/surmon-china/videojs-player/overviewhttps://github.com/surmon-china/videojs-player?tabreadme-ov-file video-player是一个基于video.js的视频播放器组件&#xff0c;它提供了丰富的功能&#xff0c;包括视频播放、暂停、快…

JMeter学习笔记二

面试题&#xff1a; 1.做接口测试时&#xff0c;你是怎么做的数据校验(返回值验证)&#xff1f;一般你会验证哪些数据&#xff1f; 校验code 200&#xff08;说明后端接到了你的请求&#xff0c;并且给了应答&#xff09; 返回信息 sucess 2.有1w个用户名密码需要登录&#xff…

微信小程序源码-基于Java后端的网上商城系统毕业设计(附源码+演示录像+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设…

代码随想录——找树左下角的值(Leetcode513)

题目链接 层序遍历 思路&#xff1a;使用层序遍历&#xff0c;记录每一行 i 0 的元素&#xff0c;就可以找到树左下角的值 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}*…

北核论文完美复现:自适应t分布与动态边界策略改进的算术优化算法

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原始算术优化算法 改进点1&#xff1a;引入…