======================================= T-sql中的条件表达式和逻辑运算符 =======================================------------温故而知新------------
常量:表示单个指定数据值的符号。一个常量由一个或多个字母、数字字母组成,字母和datatime需要用引 ????? 号括起来,而二进制字符串和数字常量则不需要。 --------------------------------------------------------- 比较运算符:= ??????????? > ??????????? < ??????????? >= ??????????? <= ??????????? <> 不等于 ??????????? !? 非 ----------------------------------------------------------???????????? 一元运算符:+ ??????????? - ??????????? ~ 补数运算符 ----------------------------------------------------------??????????? 表达式:? 示例:price>100 ??????????????? name like 'pita' ??????????????? grade <> 'fail' ----------------------------------------------------------??????????????? 通配符:? ‘_’? 表示一个字符???? 例如:select meal_code from meal where meal_code like 'c_' ?????????? ?????????? %? 表示任意长度字符串:例如:select meal_code from meal where meal_code like 'co_%' ?????????? ????????? []? 表示括号中所指定范围内的一个字符 ???????????????????????????????? 例如:select * from flight where aircraft_code like '9w0[1-2]' ?????????? ????????? [^] 表示不在括号中所指定范围内的任意一个字符? ?????????????????????????????? 例如:select * from flight where aircraft_code like '9w0[^1-2]'? ----------------------------------------------------------- 逻辑运算符: ?????? AND:AND连接两个条件,并且仅当两上条件都为真时才返回true? ?????? OR:OR连接两个条件,但只要其中任一个为真就返回true??????? ?????? NOT:当一个语句中使用了多个逻辑运算符时,首先求not的值,然后求and的值,最后再求or的值。 ??????? ============================================ 使用insert 插入数据: ????? 语法如下:insert [into] <table_name> values <values> ?????????????? jobs 表中的四个字段,第一个字段存在唯一索引,并且自动增长不必用户添加 ?????????????? 所以只需添加三个字段的值即可 ?????????????? 示例:insert into jobs values('graphic artist',25,100) ============================================== =============================================== 使用select into 将一个表中的数据添加到另一个表中: ????? 语法如下:insert <table_name> SELECT <column_list> from <table_name2> ?????? ????? 例:create table author_details(au_id varchar(11),au_lname varchar(40)) ????????? go ????????? insert author_details select authors.au_id,authors.au_lname from authors ?????????? ????? 还可以将一个表中的数据有选择性地添加到另一个表 ????????? insert into sales(stor_id) select stor_id from stores ????????? INSERT INTO sales(stor_id) SELECT stor_id FROM stores ============================================================================== 更新表中的数据: ????? update <table_name> set <column_name=value> [where <search_condition>] ????? update titles set price==price+(0.25*price) where title_id='TC7777' ????? 注意:当update 命令不包含条件时,将更新所有行。 ================================================================================ -----------------------------------重点内容
使用联接信息更新:可以使用来自两个不同表的数据来更改数据。这可以通过联接来实现。联接根据表之 ???? 间的逻辑关系检索来自两个或多个表的数据。典型的联接指定表之间的外键关系。它通过以下方式 ???? 定义查询中两个表之间的联系方式。 ???? × 指定联接用到的每一个表的列。典型的联接指定一个表的外键以及在另一个表上的关联键 ???? × 指定用于比较列值的逻辑运算符,如=,<> ????? ???? 表联接的类型有三种: ?????????? × 内联接: 内联接中,仅当来自两个表的行的公共列匹配时,才会组合相应的记录并添加到查询 ???????????????????? 结果中。 ??????????? ?????????? × 外联接:外联接中只要行满足select 语句中任何where或having子句的搜索条件,则返回 ??????????????????? from 子句中提及的至少一个表的所有行。 ??????????????????? left outer join:左外联接返回左表中的所有记录,但返返回右表中的匹配记录。 ??????????????????? right outer join:右外联接返回右表中的所有记录,但仅返回左表中的匹配记录。 ???????????????????? ??????????????????? 因为外联接包括不匹配行,可以利用外联接查找违反外键约束的行。为此,需要先 ??????????????????? 创建外联接,然后添加搜索条件,以查找最右边表的主键列是空值的行。例如,下 ??????????????????? 面的外联接在 employee 表中查找在 jobs 表中没有对应行的行: ??????????SELECT employee.emp_id,employee.job_id ??????????FROM employee LEFT OUTER JOIN jobs? ???????????? ON employee.job_id = jobs.job_id ??????????WHERE (jobs.job_id IS NULL) ?????????? ??????????外联接?? 甚至包括在联接表中没有相关行的行的联接。可以创建外联接的三个变 ??????????化形式来指定所包括的不匹配行:? ???????????左向外联接?? 包括第一个命名表("左"表,出现在 JOIN 子句的最左边)中的所有行。 ???????????不包括右表中的不匹配行。例如,下面的 SQL 语句说明 titles 表和 publishers 表之 ???????????间的左向外联接包括所有的书名,甚至包括那些没有出版商信息的书名:? ???????????SELECT titles.title_id,? ????????????????? titles.title,? ????????????????? publishers.pub_name ???????????FROM titles LEFT OUTER JOIN publishers? ?????????????????????? ON titles.pub_id? ??????????????????????? = publishers.pub_id ???????????????????????? ???????????右向外联接?? 包括第二个命名表("右"表,出现在 JOIN 子句的最右边)中的所有行。 ???????????不包括左表中的不匹配行。例如,在 titles 和 publishers 表之间的右向外联接将包 ???????????括所有的出版商,甚至包括那些在 titles 表中没有书名的出版商。所得到的 SQL 可能 ??????????? ???????????象下面这样:? ???????????SELECT titles.title_id,? ????????????????? publishers.pub_name ???????????FROM titles RIGHT OUTER JOIN publishers? ?????????????????????? ON titles.pub_id = publishers.pub_id ??????????????????????? ???????????完整外部联接?? 包括所有联接表中的所有行,不论它们是否匹配。例如,titles 表和? ???????????publishers 表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个 ???????????表中没有匹配值的书名和出版商。? ???????????SELECT titles.title_id,? ????????????????? publishers.pub_name ???????????FROM titles FULL OUTER JOIN publishers? ?????????????????????? ON titles.pub_id? ??????????????????????? = publishers.pub_id
????????????????????????????? ???????????????????? ?????????? × 自联接:自联接是一种内联接,用于查找表中与同一表中其他记录相关的记录。自联接中,表 ????????????????? 与自身进行联接。 ??????????? ????? ???? 示例:tabl_a as table_alias_a join table_b as table_alias_b? ?????????? on? ?????????? table_alias_a.<common_field>=table_alias_b.<common_field>
============================================= 删除数据: ???? 删除表中所有数据:delete from table_name where state='ca' ???? 如不给出条件将会删除表中所有数据。 ????? ???? 使用truncate table删除表中的所有数据:truncate table 是用于删除表中所有行的命令。功能上 ????????? 它类似于没有where 子句的delete 语句。但truncate table比delete 执行速度快,而且使用 ????????? 的系统资源和事务日志资源更少。 ?????????? ????????? 虽然truncate table删除表中的所有行,但是表的结构、列、约束、索引等不会被改动。 ?????????? ????????? truncate table不能用于有外键约束引用的表,这种情况下,需要使用不带where子句的 ????????? delete 语句。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|