系统学习SQL1:误入SQL Server

2024-01-19 08:38

本文主要是介绍系统学习SQL1:误入SQL Server,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 误入SQL Server
        • 4.3 列的计算、及别名查询
        • 4.3 连接列值,串联多列为1列-解锁假姿势!
        • MySQL串联测试-不能用加号,要用concat()
        • 堆信息
    • 总结
        • 收获
        • 参考
        • 反思


误入SQL Server

  参考《SQL结构化查询语言速查宝典 第2版》,数据库软件是SQL Server。
从第2篇SQL数据查询和处理篇、第4章SQL数据查询开始学习 。

  粗想一下,使用串联的方式可以直接读取一行数据,某种程度上更加方便。

  4.1 SQL数据查询功能使用select语句完成,并以表格的形式返回查询结果。
SQL语法结构:

	select [all| distinct] select_list		(查询n个列)from table_list/view_list				(从n个表或视图中)[where conditions]						(检索条件,限制行)[group by group_list]					(对查询结果进行分组)[having conditions]						(组的限制条件,限制组)[order by order_list]						(对查询结果进行排序)

  4.2 投影查询:指查询特定的列。简单说明:

	查询单列,select id from users。查询多列,select id,username from users。查询所有列,select * from users。消除重复列,select distinct username from users
4.3 列的计算、及别名查询

  列的计算:数据库表的各列之间不存在函数依赖,为了方便查询,可以使用运算符。
  现实问题:表里存储的是员工工资,而我们想要通过工资计算奖金,就可以使用运算符,比如select salary*0.08 from employee,这种字段成为虚拟字段
(运算符:加减乘除、大于小于等于)。
  衍生问题1-列标题:查询表里已有的字段,视图会返回列名及其列值,但上面这种列的计算没有列标题。开发者设计了别名查询,比如select salary*0.08 as bonus from employee
  衍生问题2-列精度:函数column_name decimal(P,D),P表示有效数字数的精度,重点是D表示小数点后的位数。需要搭配显示类型转换函数(cast('9.5' as decimal(10,0)))
比如select (cast(salari*0.08 as decimal(18,2))) as bonus from employee

  select的条件查询,除了where子句、having子句,还有select关键字后的case子句。
比如case when xx>90 then '优秀' when xx>80 and xx<=90 then '良' end from grade
完整的查询语句是,select score,estimate=case score=xx then xx end from grade

4.3 连接列值,串联多列为1列-解锁假姿势!

  解锁新姿势!select不需要逗号,就可以查询多列。在Union查询中可能会用到。
  现实问题:用户查看抽象的、没有说明的查询结果不方便。
  设计方法-串联:可以把不同的列值连接起来,并加上说明性文字,即合并成单列。如
select username +'的工资是:'+cast(salary as varchar(10)) as 工资说明 from employee
(对数值型字段,需要使用cast()转换成字符串型,才能与字符串连接)

MySQL串联测试-不能用加号,要用concat()

  MySQL中不能使用+号连接字符串,但MySQL有2-3类型转换函数。
concat(id,str2)连接字符串,可以把int转换成char。(如果算进类型转换函数)
主流是这两种:cast(x as x)。以及convert(xx,xx),具体查看参考文章。

	varchar()函数会报错,使用char()不会报错。
select cast(id as char(10))+username+ as chuanlian from users;
串联失败,只返回id列的值。原因:在MySQL中+号有且只有一个功能,运算符。即只能作加法,不能连接字符串。
int+字符串,系统会尝试把字符串转换成int,本地测试发现转换的结果是0。
堆信息

  关于嵌套查询,又称为子查询,需要对虚拟表进行命名。
否则会报错ERROR 1248 (42000): Every derived table must have its own alias,即每一个派生出来的表都必须有它自己的别名。

  比赛中比较小众,但实战中可能会出现的:
like注入,基于关键词模糊查询。还有order by 注入。

  4.9 排序查询:语句order by 关键字/第几列
问题:为何order by可以用第几列,select不能用第几列?
解答:因为select 数字的查询结果就是数字本身,比如select 1的结果就是1。


总结

收获

  关键词总结:投影查询、虚拟字段的别名查询、列的串联。
2-3个类型转换函数、+号的功能。

参考

  主要参考《SQL结构化查询语言速查宝典 第2版》,数据库软件是SQL Server。

  《MYSQL学习:基础查询:去重,+号用法,连接字符串》,2021-01
https://www.icode9.com/content-2-815083.html

  《MySQL数字类型转换函数(concat/cast)1、将Int转为varchar经常用concat》, 2016
https://blog.csdn.net/u011334621/article/details/53011359

  《Every derived table must have its own alias(sql语句错误解决方法)》,2018-10
https://blog.csdn.net/qq_32863631/article/details/83024322

反思

  目前贴合实际的,应该是看MySQL方面的书籍,而不是SQL Server。
但是这本书写得很好,让人有一种继续读下去的冲动,如果找不到合适的MySQL书籍,
可以学习这本书来了解SQL的相关概念和应用场景。

这篇关于系统学习SQL1:误入SQL Server的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是