初学者使用sql时易犯的错误(持续更新)

2024-06-10 05:12

本文主要是介绍初学者使用sql时易犯的错误(持续更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DDL(数据定义)

DROP 子句 用于删除指定的列名,
若选择RESTRICT ,则删除的基本表不能被其他表的约
束所引用(如 CHECK FOREIGN KEY 等约束),不
能有视图,不能有触发器,不能有存储过程或函数等。
如果存在这些依赖该表的对象,则此表不能被删除。
若选择 CASCADE ,则该表的删除没有限制条件。在删
除基本表的同时,相关的依赖对象,例如视图等都将被
一起删除。
一般在缺省情况下默认为 RESTRICT 与具体实现有关

DML(数据操作)

DQL(数据查询)

一。注意 DISTINCT 短语的作用范围是所有目标列
错误的写法
SELECT DISTINCT Cno DISTINCT Grade
FROM SC;
正确的写法
SELECT DISTINCT Cno Grade
FROM SC;

二。空值查询:“ IS NULL 不能用 “ = NULL 代替
三。使用 GROUP BY 子句分组查询
细化聚集函数的作用对象
未对查询结果分组,聚集函数将作用于整个查询结果
对查询结果分组后,聚集函数将分别作用于每个组
分组方法
按指定的一列或多列值分组, 值相等的为一组
使用 GROUP BY 子句后, SELECT 子句的列名列
表中只能出现分组属性和聚集函数
GROUP BY 子句的作用对象是查询的中间结果表
【例】求各个课程号及相应的选课人数。
SELECT Cno COUNT(*) -- COUNT(Sno)
FROM SC
GROUP BY Cno
【例】查询选修了 3 门以上课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >3
查询有 3 门以上课程是 90 分以上的学生的学
号及( 90 分以上的)课程数
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>=90
GROUP BY Sno
HAVING COUNT(*)>=3;
四。
  • WHERE 子句允许你指定过滤条件,这些条件基于表中的单个行。你不能在 WHERE 子句中使用聚合函数(如 SUM()AVG()COUNT(), 等)来过滤分组。
  • GROUP BY 子句通常与聚合函数一起使用,以计算每个组的汇总值。你不能在 GROUP BY 子句中指定单个行的条件,但可以在 HAVING 子句中这样做,HAVING 子句允许你基于聚合函数的结果来过滤分组。

五。连接查询

连接条件中各 连接字段 的类型必须是 可比的 ,但不必是
相同的

六。嵌套查询

子查询的限制
不能使用 ORDER BY 子句
嵌套查询的分类与求解方法
不相关子查询
子查询的查询条件不依赖于父查询
由里向外逐层处理。每个子查询在上一级查询处理之前
求解,子查询的结果用于建立其父查询的查找条件。
相关子查询
子查询的查询条件依赖于父查询
先取外层查询中表的第一个元组,根据它与内层查询相
关的属性值处理内层查询,若 WHERE 子句返回值为真,
则取此元组放入结果表;然后再取外层表的下一个元组;
重复这一过程,直至外层表全部检查完为止
【例】找出每个学生所选修课程成绩超过该门课
程平均成绩的课程号。
SELECT Sno, Cno /* 外层查询 / 父查询 */
FROM SC x
WHERE Grade >=(SELECT AVG(Grade)
FROM SC y
WHERE y.Cno=x.Cno);
/* 内层查询 / 子查询 */
子查询不能在比较符之前
错误 的例子
SELECT Sno, Sname, Sdept
FROM Student
WHERE ( SELECT Sdept
FROM Student
WHERE Sname= ‘ 刘晨 ’ )
= Sdept

约束

索引

在一个基本表上最多只能建立一个聚集索引
聚集索引可以包含多个列(组合索引)
聚集索引的适用范围
很少对基表进行增删操作
很少对其中的变长列进行修改操作

这篇关于初学者使用sql时易犯的错误(持续更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047302

相关文章

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线