不等号(!=,<>)

查询出来的结果集不包含有当前字段为null的数据

<> 是标准的sql语法, 开发中尽量使用<>, 会将字段为null的数据也当做满足不等于的条件而将数据筛选掉

!=不能比较null值,最好用ISNULL()转一下在比较

Like

%

包含零个或多个字符的任意字符串。

WHERE title LIKE '%computer%' 将查找在书名中任意位置包含单词 "computer" 的所有书名。

(下划线)

任何单个字符

WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。

[ ]

指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。

WHERE au_lname LIKE '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。 在范围搜索中,范围包含的字符可能因排序规则的排序规则而异。

[^]

不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。

WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。

LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。

当所有自变量 (match_expression模式,和escape_character,如果存在) 是 ASCII 字符数据类型,将执行 ASCII 模式匹配。 如果任何一个参数为 Unicode 数据类型,则所有参数都将转换为 Unicode,并执行 Unicode 模式匹配。 当你使用 Unicode 数据 (ncharnvarchar数据类型) 具有类似的内容,尾随空格有意义; 但是,非 Unicode 数据,尾随空格则没有意义。

备注:like比较受排序规则影响

like多值匹配

SELECT
*
FROM kp_study_type
WHERE outSystemSign = 'guangdongjlcyry' AND valid = 1 AND studyName LIKE '%继[教续]%' ; //包含'继续'或'继教' 注意:'%[0123456789]%'筛选出所有带数字的记录

Between…and 包括边界,not between…and 不包括边界s

Union

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同

默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 

注:使用运算词的几个查询结果行必须是一致的。

Select into

从一个表复制数据,然后把数据插入到另一个新表中

注意:MySQL 不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT

可以使用以下语句来拷贝表结构及数据:

CREATE TABLE 新表 SELECT * FROM 旧表

SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可:

SELECT * INTO newtable FROM table1 WHERE 1 = 0;

Insert into select

从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

INSERT INTO table2 SELECT * FROM table1;

Contains

只能在where子句中使用,可以指定逻辑操作符(包括 AND ,AND NOT,OR )

查询以 '湖' 开头的地址

SELECT
student_id,
student_name
FROM students
WHERE CONTAINS(address, '"hu*"')

如果要检查的是两个关键字,如是或地关系:

SELECT * FROM company
WHERE CONTAINS(*, '"北京" or "tttt"')

如果是与的关系:

SELECT * FROM company WHERE CONTAINS(*, '"北京" and "tttt"')

可以搜索:

1、词或短语。

2、词或短语的前缀。

3、与另一个词相邻的词。

由另一个词的词形变化而生成的词(例如,drive 一词是 drives、drove、driving 和 driven 词形变化的词干)。

4、使用同义词库确定的另一个词的同义词(例如,metal 一词可能有 aluminum 和 steel 等同义词)

Exists

EXISTS检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,内部有一个子查询语句(SELECT ... FROM...),返回一个结果集。 EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。

exists (sql 返回结果集为真)  ,not exists (sql 不返回结果集为真)

一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。

可以通过使用 EXISTS 条件句防止插入重复记录。

INSERT INTO TableIn (ANAME, ASEX)
SELECT TOP 1
'张三',
'男'
FROM TableIn
WHERE NOT EXISTS (SELECT
*
FROM TableIn
WHERE TableIn.AID = 7)

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况(需要遍历外表)

比较使用 EXISTS 和 IN 的查询。注意两个查询返回相同的结果。

SELECT
*
FROM TableIn
WHERE EXISTS (SELECT
BID
FROM TableEx
WHERE BNAME = TableIn.ANAME)
SELECT
*
FROM TableIn
WHERE ANAME IN (SELECT
BNAME
FROM TableEx)

比较使用 EXISTS 和 = ANY 的查询。注意两个查询返回相同的结果。

SELECT
*
FROM TableIn
WHERE EXISTS (SELECT
BID
FROM TableEx
WHERE BNAME = TableIn.ANAME)
SELECT
*
FROM TableIn
WHERE ANAME = ANY (SELECT
BNAME
FROM TableEx)

在子查询中使用 NULL 仍然返回结果集

select * from TableIn where exists(select
null)

等同于: select * from TableIn

例子:

Id    Name   Class        Count   Date

1   苹果   
 水果   
 10   2011-7-1

1   桔子    水果    20   2011-7-2

1   香蕉   
 水果   
 15   2011-7-3

2   白菜    蔬菜    12   2011-7-1

2   青菜   
 蔬菜    19   2011-7-2

得到下面结果:(Id唯一,Date选最近的一次)

1   香蕉   
水果    15    
2011-7-3

2   青菜   
蔬菜    19     2011-7-2

法一:

SELECT Id, Name, Class, Count, Date
FROM table t
WHERE (NOT EXISTS
( SELECT Id, Name, Class, Count, Date FROM table
WHERE Id = t.Id AND Date > t.Date))

法二:

SELECT Id, Name, Class, COUNT, Date
FROM table1 t
WHERE (Date =
( SELECT
MAX(Date)
FROM table1
WHERE Id = t.Id))

注意:distinct得不到这个结果, 因为distinct是作用与所有列的

CREATE INDEX

在表上创建一个简单的索引。允许使用重复的值:

CREATE UNIQUE INDEX 

在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值

排序:TOPLIMITROWNUM

//Sql Server
SELECT TOP number|percent column_name(s) FROM table_name;
//MySQL
SELECT * FROM Persons LIMIT 5;
//Oracle
SELECT * FROM Persons WHERE ROWNUM <= 5;

<![CDATA[ ]]>(用于xml文档) 

  • CDATA 部分中的所有内容都会被解析器忽略
  • 不能包含字符串 "]]>"
  • 结尾的 "]]>" 不能包含空格或折行
  • 不能嵌套

Xml文档中非法的 XML 字符必须被替换为实体引用

转义序列字符之间不能有空格;

转义序列必须以”;”结束;

单独出现的”&”不会被认为是转义的开始

&lt;

<

非法

&amp;

&

&gt;

>

合法,习惯替换为实体引用

&apos;

'

&quot;

"

 

<![CDATA[]]>、xml转义字符比较:

  • <![CDATA[]]>不能适用所有情况,转义字符可以;
  • 对于短字符串<![CDATA[]]>写起来啰嗦,对于长字符串转义字符写起来可读性差;
  • <![CDATA[]]>表示xml解析器忽略解析,所以更快

sql执行顺序

  1. FROM   [left_table]
  2. <join_type> JOIN <right_table>
  3. ON   <join_condition>
  4. WHERE   <where_condition>
  5. GROUP BY  <group_by_list>
  6. WITH  <CUBE | RollUP>
  7. HAVING  <having_condition>
  8. SELECT
  9. DISTINCT
  10. ORDER BY  <order_by_list>
  11. <Top Num>  <select list>

SQL关键字的更多相关文章

  1. sql关键字的解释执行顺序

      sql关键字的解释执行顺序 分类: 笔试面试总结2013-03-17 14:49 1622人阅读 评论(1) 收藏 举报 SQL关键字顺序 表里面的字段名什么符号都不加,值的话一律加上单引号 有一 ...

  2. SQL关键字转换大写核心算法实现

    1 不跟你多废话 上代码! /// <summary> /// SQL关键字转换器 /// </summary> public class SqlConverter : IKe ...

  3. Elasticsearch 关键字与SQL关键字对比总结

    由于Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库.而平常使用的MySql,Oracle,SQLServer 等为关系型数据库,二者有着本质的区别,Es ...

  4. sql 关键字解析

    sql 关键字解析 关键字 解析 union 注意:每个 SELECT 语句,必须列的数量.顺序相同,列的数据类型相似.即:1. UNION 内部的每个 SELECT 语句必须拥有相同数量的列:2. ...

  5. sql 语句中定义的变量不能和 sql关键字冲突

    sql 语句中定义的变量不能和 sql关键字冲突 from bs_email_account account LEFT JOIN bs_group_info gp ON account.group_i ...

  6. Oracle SQL 关键字

    1.UID返回标识当前用户的唯一整数SQL> show userUSER 为"GAO"SQL> select username,user_id from dba_use ...

  7. sql关键字过滤C#方法

    /// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...

  8. 关于SQL关键字"having "

    HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_f ...

  9. SQL关键字的执行顺序

    1.Mysql执行顺序,即在执行时sql按照下面的顺序进行执行: from on join where group by having select distinct union order by 2 ...

随机推荐

  1. SparkStreaming推测机制:面试被问遇到什么问题,说这个显水平!

    背景 老刘最近晚上会刷刷牛客网的大数据开发面经,总是会看到一个高频的面试题,那就是你在学习过程中遇到过什么问题吗? 这个问题其实有点难回答,如果我说的太简单了,会不会让面试官觉得水平太低,那我应该讲什 ...

  2. Python强大的日志模块logging

    前言 日志是对于软件执行所发生的事件的一种追踪记录方式.日常使用过程中对代码执行的错误和问题会进行查看日志来分析定位问题所在.平常编写代码以及调试也经常用到.通常的新手的做法是直接print打印,但是 ...

  3. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记

    2.5.4 MongoDB -- 更新和删除 整体更新 更新字段 字段操作 数组操作 删除 https://docs.mongodb.com/manual/reference/operator/upd ...

  4. 原生js的一些盲点

    1.document.readyState 有三个值loading  interactive //loading 仍在加载 interactive  文档已被解析 正在加载状态结束 但是样式表和框架之 ...

  5. spark知识点_datasources

    来自官网DataFrames.DataSets.SQL,即sparkSQL模块. 通过dataframe接口,sparkSQL支持多种数据源的操作.可以把dataframe注册为临时视图,也可以通过关 ...

  6. 包与包管理.md

    软件包:源码包   RPM包 二进制包 RPM包依赖性   模块依赖查询   www.rpmfind.net umount 解除CDROM挂载 mount 挂载 umount [/dev/device ...

  7. 【转载】一种git commit前自动格式化的方式

    查看原文 简介 这个系列为了解决一个问题:自动化的去管理代码风格和格式 前提:Linux,C语言,Clang 如何在每次commit的时候,将代码风格自动格式化后再提交commit,且格式化的内容必须 ...

  8. WebSocket协议中文版

    WebSocket协议中文版 摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信.用于这个安全模型是通常由web浏览器使用 ...

  9. C++题目东华

    1. 定义一个点类Point,其有两个double型的私有数据成员x和y.此外还包含以下公有成员函数: (1)构造函数,给点初始化: (2)setPoint函数,设置点坐标值: (3)distance ...

  10. Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...