加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLSERVER中条件表达式和逻辑运算符

发布时间:2020-12-12 12:52:17 所属栏目:MsSql教程 来源:网络整理
导读:======================================= T-sql中的条件表达式和逻辑运算符 =======================================------------温故而知新------------ 常量:表示单个指定数据值的符号。一个常量由一个或多个字母、数字字母组成,字母和datatime需要用


=======================================
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 语句。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读