SQL Server基础03

SQL:Structured Query Language:结构化查询语言

T-SQL:Transact-SQL 是SQL的增强版,对功能进行了扩充:如变量说明、流程控制、功能函数

SQL的组成:
(1)DML(Data Manipulation Language )数据操作语言(重点)
插入、删除和修改数据库中的数据
insert、update、delete等
(2)DCL(Data Control Language)数据控制语言
用来控制存取许可、存取权限等
grant、revoke
(3)DQL(Data Query Language)数据查询语言(重点)
用来查询数据库中的数据
select
(4)DDL(Data Definition Language)数据定义语言
用来建立数据库、数据库对象和定义表的列

SQL中的运算符
运算符:一种符号,它是用来进行列间或者变量之间的比较和数学运算。
包括:算数运算符、赋值运算符、比较运算符、逻辑运算符等。
算数运算符:
+、-、*、/、%(取模)
赋值运算符:
= (把一个数或变量或表达式赋值给另一个变量,如Name=‘王华’)
逻辑运算符:
and:当两个布尔表达式都为true时,返回true
or:当两个布尔表达式都为false时,返回false
not:布尔表达式的值取反即true为false,false为true
比较运算符:
=:等于
>:大于
<:小于
<>:不等于
!=:不等于(非SQL-92标准)
>=:大于等于
<=:小于等于

插入数据行语法:
insert [into] 表名[(列名)]values(值列表)
注:[]部分可以省略

示例1:
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX)
VALUES (‘张青裁’)

注意事项1:
每次插入一行数据,不能只插入半行或者几列数据;
插入的数据是否有效将按照整行的完整性的要求来检验

示例2:
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSex)
VALUES (‘张青裁’,‘上海松江’,ZQC,‘[email protected]’, ‘ZG’)

//SGrade列为float型,SSex为bit型

注意事项2:
每个数据值的数据类型、精度和小数位数必须与相应的列匹配

示例3:
INSERT INTO Students (SCode,SName,SAddress,SGrade,SEmail,SSEX)
VALUES (32,‘张青裁’,‘上海松江’,6,‘[email protected]’,0)

//SCode列为标识列

注意事项3:
不能为标识列指定值

示例4:
INSERT INTO Students (SAddress,SGrade,SEmail,SSEX)
VALUES (‘上海松江’,6, ,0)

注意事项4:
如果在设计表的时候就指定了某列不允许为空,则必须插入数据

示例5:
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX)
VALUES (‘张青裁’,‘上海松江’,6,‘ZQC’,0)

//SEmail列设置了检查约束:必须要有@符号

注意事项5:
插入的数据项,要求符合检查约束的要求

示例6:
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX)
VALUES (‘张青裁’,DEFAULT,6,‘[email protected]’,0)
注意事项6:
具有默认值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值

插入数据时注意:
1.当插入表中全部列数据时,表名后可省略列名,值列表的列数和顺序与表定义中一致。
2.列名必须和值列表一一对应,列数、顺序、数据类型必须一致。
3.标识列不能插入数据,非空列必须有对应值,插入数据时注意检查约束的限制

======================================================================================
插入多行数据
方法1:通过INSERT SELECT语句将现有表中的数据添加到已存在的表中
语法:
INSERT INTO <新的表名>(列名)
SELECT <列名>
FROM <旧的表名>
示例:
INSERT INTO AddressList (name,address,email)
SELECT SName,SAddress,SEmail --旧表的列名
FROM Students

注意:AddressList表必须预先创建,并具有姓名,地址和电子邮件三列

方法2:通过SELECT INTO语句将现有表中的数据添加到新表中
语法:
SELECT <列名> --旧表的列名
INTO <新的表名>
FROM <旧的表名>
示例:
SELECT Students.SName,Students.SAddress,Students.SEmail
INTO AddressList
FROM Students
注意:AddressList无需预先创建,该语句只能执行一次

方法3:通过UNION关键字合并数据进行插入
语法:
INSERT INTO <表名>(列名)
SELECT <列值> UNION
SELECT <列值> UNION
……
示例:
INSERT INTO StuInfo(id,name,address)
SELECT 1,‘张三’,‘湖南长沙’ UNION
SELECT 2,‘王五’,‘湖南株洲’ UNION
SELECT 3,‘李四’,‘北京’ UNION
SELECT 4,‘赵六’,‘上海’

注意:使用UNION插入数据时实际插入顺序和SQL语句中的顺序可能不一致,而且有一些限制,例如不能使用default等,因此,这种插入数据的方式不常用。

使用UPDATE更新数据行
语法:
UPDATE 表名 SET 列名 = 更新值
[WHERE 更新条件]
示例1:UPDATE Students SET SSEX = 0
示例2:UPDATE Students SET SAddress =‘北京女子职业技术学校家政班’
WHERE SAddress = ‘北京女子职业技术学校刺绣班’
示例3:UPDATE Scores SET Scores = Scores + 5
WHERE Scores <= 95
示例4:UPDATE StuInfo SET stuName=‘张婷’,stuAddress=‘湖南湘潭’
where stuNo=4
注意:
1、更新多列数据使用逗号隔开
2、勿忘条件限制,以防有效数据的丢失

使用DELETE删除数据行
语法:
DELETE [FROM] 表名 [WHERE <删除条件>]

示例1:DELETE FROM Students WHERE SCode=23
示例2:DELETE Students WHERE SName=‘赵可以’

注意:Delete语句是对整行进行操作,因此没有列名
如子表中有关联数据,应先删除子表相关数据再删除主表数据

使用TRUNCATE删除数据行
语法:TRUNCATE TABLE 表名
示例:TRUNCATE TABLE Students //功能类似于DELETE FROM Students

注:
1.表结构、列、约束等不被改动
2.不能用于有外键约束引用的表,即不能删除主表
3.标识列重新开始编号
4.实际工作中应尽量少用TRUNCATE TABLE,因为它删除的数据不能恢复

数据的导入和导出:
将数据“导出”到Excel文件或者从Excel文件“导入”数据:
在“导出数据”时选择的目标数据源和在“导入数据”时选择的源数据源都为“Microsoft Excel”。

你可能感兴趣的:(数据库,sql)