-
sql语句大全之SQLSERVER中条件表达式和逻辑运算符
=======================================
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,
titles.title,
publishers.pub_name
FROM titles RIGHT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id
完整外部联接 包括所有联接表中的所有行,不论它们是否匹配。例如,titles 表和
publishers 表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个
表中没有匹配值的书名和出版商。
SELECT titles.title_id,
titles.title,
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 语句。