SQL 必知必会(3)——SQL进阶之子句、关键字和操作符

简介: 了解并掌握SQL的子句、关键字和操作符等使用方法

实验地址:https://developer.aliyun.com/adc/scenario/b84af5d2bfc144489289db0eee9e30fc?spm=a2c6h.26876520.0.i1.4f55371cpxFKLt

1.WHERE子句

WHERE子句用于提取满足指定标准的记录。

SELECT column_name,column_nameFROM table_nameWHERE column_name operator value;

执行如下SQL语句,从Websites表中选取国家为CN的所有网站。

SELECT * FROM Websites WHERE country='CN';

image.png

WHERE子句中的文本字段和数值字段。

在SQL语句的WHERE子句中,文本字段使用单引号来环绕文本值(大部分数据库系统也接受双引号)。在上个示例中'CN'文本字段使用了单引号。如果是数值字段,请不要使用引号。

执行如下SQL语句,从Websites表中选取id为1的网站。

SELECT * FROM Websites WHERE id=1;

image.png

WHERE子句中的运算符。

下方的运算符可以在WHERE字句中使用。

=          等于
<> 或者!=  不等于
>          大于
<          小于
>=         大于等于
<=         小于等于
BETWEEN    在某个范围内
LIKE       搜索某种模式
IN         指定针对某个列的多个可能值

2.AND和OR运算符

AND和OR运算符用于基于一个以上的条件对记录进行过滤。

如果第一个条件和第二个条件都成立,则AND运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则OR运算符显示一条记录。

AND运算符的示例

执行如下SQL语句,从Websites表中选取国家为CN且rank排名大于50的所有网站。

SELECT * FROM Websites WHERE country='CN'AND rank > 50;

image.png

OR运算符的示例

执行如下SQL语句,从Websites表中选取国家为USA或者CN的所有客户。

SELECT * FROM Websites WHERE country='USA'OR country='CN';

image.png

结合AND和OR运算符的示例

执行如下SQL语句,从Websites表中选取rank排名大于15且国家为CN或USA的所有网站。

SELECT * FROM Websites WHERE rank > 15 AND (country='CN' OR country='USA');

image.png

3.SELECT TOP, LIMIT, ROWNUM子句

SELECT TOP, LIMIT, ROWNUM子句用于规定要返回的记录的数目。其中,SELECT TOP子句适用于SQL Server数据库,SELECT LIMIT子句适用于MySQL数据库,SELECT ROWNUM适用于Oracle。

SELECT LIMIT子句的语法。

SELECT column_name(s)FROM table_nameLIMIT number;

执行如下SQL语句,从Websites表中选取选取头两条记录。

SELECT * FROM Websites LIMIT 2;

image.png

4.LIKE操作符

LIKE操作符用于在WHERE子句中搜索列中的指定模式。

LIKE操作符的语法:

SELECT column_name(s)FROM table_nameWHERE column_name LIKE pattern;

LIKE操作符的示例:

执行如下SQL语句,从Websites表中选取name列以字母G开始的所有网站。

说明:%符号用于在模式的前后定义通配符(缺省字母)。您将在下一步骤中学习更多有关通配符的知识。

SELECT * FROM WebsitesWHERE name LIKE 'G%';

image.png

执行如下SQL语句,从Websites表中选取name列以字母k"结尾的所有网站。

SELECT * FROM WebsitesWHERE name LIKE '%k';

image.png

执行如下SQL语句,从Websites表中选取name列包含模式oo的所有网站。

SELECT * FROM WebsitesWHERE name LIKE '%oo%'

image.png

通过使用NOT关键字,您可以选取不匹配模式的记录。执行如下SQL语句,从Websites表中选取name列不包含模式oo的所有网站。

SELECT * FROM WebsitesWHERE name NOT LIKE '%oo%';

image.png

4.通配符

通配符可用于替代字符串中的任何其他字符。

在SQL中,通配符与SQL LIKE操作符一起使用。SQL通配符用于搜索表中的数据。

%                         替代0个或多个字符
_                         替代一个字符
[charlist]                字符列中的任何单一字符
[^charlist][!charlist]  不在字符列中的任何单一字符

使用%通配符。

执行如下命令,选取url以字母https开始的所有网站。

SELECT * FROM WebsitesWHERE url LIKE 'https%';

image.png

执行如下命令,选取url包含字母oo的所有网站。

SELECT * FROM WebsitesWHERE url LIKE '%oo%';

image.png

使用_通配符。

执行如下命令,选取name以一个任意字符开始,然后是oogle的所有网站。

SELECT * FROM WebsitesWHERE name LIKE '_oogle';

image.png

执行如下命令,选取name以字母G开始,然后是一个任意字符,然后是字母o,然后是一个任意字符,然后是字母le的所有网站。

SELECT * FROM WebsitesWHERE name LIKE 'G_o_le';

image.png

使用[charlist]通配符。说明:MySQL中使用REGEXP或NOT REGEXP运算符(或 RLIKE 和 NOT RLIKE) 来操作正则表达式。

执行如下命令,选取name以G、F或s开始的所有网站。

SELECT * FROM WebsitesWHERE name REGEXP '^[GFs]';

image.png

执行如下命令,选取name不以A到H字母开头的网站。

SELECT * FROM WebsitesWHERE name REGEXP '^[^A-H]';

image.png

5.IN操作符

IN操作符允许您在WHERE子句中规定多个值。

IN操作符的语法:

SELECT column_name(s)FROM table_nameWHERE column_name IN (value1,value2,...);

IN操作符的示例:

执行如下语句,选取name为Google或淘宝的所有网站。

SELECT * FROM WebsitesWHERE name IN ('Google','淘宝');

image.png

6.BETWEEN操作符

BETWEEN操作符选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。

BETWEEN操作符的语法:

SELECT column_name(s)FROM table_nameWHERE column_name BETWEEN value1 AND value2;

BETWEEN操作符的示例。

执行如下语句,选取rank介于1和20之间的所有网站。

SELECT * FROM WebsitesWHERE alexa BETWEEN 1 AND 20;

image.png

NOT BETWEEN操作符实例。

执行如下语句,选取rank不介于1和20之间的所有网站。

SELECT * FROM WebsitesWHERE alexa NOT BETWEEN 1 AND 20;

image.png

带有IN的BETWEEN操作符实例。

执行如下语句,选取rank介于1和20之间但country不为USA所有网站。

SELECT * FROM WebsitesWHERE (rank BETWEEN 1 AND 20)AND NOT country IN ('USA');

image.png

带有文本值的BETWEEN操作符实例。

执行如下语句,选取name以介于A和H之间字母开始的所有网站。

SELECT * FROM WebsitesWHERE name BETWEEN 'A' AND 'H';

image.png

带有文本值的NOT BETWEEN 操作符实例。

执行如下语句,选取name不介于A和H之间字母开始的所有网站。

SELECT * FROM WebsitesWHERE name NOT BETWEEN 'A' AND 'H';

image.png

带有日期值的BETWEEN 操作符实例。

执行如下语句,创建一个网站访问记录表,并插入数据,然后选取date介于2016-05-10'和2016-05-14之间的所有访问记录。

DROP TABLE IF EXISTS `access_log`;
CREATE TABLE `access_log` (  `aid` int(11) NOT NULL AUTO_INCREMENT,  `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '网站id',  `count` int(11) NOT NULL DEFAULT '0' COMMENT '访问次数',  `date` date NOT NULL,  PRIMARY KEY (`aid`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 
INSERT INTO `access_log` VALUES ('1', '1', '45', '2016-05-10'), ('2', '3', '100', '2016-05-13'), ('3', '1', '230', '2016-05-14'), ('4', '2', '10', '2016-05-14'), ('5', '5', '205', '2016-05-14'), ('6', '4', '13', '2016-05-15'), ('7', '3', '220', '2016-05-15'), ('8', '5', '545', '2016-05-16'), ('9', '3', '201', '2016-05-17'); 
SELECT * FROM access_logWHERE date BETWEEN '2016-05-10' AND '2016-05-14';

image.png

7.UNION操作符

UNION操作符合并两个或多个SELECT语句的结果集。

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

UNION操作符的语法:

SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2;

UNION操作符的示例:

执行如下语句,创建一个APP数据表,并插入数据,然后从Websites和apps表中选取所有不同的country(只有不同的值)。

CREATE TABLE `apps` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `app_name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',  `url` varchar(255) NOT NULL DEFAULT '',  `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 
INSERT INTO `apps` VALUES ('1', 'QQ APP', 'http://im.qq.com/', 'CN'), ('2', '微博 APP', 'http://weibo.com/', 'CN'), ('3', '淘宝 APP', 'https://www.taobao.com/', 'CN'); 
SELECT country FROM WebsitesUNIONSELECT country FROM appsORDER BY country;

image.png

UNION ALL的示例:

执行如下语句,从Websites和apps表中选取所有的country(也有重复的值)。

SELECT country FROM WebsitesUNION ALLSELECT country FROM appsORDER BY country;

image.png

带有WHERE的UNION ALL的示例:

执行如下语句,从Websites和apps表中选取所有的CN的数据(也有重复的值)。

SELECT country, name FROM WebsitesWHERE country='CN'UNION ALLSELECT country, app_name FROM appsWHERE country='CN'ORDER BY country;

image.png

相关文章
|
26天前
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
58 6
|
4月前
|
SQL 存储
如何在 SQL Server 中使用 `OUTPUT` 子句
【8月更文挑战第10天】
115 7
如何在 SQL Server 中使用 `OUTPUT` 子句
|
4月前
|
SQL 数据库
|
4月前
|
SQL 数据挖掘 关系型数据库
|
4月前
|
SQL
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
|
5月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
56 1
|
5月前
|
SQL 数据库
SQL LIKE 操作符
【7月更文挑战第12天】SQL LIKE 操作符。
41 14
|
5月前
|
SQL Oracle 关系型数据库
SQL SELECT TOP 子句
【7月更文挑战第12天】SQL SELECT TOP 子句。
47 14
|
5月前
|
SQL 数据库
SQL BETWEEN 操作符
【7月更文挑战第14天】SQL BETWEEN 操作符。
45 10
|
5月前
|
SQL
SQL FULL OUTER JOIN 关键字
【7月更文挑战第17天】SQL FULL OUTER JOIN 关键字。
40 6
下一篇
无影云桌面