第3章 SQL基础知识
3.1.认识SQL
3.1.1 SQL的标准
不知道说的是啥,一些名词也不知道读啥。
我就只记住了一点,SQL虽然有不同版本,但在各种数据库种使用,大致相同
比如:SELECT\UPDADE\DELETE\INSERT\WHERE
3.1.2 SQL的种类
SQL共分为四大种类:
(1) 数据查询语句(DQL):SELECT语句
(2) 数据操作语句(DML):INSERT\UPDATE\DELETE语句
(3) 数据定义语句(DDL):DROP\CREATE\ALTER语句
(4) 数据控制语句(DCL):GRANT\REVOKE\COMMIT\ROLLBACK语句
3.1.3 SQL的功能
一句话,SQL的主要功能是管理数据库。
通过插入、更新、删除、查询等功能语句,以单独或者组合的形式管理数据库
3.2.常量
常量也称为文字值或标量值,它是表示一个特定数据值的符号。
它的格式由它所表示的值的数据类型决定,根据数据类型不同,常量可分为数字常量、字符串常量、日期和时间常量以及符号常量。
3.2.1 数字常量
在SQL中,数字常量包括整数常量、小数常量以及浮点常量
(1) 整数常量在SQL中被写成普通的整型数字,而且全部为数字,它们不包含小数,但前面可以加上正负号,如:-3,4,0
(2) 小数常量由没有引号括起来并且包含小数点的数字字符串来表示,如:3.1415926
(3) 浮点常量使用科学记数法表示,如:0.34E-2
(4) 货币常量前缀冠以货币符号后跟数字字符串表示,如:¥238 $59.9
在使用数字常量的时候,以“-”开始表示其为负数,“+”或缺省表示其为正数。
3.2.2 字符串常量
用英文下的单引号括起来的一串文本/数字/符号,称为字符串。单引号可以嵌套使用,最外层的单引号定义了里面内容为字符串,里面的单引号就纯粹是一组单引号,如:‘Time’、‘123456’、‘它表达的是’你好’的意思!’
3.2.3 日期和时间常量
在SQL中,日期和时间常量使用特定的字符日期值来表示,并用单引号括起来,如:‘March 1,2025’,‘250301’,‘03/01/25’
3.2.4 符号常量
在SQL中,除了为用户提供数字常量、字符串常量、日期和时间常量外,还提供了一些特殊的符号常量,这些常量代表不同的常用数值,如:CURRENT_DATE(当前系统日期),CURRENT_TIME(当前系统时间)
3.3.变量
变量——
可以保存查询之后的结果,
可以在查询语句中使用变量,
也可以将变量中的值插入到数据表中,
在SQL中,变量的使用非常灵活方便,可以在任何语句中声明使用,根据其使用周期,可以分为:全局变量和局部变量
3.3.1 局部变量
由用户自定义的一个能够拥有特定数据类型的对象,其作为范围进限制在程序内部。
被引用时要在其名称前加上“@”标志,而且必须先用DECLARE命令声明后才可以使用。
如:DECLARE pearl(定义了一个名为“珍珠”的局部变量)
3.3.2 全局变量
由系统提供的内部使用的变量,无需用户自定义,其作用范围可以是任何程序中随时取用。
被引用时要在其名称前加上“@@”标志,并且只能调用,不能修改
在定义局部变量时,应注意避免与全部变量名称重复,以免程序错误
SQL Server中常用的全局变量
| 全局变量名称 | 含义 |
|---|---|
| @@connections | 返回SQL Server自上次启动以来尝试的连接数,无论连接是否成功 |
| @@cpu_busy | 返回SQL Server自上次启动后的工作时间。其结果以CPU时间增量或“滴答数”表示,此值为所有CPU时间的累积,因此可能会超出实际占用的时间。乘以@@timeticks即可转换为微秒 |
| @@cursor_rows | 返回连接上打开的上一个游标中的当前限定行的数目。为了提高性能,SQL Server可异步填充大型键集和静态游标。可调用@@cursor_rows以确定当其被调用时检索了游标符合条件的行数 |
| @@datefirst | 针对会话,返回set datefirst的当前值 |
| @@dbts | 返回当前数据库的当前timestamp数据类型的值。这一时间戳值在数据库中必须是唯一的 |
| @@error | 返回执行的上一个Transact SQL语句的错误号 |
| @@fetch_status | 返回针对连接当前打开的任何游标,发出的上一条游标Fetch语句的状态 |
| @@identity | 返回插入到表的identity列的最后一个值 |
| @@idle | 返回SQL Server自上次启动后的空闲时间。结果以CPU时间增量或“时钟周期”表示,并且是所有CPU的累积,因此该值可能超过实际经过的时间。乘以@@timeticks即可转换为微秒 |
| @@io_busy | 返回自从SQL Server最近一次启动以来,SQL Server已经用于执行输入和输出操作的时间。结果以CPU时间增量或“时钟周期”表示,并且是所有CPU的累积,因此该值可能超过实际消耗的时间。乘以@@timeticks即可转换为微秒 |
| @@langid | 返回当前使用的语言的本地语言标识符(ID) |
| @@language | 返回当前使用的语言的名称 |
| @@lock_timeout | 返回当前会话的当前锁定超时设置(毫秒) |
| @@max_connections | 返回SQL Server实例允许同时进行的最大用户连接数。返回的数值不一定是当前配置的数值 |
| @@max_precision | 按照服务器中的当前设置,返回decimal和numeric数据类型作用的精度级别,默认情况下,最大精度返回38 |
| @@nestlevel | 返回对本地服务器上执行的当前存储过程的嵌套级别(初始值为0) |
| @@options | 返回有关当前SET选项的信息 |
| @@pack_received | 返回SQL Server自上次启动后从网络读取的输入数据包数 |
| @@pack_sent | 返回SQL Server自上次启动后写入网络的输入数据包数 |
| @@packet_errors | 返回上次启动SQL Server后,在SQL Server链接上发生的网络数据包错误数 |
| @@rowcount | 返回上一次语句影响的数据行的行数 |
| @@procid | 返回SQL当前模块的对象标识符(ID)。SQL模块可以是存储过程、用户定义函数或触发器。不能在CLR模块或进程内数据访问接口中指定@@procid |
| @@servername | 返回运行SQL Server的本地服务器的名称 |
| @@servicename | 返回SQL Server正在其下运行的注册表项的名称。若当前实例为默认实例,则@@servicename返回MSSQLSERVER;若当前实例是命名实例,则该函数返回该实例名称 |
| @@spid | 返回当前用户进程的会话ID |
| @@textsize | 返回SET语句的textsize选项的当前值,它指定select语句返回的text或image数据类型的最大长度,其单位为字节 |
| @@timeticks | 返回每隔时钟周期的微秒数 |
| @@total_errors | 返回自上次启动SQL Server之后,SQL Server所遇到的磁盘写入错误数 |
| @@total_read | 返回SQL Server自上次启动后,由SQL Server读取(非缓存读取)的磁盘的数目 |
| @@total_write | 返回自上次启动SQL Server以来,SQL Server所执行的磁盘写入数 |
| @@version | 返回当前安装的日期、版本和处理器类型 |
| @@trancount | 返回当前连接的活动事务数 |
3.4.运算符
它们就是一些符号,能够执行算术,连接,赋值及比较。
在SQL Server中,运算符主要有六大类:
3.4.1 算术运算符
可以在两个数据类型的表达式上执行数学运算。SQL中的算术运算符有加“+”、减“-”、乘“*”、除“/”、余“%”五种。
| 运算符 | 作用 | 举例 |
|---|---|---|
| + | 加法运算,也可对日期和时间类型的数据执行算术运算 | 17+4=21 |
| - | 减法运算 | 17-4=13 |
| * | 乘法运算 | 17*4=68 |
| / | 除法运算,返回商 | 17/4=4 |
| % | 求余运算,返回整余数 | 17%4=1 |
3.4.2 比较运算符
可以比较两个表达式的大小,表达式可以是字符、数字或日期数据,其比较结果是布尔值。
除了text、ntext、image数据类型的表达式外,比较运算符可以用于所有表达式。
| 运算符 | 读作 | 含义 |
|---|---|---|
| = | 加法运算,也可对日期和时间类型的数据执行算术运算 | 17+4=21 |
| > | 减法运算 | 17-4=13 |
| < | 乘法运算 | 17*4=68 |
| >= | 除法运算,返回商 | 17/4=4 |
| <= | 求余运算,返回整余数 | 17%4=1 |
| ! = | 加法运算,也可对日期和时间类型的数据执行算术运算 | 17+4=21 |
| ! > | 减法运算 | 17-4=13 |
| ! < | 乘法运算 | 17*4=68 |
3.4.3 逻辑运算符
逻辑运算符可以把多个逻辑表达式连接起来测试,以获得其真实情况,返回带有true、false或unknown值的Boolean数据类型。
| 运算符 | 含义 | 结果 |
|---|---|---|
| all | 如果一组的比较都为true | true |
| and | 如果两个布尔表达式都为true | true |
| any | 如果一组的比较中,有任何一个为true | true |
| between | 如果操作数在某个范围内 | true |
| exists | 如果子查询包含一些行 | true |
| in | 如果操作数等于表达式列表中的一个 | true |
| like | 如果操作数与一种模式相匹配 | true |
| not | 对任何其他布尔运算符的值取反 | ---- |
| or | 如果两个布尔表达式中的其中一个为true | true |
| some | 如果在一组表达式中,有些为true | true |
3.4.4 连接运算符
加号(+)是字符串串联运算符,可以将两个或以上的字符串合并成一个字符串。
3.4.5 按位运算符
在两个表达式之间执行位操作
| 运算符 | 含义 |
|---|---|
| & | 位与 |
| | | 位或 |
| ^ | 位异或 |
| ~ | 返回数字的非 |
3.4.6 运算符的优先级
| 级别 | 运算符 |
|---|---|
| 1 | ~(位非) |
| 2 | *(乘)、/(除)、%(余) |
| 3 | +(正)、-(负)、+(加)、-(减)、+(连接)、&(位与)、 |
| 4 | =、>、<、>=、<=、<>、!=、!>、!< |
| 5 | not |
| 6 | and |
| 7 | all、any、between、in、like、or、some |
| 8 | =(赋值) |
3.5.通配符与注释符
通配符一般与like运算符一起使用,实现模糊查询。
注释符是对代码给出解释或者说明。
3.5.1 通配符
查询时,有时无法给出一个明确的查询条件,可以使用通配符来代替一个或多个字符。
| 通配符 | 说明 |
|---|---|
| % | 匹配任意长度的字符,甚至包括零字符 |
| _ | 匹配任意单个字符 |
| [字符合集] | 匹配字符合集中的任何一个字符 |
| [^] 或 [!] | 匹配不在括号中的任何字符 |
3.5.2 注释符
为执行语句标注上注释符,则该代码就不会参与程序的编译。
通常用于针对代码的说明性文字或对程序的调试。
3.5.2.1 单行注释
以两个连续的“–"短横线开始,作用于该行结束,如
create database demo --创建一个名为“demo”的数据库(针对代码的说明性文字)
create table Department
(
DepartmentID int primary key identity(1,1),
DepartmentName varchar(50) not null,
--DepartmentRemark char(500) (屏蔽程序执行该行)
)
3.5.2.2 多行注释
以“/*”开始,并以“*/”结束,中间被包含的代码全部被程序屏蔽
create database demo
create table Department
(
/*DepartmentID int primary key identity(1,1),
DepartmentName varchar(50) not null,*/
DepartmentRemark char(500)
)
第4章 SQL语句的应用
4.1.数据定义语句
DDL负责数据结构定义与数据库对象定义,由create、alter、drop、rename四个语句组成。
4.1.1 创建数据库–create
create语句主要用于数据库对象的创建,凡是数据库、数据表、索引、函数、触发器等对象,都可以使用create语句来创建
如:创建一个名为demo的数据库
create database demo
又如:创建一张数据表,包括表的行和列,具体语法格式如下:
create table table_Name
(
column_Name1 data_type(size),
column_Name2 data_type(size),
column_Name3 data_type(size)
)
• column_Name:列名
• data_type:规定该列的数据类型(字符型、整数型、日期型等)
• (size):设定该列的最大长度
创建一个名为persons的表,包含ID\Name\Address\City四列。SQL语句如下:
create table persons --创建新表,表名persons
(
ID int, --列名ID,整数类型
Name varchar(20), --列名Name,字符型,最长20个字符
Address varchar(200), --列名Address,字符型,最长200个字符
City varchar (20) --列名City,字符型,最长20个字符
)
除数据库与数据表外,在数据库中,还可以使用create语句创建其他对象
create index–创建数据表索引
create procedure–创建预存程序
create function–创建用户函数
create view–创建视图
create tringger–创建触发器
4.1.2 修改数据库–alter
alter语句主要用于修改数据库中的对象,相对于create语句来说,该语句不需要定义完整的数据对象参数,还可以依照要修改的幅度来决定使用的参数
如:需要在表中添加字段列,语法如下
alter table persons
add Birthday date --向表persons里添加birthday字段,类型为日期类型
drop City --删除persons表中的City字段
alter column Birthday year --更改persons表中,birthday字段类型为year
add age int not null --向persons表里添加age字段,类型为整型,并且不允许为空
4.1.3 删除数据库–drop
通过drop语句,可以轻松地删除数据库中的索引、表、数据库,语法如下:
drop index index_name --删除名为index_name的索引
drop table table_name --删除名为table_name的表
drop database database_name --删除名为database_name的数据库

被折叠的 条评论
为什么被折叠?



