SQL基础笔记

来源:互联网 发布:淘宝的瘦脸绷带有用吗 编辑:程序博客网 时间:2024/06/02 19:32
 好记性不如烂笔头,这句话我自认为很对,就算再好的脑子,也会有忘记知识的那天,今天,就用我自认为一个很不错的方法,那就是把自己的笔记发到论坛,这样,可以让大家得到帮助,对自己也是一种帮助

一、sql介绍
为什么使用SQL?
当数据库中出现大量的数据,并且数据库表之间的数据出现引用等状况时,或者要修改、插入、删除大量的数据时,使用SSMS将非常麻烦而不方便,并且容易出错,但是如果使用SQL语言来实现这些操作,将是非常easy的事情。
T-SQL的组成
DML(数据操作语言):用来查询、插入、删除和修改数据库中的数据,如Select、Insert、Update及Delete等。
DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如Grant、Revoke 等。
DDL(数据定义语言):用来建立数据库、数据库对象和定义其列,大部分是以Create 开头的命令,如Create Table、Create View及Drop Table 
二、select语句
1.select语法
Select select_list From table [ Where Conditions]
[ Order By order_list [ Asc | Desc ] ]
Select_list:字段列表,样式为“字段1……字段N”
Table:查询表,样式为“表1,表2…表N”
Condiitions:由表字段组成的条件表达式或逻辑表达式
Order_list:查询结果按照某字段排序的字段列表
运算符 含义 示例
= 等于 Price = 100
> 大于 Age > 15
< 小于 Grade<90
>= 大于或等于 Price>=80
<= 小于或等于 Age<=45
<> 不等于 Grade<>60
Between 在指定范围内 PRICE Between 100 And 200
通配符
'_' 一个字符 A Like 'C_'
% 任意长度的字符串 B Like 'CO_%'
[] 括号中所指定范围内的一个字符 C like '9W0[1-2]'
[^] 不在括号中所指定范围内的任意一个字符 D like '9W0[^1-2]'
逻辑运算符
操作符 说明
Not 和其他操作符一起使用,取反的操作
And 组合两个条件,并在两个条件都为 True 时取值为True
Or 组合两个条件,并在两个条件之一为 True 时取值为True
2.列的别名
①使用AS重新命名列表,即使用列名的别名
②也可以省略AS,在列名之后重新命名一个新的列名,例如本例中newsdate 新闻日期,在查询结果中直接显示别名,即新闻标题和新闻日期。
③可以使用计算、合并得到新列的命名,例如,在查询新闻表t_news,将新闻标题与新闻来源合并为形式如:“新闻标题”来源于“新闻来源”,可以执行以下查询语句:
SELECT newstitle+‘ 来源于’+newsource AS 新闻标题 FROM t_news
重新命名列名还有一种方法,就是采用“=”来命名,例如:
SELECT 新闻标题=newstitle+' 来源于'+newsource 
FROM t_news
3.查询空行
IS Null:空
IS Not Null:非空
列子:
SELECT newstitle,newscounent FROM t_news 
WHERE newsource IS NULL
4.查询返回限制的行数
一些查询需要返回限制的行数,例如在测试的时候,如果数据库中有上万条记录,而只要检查前面10行数据是否有效就可以了,没有必要查询输出全部的数据,以提高查询速度,这时候就要用到限制返回行数的查询,在T-SQL中,限制行数使用Top关键字来约束。在查询时即或以显示确定的行数,也可以按查询结果的百分比显示数据,例如top 10,即显示10行,而top 10 Percent,则显示10%。
例子:
SELECT TOP 3 newstitle AS 新闻标题 FROM t_news
SELECT TOP 20 PERCENT newstitle AS 新闻标题 FROM t_news
三、使用T-SQL插入数据
(一)语法
INSERT [INTO] <表名> [列名] VALUES <值列表>
[INTO]是可选的,可以省略
表名是必需的,表的列名是可选的,如果省略,<值列表>中顺序与数据表中字段顺序保持一致
多个列名和多个值列表用逗号分隔
在插入数据的时候,需要注意以下事项。
1、每次插入一整行数据,不可能只插入半行或者几列数据,如果违反字段的非空约束,那么插入语句会检验失败。
2、数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配。
例如在t_News_User中的Power的值为True或False,如果插入其他的字符则会显示错误,例如:
insert into t_News_User (USERNAME,USERPASSWORD,POWER) VALUES('王一男','oracle','ORA')
由于Power列插入错误的值,执行该语句后,将提示与表的约束相冲突,插入失败
3、Insert语句不能为IDENTITY标识列指定值,因为它的数字是自动增长的。
4、对于字符类型的列,当插入数据的时候,用单引号将其引起来。
5、尽管可以不指定列名,但是养成好习惯,明确指定插入的列和对应的值。
6、如果在设计表的时候指定某列不允许为空,则该列必须插入数据,否则将报告错误信息。
7、插入的数据项,要求符合检查约束的要求。
例子:
INSERT INTO t_News_User (USERNAME,USERPASSWORD,POWER) VALUES('王兰','oracle','TRUE')
(二)、一次插入多行数据
1、INSERT INTO newsMost (新闻标题,新闻日期,点击率) 
SELECT NEWSTITLE,NEWSDATE,HITS
FROM t_news
WHERE NEWSDATE >CAST('2008-06-01' as DATETIME
通过Insert Select语句将现有表中的数据添加到新表中。例如,如果创建一张新表newsMost来存储最新的新闻信息,则可以新闻表中提取相关的数据。
例子中Select语句用于查询出把新闻表中已经存在新闻标题NEWSTITLE,新闻日期NEWSDATE,点击率HITS的信息插入到新的newsMost表,避免了录入大量重复的数据项。
2、Select Into语句
SELECT NEWSTITLE,NEWSDATE,HITS INTO newsMost1
FROM t_news
与Insert Into类似,Select Into语句也是从一个表中选择一些数据插入到新表中,所不同的是,这个新表是执行查询语句的时候创建的,不能够预先存在。例如创建新表newsMost1,并把t_news表中的NEWSTITLE,NEWSDATE,HITS做为newsMost1表的新列,并且把查询到的数据全部插入到新表newsMost1中。
如果希望新表中的列名称可以自己定义,并且包含IDENTITY列,如何插入标识列?因为标识列的数据是不允许指定的,需要按如下语法创建一个新的标识列:
SELECT IDENTITY(数据类型, 标识种子, 标识增长量) AS 列名
INTO 新表 FROM 原始表
上例的语句可以修改为:
SELECT IDENTITY(int,1,1) As 新闻ID, NEWSTITLE AS 新闻标题,NEWSDATE AS 新闻日期,HITS AS 点击率
INTO newsMost2 FROM t_news
3、Union关键字
INSERT newsMost (新闻标题,新闻日期,点击率)
SELECT '两会会议','2009-03-06',100 UNION
SELECT '汽车.购车','2009-03-06',120 UNION
SELECT NEWSTITLE,NEWSDATE,HITS
FROM t_news
UNION 
SELECT 新闻标题,新闻日期,点击率
FROM newsMost2
Union语句用于将两个不同的数据或查询结果组合成一个新的结果集。不同的数据或查询结果要求数据个数、顺序、数据类型都一致,因此,当向表中重复插入多次数据的时候,可以使用Select…Union来简化操作。
例如,本例中的T-SQL语句,UNION联合了自定义数据,t_news表数据,newsMost2表数据,放到数据newsMost中。

本例向NewsMost表中插入三列数据,首先插入两行自定义数据,数据分别为:
(‘两会会议’,‘2009-03-06’,100)和(‘汽车.购车’,‘2009-03-06’,120)
然后把t_news表中和NewsMost2表中的数据查询出来然后插入到NewsMost表中
四、使用T-SQL更新数据
一、(语法)
UPDATE <表名> SET <列名 = 更新值>
WHERE <更新条件>
例子:
UPDATE t_News_User SET Power = 'False'
UPDATE t_News SET NEWSOURCE ='北大青鸟'  
WHERE NEWSOURCE is NULL

1、Set后面可以紧随多个数据列的更新值,不限一个。
2、Where子句是可选的,用来限制条件。如果不限制,则整个表的所有数据行将被更新。
五、使用T-SQL删除数据
DELETE FROM <表名> [WHERE <删除条件>]
DELETE FROM t_news WHERE NEWSOURCE LIKE '%新浪网%'
二、使用Truncate Table删除数据
Truncate与Delete区别
1、Truncate Table不带where子句,只能将整个表数据清空。而Delete可以带where子句,允许按条件删除某些记录。
2、Truncate Table不记录事务日志,而Delete无论删除多少记录,都会每删除一行记录一条事务日志。所以Truncate删除数据后是无法通过事务日志恢复。
3、因为Truncate Table 不记录日志,不会激发表上的删除触发器,而Delete会激发删除触发器。
4、Truncate Table删除表中所有行,标识列会重置为0,而Delete不会重置标识列。
5、Truncate Table不能用于有外键约束引用的表,这种情况下,需要使用Delete语句。

好了,今天就到这吧,希望的笔记也可以帮助到大家
原创粉丝点击