SQL(结构化查询语言)是一种设计用于检索和 *** 作数据的数据库。它是美国国家标准协会(ANSI)的标准。此语言用于执行选择,更新,删除和插入等数据任务。
表是在具有列和行的模型中设计的数据集合。在表中,指定了列数,称为字段,但未定义行数,称为记录。
数据库是有序形式的一组信息,用于访问,存储和检索数据。
DBMS是一个控制数据维护和使用的程序。它被认为是管理数据的文件管理器。有四种类型的DBMS:
最有用的DBMS是Relational DBMS。它为数据提供了一个关系运算符。
SQL命令分为以下类型:
它包含来自一个或多个表的行和列,可以定义为虚拟表。它消耗的内存较少。
句法:
Join用于从相关的行和列中检索数据。它在两个或多个表之间工作,并且它从两个表返回至少一个匹配。
连接类型是:
数据库查询是数据库表中的数据请求。查询可以是选择查询或任何其他类型的查询。
子查询是查询的一部分。外部查询已知主查询,内部查询识别子查询。始终首先执行子查询,并将结果传递给主查询。
Autoincrement是一个关键字,用于在表中插入新记录时生成数字。
它可用于设置表中数据类型的限制。在创建或更新表语句时,可以使用约束。一些限制是:
SQL中有不同类型的键:
规范化是一种设计技术,它以减少数据依赖性的方式排列表。它将表分成小模块并按关系链接。
非规范化是一种优化方法,我们将多余的数据增加到表中,并在规范化后应用。
存储过程是一组SQL语句,用作访问数据库的函数。为了减少网络流量并提高性能,我们使用存储过程。
句法:
索引用于加速查询的性能。它可以更快地从表中检索数据。可以在一组列上创建索引。
聚簇索引 - 它有助于轻松检索数据,并且只有一个聚簇索引与一个表一起分配。它会更改记录在数据库中的保存方式。
非聚集索引 - 与聚簇索引相比,非聚簇索引很慢。并且在非集群索引的情况下,该表可以具有多个索引。它为表创建一个对象,该表是搜索后指向表的一个点。
触发器 被 用来执行对表中的特定动作,诸如插入,更新或删除 。它是一种 存储过程 。动作和事件是触发器的主要组成部分。执行Action时,事件响应该 *** 作而出现。
通常,这些属性称为ACID。它们有助于数据库事务。
A tomicity -在一个事务中连接两个或更多个单独的数据块,或者所有的块都致力于,或者一个都不。
C onsistency - 事务或者生成新的有效数据状态,或者如果发生任何失望,则在事务启动之前将所有数据返回到其状态。
I solation - 正在进行且尚未提交的事务必须继续与任何其他 *** 作隔离。
D urability -在此 *** 作中,系统保存提交的数据,每当事件发生故障和系统启动后,所有的数据是可用的正确的位置。
SQL语句分为几类:
它被定义为通过为查询提供条件来设置结果集的限制。他们从整个记录中过滤掉一些行。
一些SQL CLAUSES是WHERE和HAVING。
它是一个返回单个值的数学函数。
SQL中的聚合函数是:
为了 *** 作字符串,我们使用String Function。其中一些是:
排序规则 是一 组规则,用于确定数据如何通过比较进行排序 。例如使用一组规则存储的字符数据,这些规则定义了正确字符的序列以及类型,重音和区分大小写。
在系统内存中执行SQL语句时,会创建一个临时工作区,称为Cursor。在select语句中,游标存储了信息。游标可以使用多行,但一次只能处理一行。这组行称为活动集。
游标有两种类型:
SQL服务器是Microsoft关系数据库管理系统(RDBMS)的一种类型或示例。它在IT氛围中提供广泛的事务处理和商业智能。
运算符是一个保留字,主要用于SQL语句的WHERE子句中以进行 *** 作。
空值是没有值的字段。它与Zero不同。假设有一个表,并且在表中有一个字段,可以在不添加值的情况下将记录插入字段,然后该字段将以NULL值保存。
空白是我们提供的价值。
零只是一个数字。
数据仓库被称为来自多个信息源的中央数据中心。这些数据可用于在线处理和挖掘。
在表中,应该只有一个PRIMARY KEY,但在另一种情况下,UNIQUE KEY可以是任意数量的。
PRIMARY KEYS不允许NULL值,但UNIQUE KEY允许NULL值。
数据库,无外乎增删改查:
增:
insert into A表 values (value1,value2,value3......)向A表中新增数据
删:
delete from A表 ( where id=1) 删除A表(删除A表id=1的数据)如果删除某个测试数据,记得加where条件,否则整张表的数据都被删除,防止误 *** 作!不过,数据可以回滚找回。
truncate A表:清除表数据,数据无法回滚。
drop A表:整表结构删除,即,这张表不存在了。
改:
update A表 set name='test' where id=1 修改id为1的name值为test
查:
1:左关联和右关联的区别?
答:左关联( left join )左表为主,左表数据全部显示,右表显示关联数据,无关联显示null,右关联( right join )相反。
2:模糊查询?
select * from A表 where name like ' %a% ' (name包含a字母)
查询结果: a , a bc,b a c,bc a
select * from A表 where name like ' a% ' (name值以a字母开头)
查询结果: a , a bc
select * from A表 where name like ' %a ' (name值以a字母结尾)
查询结果: a ,bc a
3:统计:count和sum
count统计表的 记录数 ,sum统计某列数值 总和 。
select count(*) from A表
select count(1) from A表
select count(列名) from A表
区别:
count( * ): 所有记录,包括null值
count( 1 ):所有记录,包括null值
count( 列名 ):列名有值得记录, 不包括null值
执行效率:
以前是count(1)比count(*)快,但现在count(*)底层算法优化,查询更快,所以推荐count(*)
统计有效数据的记录,count(列名)
select sum(列名) from A表 计算列名数值总和。
举例:
查询A表中,姓王的用户量
select count(*) from A where name like '王%'
Plus版
1:去重distinct,查询不重复记录的数据
必须放开头
select distinct 列名 from 表名(查询所有列名数据,去掉重复数据)
举例:
表A,查询考核等级grade,有哪些值
select distinct grade from A
2:分组group by,根据某个字段分组
select 列名 from 表名 group by 列名,一般会配合聚合函数一起使用
举例:
表A中,查询考核等级grade字段,不同值各多少人
select grade,count(*) from A group by grade
3:limit,查询结果返回的数量,多用于分页查询
select * from 表名 limit i,n i代表查询结果的索引值,默认从0开始,n返回查询的结果数。
举例:
订单表A,查询第21条到30条数据
select * from A limit 20,10
可能会问为什么不能直接用id查询?因为id不准确,可能存在id不连续的情况。如果某条数据被物理删除了呢?
何为物理删除和逻辑删除?
物理 删除 ,直接将某条数据,从表中删除。
逻辑 删除,仅通过某个字段标记删除,实际表中还存在。(比如:is_delete=1代表已删除,is_delete=0未删除)
4:排序order by 列名 asc(列名值升序排列)和order by 列名 desc(列名值降序排列)
举例:
用户表A,按照用户id升序(select查询默认根据主键升序,所以升序,不加order by也可以)
select * from A order by id asc同select *from A
用户表A,按照新建时间倒序
select * from A order by create_time desc
5:in和between查询某个范围的数值
举例:
in:查询指定数值的数据
between:查询某个范围内的数据
举例:
查询表A中,id=1和id=10的数据
select * from A where id in(1,10)
查询表A中,1月份新增的数据
select * from A where create_time between '2022-01-01' and '2022-01-31 23:59:59'
已知有如下4张表:
学生表:student(学号,学生姓名,出生年月,性别)
成绩表:score(学号,课程号,成绩)
课程表:course(课程号,课程名称,教师号)
教师表:teacher(教师号,教师姓名)
准备练习数据
1)创建学生表(student)
2)创建成绩表(score)
3)创建课程表(course)
4)教师表(teacher)
1)学生表添加数据
2)成绩表添加数据
3)课程表添加数据
4)教师表添加数据
简单查询
查询姓“猴”的学生名单
查询姓名中最后一个字是“猴”字的学生名单
查询姓名中带“猴”字的学生名单
查询姓“孟”老师的个数
汇总分析
1.汇总分析
查询课程编号为“0002”的总成绩
查询选了课程的学生人数
2.分组
查询各科成绩的最高分和最低分, 以如下的形式显示:课程号,最高分,最低分
查询每门课程选修的学生数
3.分组结果的条件
查询至少选修两门课程的学生学号
查询同名同姓学生名单并统计同名人数
分析:条件:怎么算姓名相同?按姓名分组后人数大于等于2,因为同名的人数大于等于2,分析出这一点很重要
查询不及格的课程并按课程号从大到小排列
查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列
统计每门课程的学生选修人数(超过2人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序
查询两门以上不及格课程的同学的学号及其平均成绩
第2步:再加上限制条件:
1)不及格课程
2)两门以上[不及格课程]
4.查询结构排序,分组的指定条件
查询学生的总成绩并进行排名
查询平均成绩大于60分的学生的学号和平均成绩
复杂查询
查询课程成绩小于60分学生的学号、姓名
【知识点】子查询
1.翻译成大白话
1)查询结果:学生学号,姓名
2)查询条件:所有课程成绩 <60 的学生,需要从成绩表里查找,用到子查询
第1步,写子查询(所有课程成绩 <60 的学生)
第2步,查询结果:学生学号,姓名,条件是前面1步查到的学号
查询没有学全所有课的学生的学号、姓名
查询出只选修了两门课程的全部学生的学号和姓名
查找1990年出生的学生名单
查询本月过生日的学生
工作中会经常遇到这样的业务问题:
如何找到每个类别下用户最喜欢的产品是哪个?
如果找到每个类别下用户点击最多的5个商品是什么?
这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。
分组取每组最大值,按课程号分组取成绩最大值所在行的数据
分组取每组最小值,按课程号分组取成绩最小值所在行的数据
每组最大的N条记录,查询各科成绩前两名的记录
第1步,查出有哪些组
我们可以按课程号分组,查询出有哪些组,对应这个问题里就是有哪些课程号
第2步:先使用order by子句按成绩降序排序(desc),然后使用limt子句返回topN(对应这个问题返回的成绩前两名)
第3步,使用union all 将每组选出的数据合并到一起
多表查询
查询所有学生的学号、姓名、选课数、总成绩
查询平均成绩大于85的所有学生的学号、姓名和平均成绩
查询学生的选课情况:学号,姓名,课程号,课程名称
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)