SELECT语句使用大全(二)
- 格式:docx
- 大小:18.74 KB
- 文档页数:8
SQL语句一、数据查询SELECT语句的完整语法为:SELECT要查询的字段FROM 说明数据来自那些表[WHERE…] 说明查询条件(筛选语句)[GROUP BY…] 用于对查询结果进行分组,可以利用它进行分组汇总[HAVING…] 必须跟随group by使用,它用来限定分组必须满足的条件[ORDER BY…] 用来对查询结果进行排序into table/dbf 表名Into arrayInto cursorto file 文本文件名说明:用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。
1 FROM子句FROM子句指定了SELECT语句中字段的来源。
FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由INNER JOIN、LEFT JOIN 或RIGHT JOIN 得到的复合结果。
如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。
例:下列SQL语句返回所有有成绩同学的记录SELECT Xs.xh, Xs.xm, Xs.xb, Xs.xdh, Cj.kcdh, Cj.cj;FROM sjk!xs INNER JOIN sjk!cj ;ON Xs.xh = Cj.xhSELECT xs.xh,xs.xm,cj.kcdh,cj.cj FROM xs,cj;WHERE xs.xh=cj.xh(select xh from cj;Where cj>=60)2 ALL、DISTINCT、DISTINCTROW、TOP谓词(1) ALL 返回满足SQL语句条件的所有记录。
如果没有指明这个谓词,默认为ALL。
例:SELECT ALL xh,xm,xb;From xs(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。
(3) DISTINCTROW 如果有重复的记录,只返回一个(4) TOP显示查询头尾若干记录。
select各子句用法1. SELECT DISTINCT:- This clause is used to select unique rows from a table. It eliminates duplicate rows from the result set.2. SELECT TOP:- This clause is used to limit the number of rows returned by a query. It is commonly used in conjunction with the ORDER BY clause to specify the desired number of rows from the top.3. SELECT INTO:- This clause is used to create a new table and insert the selected rows from an existing table into the new table. It is commonly used to create backup tables or to make copies of existing tables.4. SELECT WHERE:- This clause is used to specify conditions for selecting rows from a table. It is used to filter the result set based on specified conditions.5. SELECT FROM:- This clause is used to specify the table(s) from which the data is to be retrieved. It is used to identify the source table(s) for the SELECT statement.6. SELECT JOIN:- This clause is used to combine rows from two or more tables based on related columns between them. It is used to retrieve data from multiple tables by specifying the related columns to join on.7. SELECT ORDER BY:- This clause is used to sort the result set in ascending or descending order based on one or more columns. It is used to arrange the selected rows in a specific order.8. SELECT GROUP BY:- This clause is used to group rows based on one or more columns. It is commonly used with aggregate functions like SUM, COUNT, AVG, etc., to perform calculations on grouped rows. 9. SELECT HAVING:- This clause is used to filter the result set based on conditions on the grouped rows. It is similar to the WHERE clause but operates on grouped rows rather than individual rows.10. SELECT UNION:- This clause is used to combine the result sets of two or more SELECT statements into a single result set. It is used to merge rows from multiple queries into a single result set.。
一、select语句的基本语法在SQL中,select语句用于从数据库中检索数据。
它有以下基本语法:1. select子句:指定要从数据库中检索的列。
例如:SELECT column1, column2, ...FROM table_name;2. from子句:指定要检索数据的表名。
例如:SELECT column1, column2, ...FROM table_name;3. where子句:指定检索数据的条件。
例如:SELECT column1, column2, ...FROM table_nameWHERE condition;4. order by子句:指定检索数据的排序方式。
例如:SELECT column1, column2, ...FROM table_nameORDER BY column1;二、查询条件表示方法在select语句中,可以使用不同的查询条件来指定要检索的数据。
常见的查询条件表示方法有以下几种:1. 等于:使用等号表示要检索的数据等于指定的值。
例如:SELECT column1, column2, ...FROM table_nameWHERE column1 = value;2. 不等于:使用不等号表示要检索的数据不等于指定的值。
例如:SELECT column1, column2, ...FROM table_nameWHERE column1 != value;3. 大于/小于:使用大于号或小于号表示要检索的数据大于或小于指定的值。
例如:SELECT column1, column2, ...FROM table_nameWHERE column1 > value;4. 区间:使用between和and表示要检索的数据在指定的区间内。
例如:SELECT column1, column2, ...FROM table_nameWHERE column1 BETWEEN value1 AND value2;5. 空值:使用IS NULL或IS NOT NULL来检索空值或非空值的数据。
SQL(Structured Query Language)是一种用于管理关系数据库的编程语言。
`SELECT`语句是SQL中最常用的命令之一,用于从数据库表中选择数据。
### SELECT语句的功能:1. **数据检索**:使用`SELECT`语句,可以从一个或多个表中检索数据。
2. **条件过滤**:结合`WHERE`子句,可以过滤出满足特定条件的数据。
3. **排序数据**:使用`ORDER BY`子句,可以对检索出的数据进行排序。
4. **聚合函数**:可以使用聚合函数(如`SUM`、`AVG`、`MAX`、`MIN`等)对数据进行计算。
5. **分组和汇总**:结合`GROUP BY`子句,可以对数据进行分组,并使用聚合函数进行汇总。
6. **连接表**:通过`JOIN`操作,可以将多个表中的数据连接起来。
7. **子查询**:可以在`SELECT`语句中使用子查询来获取额外的数据。
### SELECT语句的基本格式:```sqlSELECT 列1, 列2, ...FROM 表名WHERE 条件;* `SELECT`后面跟着要选择的列名,用逗号分隔。
* `FROM`后面是表名。
* `WHERE`子句用于过滤结果,后面跟着条件表达式。
### 示例:1. **选择所有列**:```sqlSELECT * FROM Employees;```2. **选择特定列**:```sqlSELECT FirstName, LastName FROM Employees;```3. **带有条件的查询**:```sqlSELECT FirstName, LastName FROM Employees WHERE Department = 'IT';```4. **排序结果**:```sqlSELECT FirstName, LastName FROM Employees ORDER BY Salary DESC;5. **聚合函数**:```sqlSELECT Department, AVG(Salary) AS AverageSalary FROM Employees GROUP BY Department;```6. **连接表**(以两个表为例):假设有两个表:`Employees`和`Departments`。
select的使用及典型用法`SELECT`语句是关系型数据库中最常用的查询语句,用于从一个或多个表中检索数据。
它的基本语法结构是:```SELECT列名FROM表名WHERE条件;````SELECT` 语句的功能主要有两个方面:选择(Selecting)和过滤(Filtering)。
选择指的是从表中选择需要的列,过滤则是通过条件来筛选需要的行。
下面是一些典型的`SELECT`语句的用法:1.查询表中的所有数据```sqlSELECT*FROM表名;```这个语句将返回表中所有的行和列的数据。
2.查询指定列的数据```sqlSELECT列1,列2FROM表名;```这个语句将返回指定列的数据,多个列之间用逗号分隔。
3.添加条件过滤```sqlSELECT列名FROM表名WHERE条件;```条件可以用于过滤需要的行,常用的条件操作符有:`=`(等于)、`<>`(不等于)、`>`(大于)、`<`(小于)、`>=`(大于等于)、`<=`(小于等于)、`LIKE`(匹配一些模式)等。
4.使用聚合函数```sqlSELECT函数(列名)FROM表名;```聚合函数用于计算表中数据的汇总值,例如`COUNT`(计算行数)、`SUM`(求和)、`AVG`(平均值)、`MAX`(最大值)、`MIN`(最小值)等。
5.对查询结果进行排序```sqlSELECT列名FROM表名ORDERBY列名[ASC,DESC];````ORDERBY`子句用于对查询结果进行排序,默认情况下按升序排序,可以使用`ASC`(升序)或`DESC`(降序)来指定排序的方式。
6.查询结果去重```sqlSELECTDISTINCT列名FROM表名;````DISTINCT`关键字用于去除查询结果中的重复行。
7.查询多个表的数据```sqlSELECT列名FROM表1JOIN表2ON表1.列=表2.列;````JOIN`子句用于连接多个表,通过指定列之间的关系来检索数据。
常用SELECT语句汇总一、单表查询(一)按照条件查询相关记录Select 字段1,字段2……字段N from 表 where 条件含义:从表中根据where 条件查询记录,每条记录显示的字段按照字段1、字段2….字段N的设置显示注:select语句中的标点符号及运算符必须使用英文半角字符。
例1:从凭证库中查询2004年1月31日的凭证,每条凭证只显示凭证日期、凭证号、科目名称、借方金额、贷方金额、会计月份 6个字段Select 凭证日期,凭证号,科目名称,借方金额,贷方金额,会计月份 From 凭证库 where 凭证日期=’2004-1-31’例2:根据业务_个人基本情况表,找出缴存状态为”正常”的记录,查出的记录只显示姓名、身份证号、单位账号及个人账号 4个字段Select 个人姓名,身份证号,单位账号,个人账号 from 业务_个人基本情况表 where 账户状态=’1’例3:从科目余额表中查询出2010年借方金额大于50万或2010年借方金额小于10万的记录,每条记录只显示摘要、科目编码、借方金额、贷方金额、年度5个字段Select摘要,科目编码,借方金额,贷方金额,年度 From 科目余额 where(借方金额>500000 and 年度=2010) or (借方金额<100000 and 年度=2010)Select top 100 字段1,字段2……字段N from 表 where 条件含义:从表中根据where 条件查询记录,显示前100条记录,每条记录按照字段1、字段2….字段N的设置显示例1:从凭证库中查询2004年1月31日的前100条凭证,每条2凭证只显示凭证日期、凭证号、科目名称、借方金额、贷方金额、会计月份 6个字段Select top 100凭证日期,凭证号,科目名称,借方金额,贷方金额,会计月份 From 凭证库where 凭证日期=’2004-1-31’例2:根据业务_个人基本情况表,找出缴存状态为”正常”的前100条记录Select top 100个人姓名,身份证号,单位账号,个人账号 from 业务_个人基本情况表where 账户状态=’1’(二)通配符的使用*表示将全部的字段内容都显示出来例1:从业务_电子警察表中筛选出无车号或者车牌号小于3位的记录Select * from 业务_电子警察 where 车号=’’ or Len(车号)<3 例2:从科目余额表中查询出2002年收入大于50万的记录 Select * from 科目余额 where 借方金额>500000 and 年度=2002%表示零或多个字符例1:从凭证库中查询2003年各月的房租收入情况Select month(凭证日期) as 月份, sum(贷方金额) as 房租金额 from 凭证 where 摘要 like ‘%房租%’ and 年度=2003例2:从凭证库中查询 2008年包含税的记录Select * from 凭证库 where摘要 like ‘%税%’ and 年度=2008 _表示任何一个字符例1:根据科目余额表查询出目编码为10开头的一级科目记录 Select * from 科目余额where 科目编码 like ‘10_’例2:根据凭证库查询科目名称长度为4且以银行开始的前100条记录Select top 100 * into 银行记录表from 凭证库 where 科目名称 like ‘银行_ _’3(三)查询的记录生成新表select字段1,字段2……字段N into 新表 from 旧表 where 条件含义:从旧表中按照条件查询相关记录并生成新表例1:从捐款明细账中查询并生成2005年通过邮寄汇款的捐款名单Select * into 2005年邮寄捐款表 from 业务_捐款明细表 where 捐款方式=’邮寄’ and year(捐款时间)=2005例2:根据业务_个人基本情况表,找出缴存状态为”正常”的记录,生成”业务_临时_个人基本情况表”Select 个人姓名,身份证号,单位账号,个人账号 into业务_临时_个人基本情况表from 业务_个人基本情况表 where 账户状态=’1’(四)查询出的字段重新命名select字段1 as 字段11,字段2 as 字段22……字段N as 字段nn from表 where 条件或者select字段1 as 字段11,字段2 as 字段22……字段N as 字段nn into 新表 from 旧表where 条件例1:从科目余额表中查询出科目编码为4121、4125、4126、4128的记录,并把借方发生额字段重新命名为经费支出情况、贷方发生额命名为经费收入情况select科目编码,科目名称,借方发生额 as 经费支出情况,贷方发生额 as 经费收入情况,期末余额 from 科目余额 where 科目编码 like ’4121’ or 科目编码 like ‘4125’ or 科目编码 like ‘4128’ or 科目编码 like ‘4126’例2:从凭证库中查询2003年各月的房租收入情况Select month(凭证日期) as 月份, sum(贷方金额) as 房租金额 into 2003年房租收入情况表from 凭证库 where 科目编码4like ‘40702’ and 摘要 like ‘%租%’(五)常用子句select字段into 新表 from 旧表 where 条件 order by 字段 Asc/DescOrder by 对查询结果进行排序, ASC升序排序,Desc降序排序例1:从科目余额表中查询出2002年收入大于50万的记录 Select * from 科目余额 where 借方金额>500000 and 年度=2002 order by 借方金额 asc例2:分析2008年人员支出构成Select 科目编码,科目名称,sum(借方金额) as 金额合计 from 凭证库 where 科目编码like ‘501%’ group by 科目编码 order by sum(借方金额) descselect字段into 新表 from 旧表 where 条件 Group by 字段 Group by 可以快速而简便地将查询结果按照指定的字段进行分组例1:把凭证库中的记录按照科目名称分组Select 科目名称,科目编码,借方金额,贷方金额 from 凭证库 group by 科目名称例2:从凭证库中查询并2003年各月的房租收入情况 Select month(凭证日期) as 月份, sum(贷方金额) as 房租金额 from 凭证 where 科目编码 like ‘40702’ and 摘要 like ‘%租%’ group by month(凭证日期)例3:从凭证库中查询科目编码为501开头的记录,并根据不同的科目编码分析借方金额情况Select 科目编码,科目名称,sum(借方金额) as 金额合计 from 凭证库 where 科目编码like ‘501%’ group by 科目编码 order by sum(借方金额) descselect字段into 新表 from 旧表 where 条件 Group by 字段 Having 分组条件5Having语句通常跟在Group by语句后,作为分组后的过滤条件例1:根据凭证库查询科目名称包含事业的记录,并按照科目名称分组Select 科目名称,count(*) as 科目数量 from凭证库 group by 科目名称 having 科目名称 like ‘%事业%’例2:根据业务_缴存种类统计表,统计出单位为所有职工缴存的住房公积金金额都一样的单位账号,生成业务_临时_缴存种类统计表Select 单位账号 into 业务_临时_缴存种类统计表 from 业务_缴存种类统计表 group by 单位账号 having count (单位金额)=1(六)常用函数Year (日期) 返回某个日期的年份例:从捐款明细账中查询并生成2005年通过邮寄汇款的捐款名单Select * into 2005年邮寄捐款表 from 业务_捐款明细表 where 捐款方式=’邮寄’ and year(捐款时间)=2005Month(日期) 返回某个日期的月份例:从凭证库中查询2003年各月的房租收入情况Select month(凭证日期) as 月份, sum(贷方金额) as 房租金额 into 2003年房租收入情况表from 凭证库 where 科目编码 like ‘40702’ and 摘要 like ‘%租%’Sum(数值列名/数值字段名) 返回满足条件的某一数值列中的数值的总和例1:统计2008年凭证库借方金额的总发生额Select sum(借方金额) as 借方金额汇总 from 凭证库 where 年度=2008例2:根据业务_手续费返还表查询2005年、2006年,不同客户的返还金额合计Select 客户代码,sum(返还金额) as 返还金额合计 into 业务。
数据库select语句的基本用法数据库的SELECT语句用于从数据库中检索数据。
它的基本用法如下:1. 选择所有列:```SELECT * FROM 表名;```这条语句将从指定表中检索所有列的数据。
2. 选择特定列:```SELECT 列1, 列2, ... FROM 表名;```这条语句将从指定表中检索指定列的数据。
3. 使用WHERE子句进行筛选:```SELECT 列1, 列2, ... FROM 表名 WHERE 条件;```WHERE子句用于根据指定的条件筛选数据,只返回符合条件的行。
4. 使用ORDER BY子句进行排序:```SELECT 列1, 列2, ... FROM 表名 ORDER BY 列名[ASC|DESC];```ORDER BY子句用于按指定列的值对结果进行升序(ASC)或降序(DESC)排序。
5. 使用LIMIT子句限制返回结果的数量:```SELECT 列1, 列2, ... FROM 表名 LIMIT 数量;```LIMIT子句用于限制返回结果的行数。
6. 使用DISTINCT关键词去除重复行:```SELECT DISTINCT 列1, 列2, ... FROM 表名;```DISTINCT关键词用于去除重复行,只返回唯一的行。
7. 使用表连接:```SELECT 列1, 列2, ... FROM 表1 INNER JOIN 表2 ON 表1.列= 表2.列;```表连接用于将多个表中的数据关联起来,并返回符合关联条件的结果。
以上是数据库SELECT语句的基本用法,根据具体的需求和情况,可以使用更复杂的语法和多个子句来编写更高级的查询。
sql命令select用法
SELECT是SQL语句中最核心的命令之一,用于从数据库中
检索数据。
它的基本语法如下:
SELECT 列名
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组条件
ORDER BY 排序字段
- 列名:表示要检索的列名,可以是多个列名,用逗号隔开,
也可以使用通配符 * 表示检索所有列。
- 表名:表示要检索数据的表名。
- WHERE:用于指定检索数据的条件,可以使用比较运算符、逻辑运算符以及通配符进行条件匹配。
- GROUP BY:用于对数据进行分组,后面跟分组字段。
- HAVING:用于指定分组数据的筛选条件,它必须跟在GROUP BY之后。
- ORDER BY:用于对检索结果进行排序,可以按照一个或多
个列进行升序或降序排列。
SELECT语句的使用范例:
1. 从表中选择所有列:
SELECT * FROM 表名;
2. 从表中选择指定列:
SELECT 列1,列2 FROM 表名;
3. 在条件下选择数据:
SELECT 列1,列2 FROM 表名 WHERE 条件;
4. 对数据进行分组并选择:
SELECT 列1,列2 FROM 表名 GROUP BY 列3;
5. 对分组数据进行筛选:
SELECT 列1,列2 FROM 表名 GROUP BY 列3 HAVING 条件;
6. 对结果进行排序:
SELECT 列1,列2 FROM 表名 ORDER BY 列4 ASC/DESC;。
02.SELECT的基本使⽤⼀、基础的SELECT语句最基本的SELECT语句:SELECT 字段1,字段2,... FROM 表名;*:表中的所有的字段(或列)DUAL:表⽰伪表列的别名:SELECT 字段名 [as] "别名" from 表名;列的别名,尽量使⽤双引号(""),⽽且不建议省略as去除重复⾏:DISTINCTSELECT DISTINCT 字段名 FROM 表名;DISTINCT只能放在需要查询的字段前空值参与运算:结果⼀定为null空值:null,不等同于0,'','null'如何⽤0来代替null:SELECT IFNULL(字段名,0) FROM 表名;着重号:`SELECT 字段名 FROM 表名;如果⾃定义的字段名、表名与关键字、保留字、数据库系统或常⽤⽅法冲突,请在SQL语句中使⽤`(着重号)引起来查询常数SELECT 常数,字段名 FROM 表名;显⽰表的结构:DESCRIBE或DESCDESCRIBE 表名;DESC 表名;显⽰表中字段的详细信息过滤数据:WHERESELECT 字段名 FROM 表名 WHERE 过滤条件;WHERE⼦句声明在FROM的后⾯example-- 基础的SELECT的使⽤SELECT * FROM employees;SELECT employee_id,last_name,salary FROM employees;-- 列的别名SELECT employee_id emp_id,last_name AS lname,department_id "dept_id" FROM employees;-- 去除重复⾏SELECT DISTINCT department_id FROM employees;-- 空值参与运算:结果为nullSELECT employee_id,salary AS "⽉⼯资",salary*(1+commission_pct)*12 AS "年⼯资",commission_pct FROM employees;SELECT employee_id,salary AS "⽉⼯资",salary*(1+IFNULL(commission_pct,0))*12 AS "年⼯资",commission_pct FROM employees;-- 着重号SELECT * FROM `order`;-- 查询常熟SELECT 'Statice' AS "company",employee_id,last_name FROM employees;-- 显⽰表的结构:显⽰表中字段的详细信息DESCRIBE employees;DESC departments;-- 过滤数据:where-- 查询90号部门的员⼯信息SELECT * FROM employees WHERE department_id = 90;练习题-- 1.查询员⼯12个⽉的⼯资总和,并起别名为ANNUAL SALARYSELECT employee_id,last_name,salary*12*(1+IFNULL(commission_pct,0)) AS "ANNUAL SALARY" FROM employees;-- 2.查询employees表中去除重复的job_id以后的数据SELECT DISTINCT job_id FROM employees;-- 3.查询⼯资⼤于12000的员⼯姓名和⼯资SELECT last_name,salary FROM employees WHERE salary>12000;-- 4.查询员⼯号为176的员⼯的姓名和部门号SELECT last_name,department_id FROM employees WHERE employee_id=176;-- 5.显⽰表 departments 的结构,并查询其中的全部数据DESC departments;SELECT * FROM departments;。
SELECT语句使用大全虽然 SELECT 语句的完整语法比较复杂,但是大多数 SELECT 语句都描述结果集的四个主要属性1、结果集中的列的数量和属性。
2、从中检索结果集数据的表,以及这些表之间的所有逻辑关系。
3、为了符合 SELECT 语句的要求,源表中的行所必须达到的条件。
不符合条件的行会被忽略。
4、结果集的行的排列顺序。
它的主要子句可归纳如下:SELECT select_list --描述结果集的列INTO new_table_name --指定使用结果集来创建新表FROM table_list --包含从中检索到结果集数据的表的列表[返回结果集的对象]。
[ WHERE search_conditions ] --WHERE 子句是一个筛选,它定义了源表中的行要满足 SELECT 语句的要求所必须达到的条件[ GROUP BY group_by_list ] --根据 group_by_list 列中的值将结果集分成组[ HAVING search_conditions ] --结果集的附加筛选[ ORDER BY order_list [ ASC | DESC ] ] --结果集的附加筛选一、使用选择列表1、使用 *号来选择所有列;使用“[表名|别名]。
[字段]”选取特定的列。
2、AS 子句可用来更改结果集列的名称或为派生列分配名称,也可以使用空格代替如: SELECT Name AS Name1,Name Name2 FROM Product ORDER BY Name ASC3、使用 DISTINCT 消除重复项如:select distinct [Year] from A4、使用 TOP 和 PERCENT 限制结果集数量TOP ( expression ) [ PERCENT ] [ WITH TIES ] --expression 数量、PERCENT按百分比返回数据、WITH TIES返回排序与最后一行并列的行。
SELECT语句使用大全(二)三、使用WHERE和 HAVING筛选行WHERE 和 HAVING 子句可以控制用于生成结果集的源表中的行。
WHERE 和HAVING 是筛选器。
这两个子句指定一系列搜索条件,只有那些满足搜索条件的行才用于生成结果集。
HAVING 子句通常与 GROUP BY 子句一起使用以筛选聚合值结果。
但是 HAVING 也可以在不使用 GROUP BY 的情况下单独指定。
HAVING 子句指定在应用 WHERE 子句筛选器后要进一步应用的筛选器。
这些筛选器可以应用于 SELECT 列表中所用的聚合函数。
1、比较搜索条件。
2、范围搜索条件。
[NOT ] BETWEEN 范围搜索返回介于两个指定值之间的所有值SELECT * FROM A WHERE Acount Between 10 AND 203、列表搜索条件。
IN 关键字使您可以选择与列表中的任意值匹配的行。
SELECT ProductID, [Name] FROM Product WHERE CategoryID IN (12, 14, 16)4、搜索条件中的模式匹配。
LIKE 关键字搜索与指定模式匹配的字符串、日期或时间值。
% 包含零个或多个字符的任意字符串。
_ 任何单个字符。
[ ] 指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。
[^] 不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。
5、NULL比较搜索条件。
NULL比较行为取决于 SET ANSI_NULLS设置,当 SET ANSI_NULLS 为 ON 时,如果比较中有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。
此时需要使用 IS [NOT] NULL 子句测试 NULL 值。
当 ANSI_NULLS 为 OFF 时,如果 ColumnA 包含空值,则比较操作 ColumnA = NULL 返回 TRUE;如果 ColumnA 除包含 NULL 外还包含某些值,则比较操作返回 FALSE。
此外,两个都取空值的表达式的比较也输出 TRUE6、所有记录(=ALL、>ALL、<= ALL、ANY)。
select * from A where Amount=Any(select amount from A where [Year]=2001) and [Year]<>20017、逻辑运算符。
逻辑运算符包括 AND、OR 和 NOT。
逻辑运算符的优先顺序为NOT、AND 和 OR。
四、使用 GROUP BY分组行GROUP BY 子句用来为结果集中的每一行产生聚合值。
如果聚合函数没有使用GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。
WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。
HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。
HAVING 子句可以引用选择列表中显示的任意项。
select [Year],Sum(AMount) AMount from A Group By [Year] --按年份分组统计销量五、用 ORDER BY对行进行排序ORDER BY 子句按一列或多列(最多 8,060 个字节)对查询结果进行排序。
排序可以是升序的 (ASC),也可以是降序的 (DESC)。
如果未指定是升序还是降序,就假定为 ASC。
六、子查询子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。
任何允许使用表达式的地方都可以使用子查询。
子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。
1、使用别名的子查询当表进行自联接或需要引入外表表列与本表列名相同时需要使用表别名2、使用 [NOT] IN 的子查询USE AdventureWorks;GOSELECT NameFROM Production.ProductWHERE ProductSubcategoryID IN(SELECT ProductSubcategoryIDFROM Production.ProductSubcategoryWHERE Name = 'Wheels')3、UPDATE、DELETE 和 INSERT 语句中的子查询如:联表更新GOUPDATE Production.ProductSET ListPrice = ListPrice * 2FROM Production.Product AS pINNER JOIN Purchasing.ProductVendor AS pvON p.ProductID = pv.ProductID AND pv.VendorID = 51;4、使用比较运算符的子查询GOSELECT CustomerIDFROM Sales.CustomerWHERE TerritoryID =(SELECT TerritoryIDFROM Sales.SalesPersonWHERE SalesPersonID = 276)5、使用 [NOT] EXISTS 的子查询6、用于替代表达式的子查询GOSELECT Name, ListPrice,(SELECT AVG(ListPrice) FROM Production.Product) AS Average,ListPrice - (SELECT AVG(ListPrice) FROM Production.Product) AS DifferenceFROM Production.ProductWHERE ProductSubcategoryID = 1七、表联接通过联接,可以从两个或多个表中根据各个表之间的逻辑关系来检索数据。
联接条件可通过以下方式定义两个表在查询中的关联方式:指定每个表中要用于联接的列。
典型的联接条件在一个表中指定一个外键,而在另一个表中指定与其关联的键。
指定用于比较各列的值的逻辑运算符(例如 = 或 <>)。
1、内联接[INNER] JOIN.仅当两个表中都至少有一个行符合联接条件时,内部联接才返回行,内部联接消除了与另一个表中的行不匹配的行.2、外连接 {LEFT |RIGHT|FULL} OUTER JOIN外部联接会返回 FROM 子句中提到的至少一个表或视图中的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。
将检索通过左外部联接引用的左表中的所有行,以及通过右外部联接引用的右表中的所有行。
在完全外部联接中,将返回两个表的所有行其分为:左外部联接,数据列表包括了满足查询条件的左边表的所有行。
右外部联接,数据列表包括了满足查询条件的右边表的所有行。
完全外部联接,数据包含了所有满足查询条件的列。
3、交叉联接CROSS JOIN返回满足查询条件记录的笛卡尔积运算的集合(N×M)。
4、自联接表可以通过自联接与自身联接。
5、多表联接SELECT , FROM Production.Product pJOIN Purchasing.ProductVendor pvON p.ProductID = pv.ProductIDJOIN Purchasing.Vendor vON pv.VendorID = v.VendorIDWHERE ProductSubcategoryID = 15ORDER BY 6、NULL和联接联接表的列中的空值(如果有)互相不匹配。
如果其中一个联接表的列中出现空值,只能通过外部联接返回这些空值(除非 WHERE 子句不包括空值)。
八、结果集的操作1、[ALL] UNION 运算符组合结果集。
UNION 运算符使您得以将两个或多个 SELECT 语句的结果组合成一个结果集。
使用 UNION 运算符组合的结果集都必须具有相同的结构。
而且它们的列数必须相同,并且相应的结果集列的数据类型必须兼容。
默认情况下,UNION 运算符将从结果集中删除重复的行。
如果使用 ALL 关键字,那么结果中将包含所有行而不删除重复的行。
2、EXCEPT 和 INTERSECT 执行半联接操作EXCEPT 和 INTERSECT 运算符使您可以比较两个或多个 SELECT 语句的结果并返回非重复值。
EXCEPT 运算符返回由 EXCEPT 运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非重复值。
INTERSECT 返回由 INTERSECT 运算符左侧和右侧的查询都返回的所有非重复值。
使用 EXCEPT 或 INTERSECT 比较的结果集必须具有相同的结构。
3、公用表表达式 (CTE) 递归查询公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。
递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。
递归 CTE 由下列三个元素组成:1、例程的调用:递归 CTE 的第一个调用包括一个或多个由 UNION ALL、UNION、EXCEPT 或 INTERSECT 运算符联接的 CTE_query_definitions。
由于这些查询定义形成了 CTE 结构的基准结果集,所以它们被称为“定位点成员”。
2、例程的递归调用。
递归调用包括一个或多个由引用 CTE 本身的 UNION ALL 运算符联接的 CTE_query_definitions。
这些查询定义被称为“递归成员”。
3、终止检查。
终止检查是隐式的;当上一个调用中未返回行时,递归将停止。
示例:go--创建表CREATE TABLE T (id INT identity(1,1), [NAME] VARCHAR(100), FathID int)--插入测试数据Insert t([Name],FathID) VALUES('A',0) --1Insert t([Name],FathID) VALUES('B',0)Insert t([Name],FathID) VALUES( 'C',0)Insert t([Name],FathID) VALUES('Aa',1) --4Insert t([Name],FathID) VALUES('Ab',1) --5Insert t([Name],FathID) VALUES('Ac',1)Insert t([Name],FathID) VALUES('Ba',2)Insert t([Name],FathID) VALUES('Bb',2)Insert t([Name],FathID) VALUES('Aaa',4)Insert t([Name],FathID) VALUES('Aab',4)Insert t([Name],FathID) VALUES('ABa',5)Insert t([Name],FathID) VALUES('ABb',5)GOWITH CN (ID,[Name],FathID,Lev)AS(--例程的调用,定位点成员select A.ID,A.[Name],FathID,1 LEVFROM T AWHERE A.FATHid=0 and [Name]='A'UNION ALL--递归调用,递归成员select a.ID,a.[Name],a.FathID, (LEV+1) LEV FROM T A JOIN CN c ON A.FATHID=C.IDWHERE A.FATHID=C.ID)--测试调用SELECT * FROM CN order by Lev--删除表DROP TABLE t4、汇总数据A、CUBE 汇总数据。