T-SQL语句创建表
如图1.
IDENTITY的应用
在图1创建的两个表中,SortId和CommodityId,字段"ID"中,并没有使用NOT NULL关键字,而是使用了IDENTITY关键字。使用IDENTITY关键字定义的字段又叫标识字段,一个标识字段是唯一标识表中每条记录的特殊字段,当一个新记录添加到这个表中时,这个字段就被自动赋给一个新知=值。默认情况下是按加1递增。
使用SQL语句向表中插入数据
点击新建查询,如图2.这里我多次点击的执行,所以添加了相同的数据。
插入多行数据
通过将现有表中的数据添加到已存在的表中
INSERT INTO <表名>(列名)
SELECT <列名>
FROM <源表名>
将现有表中的数据添加到新表中
SELECT <列名>
INTO <表名>
FROM <源表名>
使用SQL语句进行修改数据
修改数据语法:
UPDATE 表名 SET 列名 = 更新值
[WHERE 更新条件]
以上是更新表中Gender的全部数据,接下来分以下几种情况的更新,如图5
使用SQL语句进行删除数据
删除数据语法:
DELETE[FROM] 表名 [WHERE <删除条件>]
TRUNCATE TABLE 表名
DELETE FROM orderInfo 这里是对表中全部的数据进行删除
如图6.首次先对orderInfo这张表进行查询,有三条数据,然后执行,DELETE FROM orderInfo这条语句。
表中全部数据被删除,之后再向其表中插入数据的时候,如图7.
注意:使用DELETE进行删除数据,标识列继续增长,不会从标识种子(也就是1)开始。
TRUNCATE 注意事项:
表结构、列、约束等不被改动
不能用于有外键约束的表
标识列重新开始编号
使用SELETE语句
使用SELETE语句不但可以在数据库中精确的查找某条信息,而且还可以模糊的查找带有某项特征的多条数据,这在很大程度上方便了用户查找数据信息。SELETE语句是一个查询表达式,包括:SELECT、FROM、WHERE、GROUP BY 和 ORDER BY 子句。SELECT语句具有数据查询、统计、分组和排序的功能。
SELECT : 查询语句。例如,SELECT * 是查询表中全部属性列,也可以这样 SELECT 编号,姓名
FROM :用来指定数据源,从哪张表进行查询。
WHERE :用来指定限定范围的行的搜索条件,例如WHERE Gender=1,就是查询性别标识为1的行
信息。
比较运算符:USE 学生管理数据库
SELECT *FROM 学生表 WHERE 性别='女'////SELECT *FROM 学生表 WHERE 成绩>90
逻辑运算符:USE 学生管理数据库
SELECT *FROM 学生表 WHERE 性别='女' AND 政治面貌='团员'
范围运算符:USE 学生管理数据库
SELECT *FROM 学生表 WHERE 学号 BETWEEN 1004 AND 1045 或者
SELECT *FROM 学生表 WHERE 学号 NOT BETWEEN 1004 AND 1045
列表运算符:USE 学生管理数据库
SELECT *FROM 学生表 WHERE 学号 IN ('1004','1005','1007') 查询学号为这三个编号的
所有学生信息。
注:如果查询除去这三个学号以外的所有学生信息,用NOT IN()。
字符运算符:如果在查询数据时,只知道列名的一部分,或想统计一部分以某数据开头的数据信息,
就需要用到LIKE /NOT LIKE 。
例如:USE 学生管理数据库
SELECT *FROM 学生表 WHERE 学号 LIKE '1004' 等同于
SELECT *FROM 学生表 WHERE 学号= '1004'
注意:如果LIKE后面的匹配串中不含通配符,则可用等号“=”取代LIKE.用!=或<>(不等于)取代NOT LIKE.
USE 学生管理数据库
SELECT *FROM 学生表 WHERE 姓名 LIKE '李%'
例如:查询姓名中第二个字包含“小”的所有学生信息,语句如下
USE 学生管理数据库
SELECT *FROM 学生表 WHERE 姓名 LIKE '_小%'
语句说明在“小”前有个单字符,在“小”后有零到多个字符。
未知值:当查询数据库中的值为NULL时,可以使用包含IS NULL关键字的WHERE子句进行查询。反
之,要查询数据库中的值不为NULL时,可以使用IS NOT NULL 关键字。基本语法如下:
USE 学生管理数据库
SELECT *FROM 学生表 WHERE 班级编号 IS NULL
GROUP BY : 用来指定查询结果的分组条件,即归纳信息类型。
SELECT COUNT(*) FROM BIAOMING
例如:要在【教务管理系统】数据库的【课程信息】表中按照“班级编号”查询出每个班级选课程总数,输入如下的SELECT语句:
USE 教务管理系统
SELECT 班级编号,COUNT(课程名称) AS 选课总数
FROM 课程信息 GROUP BY 班级编号
例如:查询课程编号为1的学生的平均成绩。语句如下:
USE 教务管理系统
SELECT AVG(成绩) AS 平均成绩
FROM 成绩表
WHERE 课程编号='1'
例如:查询课程编号为1号的学生的最高成绩。语句如下:
USE 教务管理系统
SELECT MAX(成绩) AS 最高成绩
WHERE 课程编号='1'
HAVING : 用来指定组或聚合的搜索条件。通常情况下,HAVING语句与GROUP BY子句共同使用,
HAVING子句的用法类似于WHERE子句。WHERE用于限定每一行的查询条件,而
HAVING则限定分组统计值。使用HAVING可以指定分组或聚合的搜索条件。
例如:从数据库【教务管理系统】数据库的【课程信息】表中,先按照班级编号查询出每个班级选课总数,然后输出课程总数大于10的班级编号和选课总数。语句如下:
USE 教务管理系统
SELECT 班级编号,COUNT(课程名称) AS 选课总数
FROM 课程信息
GROUP BY 班级编号
HAVING COUNT(*)>10
ORDER BY : 用来指定结果集的排序方式,ASC表示结果集以升序排列,DESC表示结果集以降序排
列,默认情况下结果集以ASC升序排列。
USE 学生管理数据库
SELECT *FROM 成绩表 ORDER BY 成绩 DESC,年龄 ASC
使用DISTINCT关键字:
在数据库查询中有时需要去掉重复行以获取所需的信息。
例如:USE 学生管理数据库
SELECT 籍贯
FROM 学生表
这样查询,学生的籍贯有可能会有很多重复的信息,这样加了DISTINCT关键字,可以去掉相同的行列值。语句如下:
USE 学生管理数据库
SELECT DISTINCT 籍贯
FROM 学生表
使用TOP关键字:
在查询信息时,有时需要表中前n行的信息,就需要用到SELECT子句中TOP关键字。例如语法格式如下:
USE 学生管理数据库
SELECT DISTINCT TOP 3 籍贯
FROM 学生表
使用别名:
第一种表达方式:使用“空格”来改变结果集中列的别名
USE ZXGL_Web_DB
SELECT 编号 'Id',姓名 'Name', 年龄 'Age', 籍贯 '出生所在地'
FROM AdminLevels
第二种表达方式:使用“=”赋值运算符来改变结果集中的别名,赋值的顺序是从右向左赋值
USE ZXGL_Web_DB
SELECT 'Id'=编号, 'Name'=姓名, 'Age'=年龄, '出生所在地'=籍贯
FROM AdminLevels
第三种表达方式:使用AS关键字来改变结果集中的别名
USE ZXGL_Web_DB
SELECT ID AS 编号,LevelName AS 名称,LevelMemo,Sorts
FROM AdminLevels
如图12
计算列:
在进行数据查询时,在SELECT子句中不仅可以是属性列,而且还可以是表达式。这时可以在SELECT语句中使用计算列完成,计算列并不存在与数据表中,而是通过对某些列的数据进行计算得到结果。
SELETE操作多表数据
在实际查询应用中,用户所需要的数据并不全部都在一个表或视图中国,而是在多个表中,这时就要使用多表查询。多表查询实际上是通过各个表之间的共同的相关性来查询数据的,是数据库查询最主要的特征。多表查询首先要在这些表中建立连接。
一、JOIN连接
在进行多表操作时,最简单的连接方式就是在SELECT语句列表中引用多个表的字段,其FROM子句中用半角逗号将不同的基本表隔开。如果使用WHERE子句创建一个同等连接则能使查询结果集更加丰富,同等连接是指第一个基表中的一个或多个列值与第二个基表中对应的一个或多个列值相等的连接。通常情况下,一般使用键码列建立连接,即一个基表中的主键码与第二个基表中的外键码保持一致,可以遵循以下基本原则:
例如:在【教务管理系统】数据库中,从【学生信息】表和【成绩表】中查询出“学号”,“姓名”,“班级编号”以及“成绩”信息,两个表通过“学生信息.学号”与“成绩表.学号”条件建立连接。
USE 教务管理系统
SELECT S.学号,S.姓名,S.班级编号,C.成绩
FROM 学生信息 S,成绩表 C
WHERE S.学号=C.学号
二、内连接查询
内连接的特点:
1)、两个表存在主外键关系
2)、参与查询的两个表的地位相同无主次之分
内连接又分等值连接、非等值连接和自然连接。
1、等值连接
等值连接就是在连接条件中使用比较运算符等于号(=)来比较连接列的列值,其查询结果中列出被连接表中的所有列并且包括重复列。
例如:在【教务管理系统】数据库中,从【学生信息】表和【成绩表】中查询出“学号”,“姓名”,“班级编号”以及“成绩”信息。两个表通过“学生信息.学号”与“成绩表.学号”条件建立连接。
USE教务管理系统
SELECT 学生信息.学号,学生信息.姓名,学生信息.班级编号,成绩表.成绩
FROM 学生信息 JOIN 成绩表 ON 学生信息.学号=成绩表.学号
上述语句中,将【学生信息】表和【成绩表】通过ON关键字进行内连接,从而实现多表查询功能。
2、非等值连接
就是在连接条件中使用除了等于号之外的比较运算符的比较连接列的列值。在非等值连接中,可以使用的比较连接符有:>、<、>=、<=、<>。也可以使用范围运算符BETWEEN.
例如:在【教务管理系统】数据库中的【学生信息】表和【成绩表】中,查询出所有考试成绩在80分到100分之间的学生成绩信息,其中查询信息列包括学生“学号”,“姓名”,“年级”,“班级编号”以及考试“成绩”这些字段,并按照成绩进行降序排列。
USE 教务管理系统
SELECT S.学号,S.姓名,S.年级,S.班级编号,C.成绩
FROM 学生信息 S INNER JOIN 成绩表 C ON S.学号=C.学号
AND C.成绩 BETWEEN 80 AND 100
ORDER BY C.成绩 DESC
3、自然连接
自然连接是在连接条件中使用等于比较运算符比较连接列的列值,但它使用选择列表指出查询结果集中所包括的列,并删除连接表中的重复列。在使用自然连接查询时,它为具有相同名称的列自动进行记录匹配。
例如:在【学生信息】表和【成绩表】中创建一个自然连接查询,限定条件为两表中的学号相同,返回学生“学号”,“姓名”,“年级”,“班级编号”和“成绩”信息。
SELECT DISTINCT S.学号,S.姓名,S.年级,S.班级编号,C.成绩
FROM 学生信息 S INNER JOIN 成绩表 C
ON S.学号=C.学号
三、外连接
外连接与内连接不同。内连接消除与另一个表的任何不匹配的行。而外连接会返回FROM子句中提到的至少一个表或视图中的所有行,只要这些行符合任何搜索条件。
外连接特点:
1)、参与外连接的表有主从之分
2)、返回的是主表当中的所有数据
3)、对那些不符合连接条件的列,将被填上NULL后再返回到结果集中
外连接查询的分类:左外连接、右外连接和完全连接。
左外连接(LEFT OUTER JOIN):返回指定的左表的所有行。而从表则返回与主表相匹配的行信息,将不匹配行填上NULL后也返回到查询结果中。
右外连接(RIGHT OUTER JOIN):返回所有的匹配行并从关键字JOIN右边的表中返回所有不匹配的行。
完全连接 (FULL OUTER JOIN):返回两个表中所有匹配的行和不匹配的行。
如何来区分左表还是右表呢?
LEFT JOIN 左外连接 以 LEFT 左边的表为主表
RIGHT JOIN 右外连接 以RIGHT 右边的表为主表
不同的 SQL JOIN
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行