读《SQL基础教程 第二版》的一些总结

1. 数据库语言

DDL: Data Definition Language,数据定义语言(库、表的操作)

DML: Data Manipulation Language, 数据操控语言(对表中数据的增删改)

DQL: Data Query Language,数据库查询语言(对表中数据的查询)

DCL: Data Control Language,数据控制语言(事务、权限)

2. 除以怎么得到小数

-- 1. 默认(会自动填充0)
select 10 * 1. / 4 --2.500000
-- 2. cast 可以保留指定位数
select CAST(10 * 1. / 4 as decimal(8, 2))
-- 3. convert(), 同cast只是写法不同
select CONVERT(decimal(8, 2), 10 * 1. / 4)

3. SQL 的三值逻辑 (true 、false 、unknown)

对于 and ,优先级: false > unknown > true
对于 or ,优先级: true > unknown > false

4. <> 和 <=>

<> 等同于 !=,无法判断 NULL

<=> 可以判断 NULL 和 正常值 (Sqlserver 不支持,MySQL支持) 

5. 事务

5.1 使用举例

create table re_test
(
	questionDesc nvarchar(100)
)
create table re_statistics
(
	countNum int
)
create table re_person(
	name nvarchar(20)
)
select * from re_test
select * from re_statistics
select * from re_person

--SET XACT_ABORT OFF 默认,出现错误的语句回滚,正确的依然提交
--SET XACT_ABORT ON  出现错误全部回滚
begin transaction
insert into re_test values('123');
insert into re_statistics values(1 / 0);--模拟错误
insert into re_person values('213');
if @@ERROR!=0
   rollback transaction
commit transaction;

5.2  事务的工作模式

转载自前辈的文章【入门】数据库事务及串行化理论梳理 - 知乎 (zhihu.com)

  • 隐式事务(Implicit Transaction),又叫自动提交事务(Autocommit Transaction),默认一条语句就是一个事务,自动开始和提交事务,一般通过autocommit参数设置开启或关闭
  • 显式事务(Explicit Transaction),人为地开启和结束事务,一些SQL指令可用你于定义事务的生命周期,如开启事务用BEGIN或START TRANSACTION,提交事务用END或COMMIT,中止或回滚事务用ABORT或ROLLBACK[2] 等

6. 视图 

转载来自前辈

moxigandashu的文章数据库视图的创建及使用_数据库创建视图-CSDN博客(基于MySQL)

操作指令代码
创建视图CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
使用视图当成表使用就好
修改视图CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
查看数据库已有视图>SHOW TABLES [like...];(可以使用模糊查找)
查看视图详情DESC 视图名或者SHOW FIELDS FROM 视图名
视图条件限制[WITH CHECK OPTION]

7. 常见函数

函数作用
Lower(s)小写
Upper(s)大写
Replace(s, appoint_str, target_str)将字符串的appiont_str替换成target_str(全局替换)
SubString(s, index, count)截取(index从1开始!!)
cast(XXX as [type])转换
datePart( [param], [DateTime数据])获取日期指定部分(param可以是Day / dd、Month / MM...)
dateName( [param], [DateTime数据])和datePart差不多
format(XXX, 'dd')和上面两个相比会补0(比如上面两个输出2, 它输出02)
coalesce(n1, n2, n3...)返回第一个不为NULL的值,常用于处理NULL
isnull( [字段] , [值])如果该字段为指定,则返回指定的值,和 coalsece 差不多
nullif ([字段], [值])如果字段的值为指定值,则返回 NULL

关于更多时间处理的细节,SQL Server 截取时间的sql语句_where convert-CSDN博客

8. 关于 In、Not In 的陷阱

判断不了NULL,打个比方

9. 集合 

intersect 交集、except 、union、union all

10. 窗口函数

10.1 作用

窗口函数可以像聚合函数一样对一组数据进行分析,并且每条数据都可以对应一个结果。

10.2 语法

--语法
select [窗口函数] over(partition by [字段] order by [字段] [窗口大小])
from [表名]

--[窗口大小]
-- 一. ROWS
--1. ROWS n preceding 以当前行为基准的前n行(当前行不计算在内的的前n行)
--2. ROWS n following 以当前行为基准的后n行(当前行不计算在内的的后n行)
--3. ROWS between n preceding and m following

-- 二. RANGE
--RANGE 只支持使用 UNBOUNDED 和 CURRENT ROW 窗口框架分隔符
--UNBOUNDED PRECEDING 到最前面
--UNBOUNDED FOLLOWING 到最后面
--CURRENT ROW 到当前行

10.3 窗口函数

  1. row_number() 是不重复的排名
  2. rank() 是相同的为同一名(后一名则跳过)
  3. dense_rank() 是相同的为同一名(不跳过之后的名次)
  4. 聚合函数

窗口函数可以在一次查询使用多次, 力扣例题:1204. 最后一个能进入巴士的人 - 力扣(LeetCode)

更多细节参考前辈

梁萌的文章SQL窗口函数-CSDN博客 

11.  合计

11.1 语法及举例

select case grouping(deptCode) 
when 1 then '合计'
when 0 then deptCode end as deptCode,
case grouping(deptName)
when 1 then '合计'
when 0 then deptName end as deptName,
sum(totalCount) as countNum
from Statistics
group by [合计方式](deptCode, deptName)

-- grouping(字段) 如果是因合计导致的NULL则返回1,否则返回0

--[合计方式]
-- rollup
/*
    group by(deptCode)
    group by(deptCode, deptName) 
*/
-- cube 
-- 全部组合
/*
    group by(deptCode)
    group by(deptName)
    group by(deptCode, deptName)
*/
-- grouping sets
-- 只保留单个的group字段的合计
/*
    group by(deptCode)
    group by(deptName)
*/

12. 关于聚合函数的一些补充

12.1 关于空值

count(*) 或 count(1) 不会忽略空值,而 count(列名)会忽略空值。

avg(),sum(),max(),min() 都会忽略空值,简单来说,针对于列的都不考虑空值。

12.2 关于聚合函数内部是否可以写表达式

针对于 case when 表达式,所有聚合函数都可以使用

13. 谓词

13.1  ANY 和 ALL

ANY 相当于 多个or, ALL 相当于多个 and

14. 一些其他操作

--sqlserver
CREATE TABLE students_score(cname VARCHAR(10),cource VARCHAR(10),score INT)
INSERT INTO students_score VALUES('张三','语文',74);
INSERT INTO students_score VALUES('张三','数学',83);
INSERT INTO students_score VALUES('张三','物理',93);
INSERT INTO students_score VALUES('李四','语文',74);
INSERT INTO students_score VALUES('李四','数学',84);
INSERT INTO students_score VALUES('李四','物理',94);

--修改列名
--语法: EXEC sp_rename '表名.[原有列名]', '新列名' , 'COLUMN'
exec sp_rename 'students_score.cource', 'course', 'COLUMN'

--修改表名
--语法:EXEC sp_rename ‘原有表名’, '新表名'
exec sp_rename 'students_score', 'student' 
  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《SQL基础教程第二版PDF》是一本讲解SQL语言基础的教材,针对初学者而设计。本书以简明易懂的方式介绍了SQL的基本概念和语法,帮助者快速入门。 首先,本书首先介绍了SQL的起源和发展历史,以及SQL在关系数据库管理系统中的作用和重要性。然后,书中详细介绍了SQL语言的各种基本操作,包括创建表、插入数据、查询数据、更新数据和删除数据等。每个操作都有详细的示例和解释,者可以通过实际操作来巩固自己的理解。 此外,本书还介绍了SQL语言中的常用函数和操作符,如聚合函数、数学函数、逻辑运算符和比较运算符等。这些内容对于进行更复杂的数据操作和查询非常重要。 在教学过程中,本书还强调了数据库设计的重要性,引导者学习如何进行数据库建模和规范化。数据库设计是使用SQL语言进行数据管理的基础,通过本书的学习,者可以了解数据库设计的基本原则和技巧。 总之,《SQL基础教程第二版PDF》是一本适合初学者入门的SQL教材,通过阅本书,者可以学习到SQL语言的基本概念和操作技巧,为日后进行数据库管理和数据分析打下坚实的基础。 ### 回答2: 《SQL基础教程第二版PDF》是一本介绍SQL基础知识的教材,主要面向初学者。此教材通过清晰的语言和丰富的实例,详细介绍了SQL查询语言的各个方面。它包含了创建数据库、表格和索引的方法,以及如何进行基本的数据查询、过滤、排序和更新等操作。 该教程还介绍了SQL语言中的关键概念,如表的结构,数据类型,约束条件和外键关系等。通过学习这些基础知识,者可以了解如何有效地使用SQL语言来处理和管理大规模的数据。 此外,该教程还深入介绍了SQL语句的高级功能,如聚合函数、子查询、多表连接和视图等。这些内容将帮助者更好地理解和应用SQL语言来解决复杂的数据查询和分析问题。 《SQL基础教程第二版PDF》是一本非常实用和全面的教材,适合初学者系统地学习SQL语言。者将通过这本教材获得扎实的SQL基础知识,为进一步学习和应用数据库领域打下坚实的基础。无论是对于计算机科学专业的学生还是对于从事数据处理和分析工作的专业人士,这本教材都是一本非常有价值的参考书。 ### 回答3: 《SQL基础教程 第二版》是一本介绍关系型数据库SQL语言的教程,旨在帮助者快速入门和掌握SQL的基本知识和技能。 这本教程从数据库的基本概念开始讲解,介绍了数据库的组成以及常见的数据库管理系统。然后,详细介绍了SQL语言的基础知识,包括SQL语句的基本结构、数据查询、表的创建和修改以及数据的插入、更新和删除等操作。 在教程的后半部分,作者还介绍了SQL的高级用法,包括多表查询、子查询、数据过滤、排序和分组等功能。此外,教程还介绍了SQL的常见函数和触发器的使用方法。 在每个章节的结束,教程都提供了一些练习题和案例分析,帮助者巩固所学知识和运用到实际问题中。 相比第一版,第二版在内容上进行了更新和完善,包括新增了一些新特性和实用技巧,对一些难点进行了更加详细的解释和实例演示。此外,第二版还添加了一些具体的案例分析,帮助者更好地理解和应用SQL语言。 总的来说,《SQL基础教程 第二版》是一本适合初学者入门的SQL教材,内容简洁明了,结构清晰,难度适中。无论是想系统学习SQL语言的人,还是需要在工作中运用SQL的人,都可以从这本书中获得帮助和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值