好记性不如烂笔头,这句话我自认为很对,就算再好的脑子,也会有忘记知识的那天,今天,就用我自认为一个很不错的方法,那就是把自己的笔记发到论坛,这样,可以让大家得到帮助,对自己也是一种帮助
一、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语句。 好了,今天就到这吧,希望的笔记也可以帮助到大家 |
SQL语句
最新推荐文章于 2023-02-28 11:34:03 发布