2 SQL 查询基础
2 查询基础
2-1 SELECT语句基础
通过SELECT语句查询并选取必要数据的过程称为匹配查询或查询(query)。
子句是SQL语句的组成要素,是以SELECT或者FROM等作为起始的短语。
查询出的列的顺序可以任意指定。查询多列是,需要使用逗号进行分隔排序。查询结果中列的顺序和SELECT子句中的顺序相同。
列的查询 |
-- SELECT <列名>, ...... FROM <表名>; SELECT shohin_id, shohin_mei FROM shohin; |
查询全部的列 |
-- SELECT * FROM <表名>; SELECT * FROM shohin; SELECT shohin_id AS id,shohin_mei AS namae FROM shohin; |
法则2-1 |
星号(*)代表全部列的意思。 |
如果使用星号的话,就无法设定列的显示顺序了。这时就会按照CREATE TABLE语句的定义对列进行排序。
SQL语句可以使用AS关键字为列设定别名。
别名可以使用汉语,使用汉语时需要用双引号(“)括起来。
为列设定别名 |
SELECT shohin_id AS id,shohin_mei AS namae FROM shohin; |
法则2-2 |
设定汉语别名时需要使用双引号(“)括起来。 |
SELECT子句中不仅可以书写列名,还可以书写常数。
常数的查询 |
SELECT '商品' AS mojiretsu, 38 AS kazu, '2009-02-24' AS hizuke, shohin_id, shohin_mei FROM shohin; -- SELECT子句中的第一列“商品”是字符串常数,第二列38是数字常数,第三列“2009-02-24”是日期常数,它们将与shohin_id列和shohin_mei列一起被查询出来。 |
如果想要删除重复行时,可以通过在SELECT子句中使用DISTINCT来实现。
从结果中删除重复行 |
SELECT DISTINCT shohin_bunrui FROM shohin; SELECT DISTINCT shiire_tanka FROM shohin; SELECT DISTINCT shohin_bunrui FROM shohin; SELECT DISTINCT torokubi FROM shohin; SELECT torokubi, shohin_bunrui FROM shohin; SELECT DISTINCT torokubi, shohin_bunrui FROM shohin; |
在使用DISTINCT时,NULL也被视为一类数据。存在多条NULL数据行时,也会结合为一条NULL数据。
法则2-3 |
在SELECT语句中使用DISTINCT可以删除重复行。 |
DISTINCT关键字只能用在第一个列名之前。因此,请注意不能写成torokubi,DISTINCT shohin_bunrui。
SELECT语句通过WHERE子句来指定查询数据的条件。在WHERE子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。执行含有这些条件的SELECT语句,就可以查询出只符合该条件的记录了。
根据WHERE语句来选择记录 |
-- SELECT <列名>, ...... FROM <表名> WHERE <条件表达式>; SELECT shohin_mei, shohin_bunrui FROM shohin WHERE shohin_bunrui = '衣服'; -- 首先通过where子句查询出符合指定条件的记录,然后再选取select语句指定的列 |
SQL中子句的书写顺序是固定的,不能随意更改。WHERE子句必须紧跟在FROM子句之后。书写顺序发生改变的话会造成执行错误。
法则2-4 |
WHERE子句要紧跟在FROM子句之后。 |
MySQL中需要在“--”之后加入半角空格(如果不加的话就不会被认为是注释)。
注释的书写方法 |
一行注释:书写在“—”之后,只能写在同一行。 多行注释:书写在“/*”和“*/”之间,可以跨多行。 |
法则2-5 |
注释是sql语句中用来标识说明或者注意事项的部分,分为1行注释和多行注释两种。 |
2-2 算术运算符和比较运算符
SQL语句中可以使用计算机表达式。
算术运算符 |
SELECT shohin_mei, hanbai_tanka, hanbai_tanka * 2 AS "hanbai_tanka_x2" FROM shohin; |
运算就是这样以行为单位执行的。
所有包含NULL的计算(+ - * /),结果肯定是NULL。
通常情况下,类似5/0这样除数为0的话会发生错误,只有NULL除以0时不会发生错误,并且结果还是NULL。
SQL语句中可以使用的四则运算的主要运算符 :
加法运算(减法、乘法、除法) : + - * /
四则运算所使用的运算符(+ - * /)称为算术运算符。运算符就是使用其两边的值进行四则运算或者字符串拼接、数值大小比较等运算,并返回结果的符合。
只包含SELECT子句的SELECT语句:
SELECT (100+200)*3 AS keisan;(此处说明FROM子句也不一定是必要的)
法则2-6 |
SELECT子句中可以使用常数或者表达式。 |
像符号 = 这样用来比较其两边的列或者值的符号称为比较运算符。符号 = 就是比较运算符。
比较运算符 |
SELECT shohin_mei, shohin_bunrui FROM shohin WHERE hanbai_tanka <> 500; SELECT shohin_mei, shohin_bunrui FROM shohin WHERE hanbai_tanka >= 1000; SELECT shohin_mei, shohin_bunrui FROM shohin WHERE torokubi < '2009-09-27'; -- 使用比较运算符对计算结果进行比较 SELECT shohin_mei, hanbai_tanka, shiire_tanka FROM shohin WHERE hanbai_tanka - shiire_tanka >= 500; |
比较运算符 :相等(=)、不相等(<>)、大于等于(>=)、大于(>)、小于等于(<=)、小于(<)
这些比较运算符可以对字符、数字和日期几乎所有数据类型的列和值进行比较。
一定要注意不等号(<>)和等号(=)的位置不能颠倒。一定要让不等号在左,等号在右。
法则2-7 |
使用比较运算符是一定要注意不等号和等号的位置。 |
对字符串使用不等号时的注意事项 |
-- DDL 创建表 CREATE TABLE chars ( chr CHAR(3) NOT NULL, PRIMARY KEY (chr) ); START TRANSACTION; INSERT INTO chars VALUES ('1'); INSERT INTO chars VALUES ('2'); INSERT INTO chars VALUES ('3'); INSERT INTO chars VALUES ('10'); INSERT INTO chars VALUES ('11'); INSERT INTO chars VALUES ('222'); COMMIT; SELECT chr FROM chars WHERE chr > '2'; 输出:3 22 /* 现在,chr列被定为字符串类型,并且在对字符串类型的数据进行大小比较时,使用的是和数字比较不同的规则。典型的规则就是按照字典顺序进行比较,也就是像姓名那样,按照条目在字典中出现的顺序来进行排序。该规则最重要的一点就是,以相同字符开头的单词比不同字符开头的单词更相近。 char类型排序 1 10 11 2 22 3 数据 1 1-1 1-2 1-3 2 2-1 2-2 3 数据排序 */ |
法则2-8 |
字符串类型的数据原则上按照字典顺序进行排序。不能与数字的大写顺序混淆。 |
对比较运算符来说还有一点十分重要。那就是,作为查询条件的列中含有NULL的情况。
即使使用 <> 运算符也还是无法选取出NULL的记录。因此,SQL提供了专门用来判断是否为NULL的运算符IS NULL;反之,希望选取不是NULL的记录时,需要使用IS NOT NULL运算符。
不能对NULL使用比较运算符 |
SELECT shohin_mei, shiire_tanka FROM shohin WHERE shiire_tanka IS NULL; SELECT shohin_mei, shiire_tanka FROM shohin WHERE shiire_tanka IS NOT NULL; |
法则2-9 |
希望选区NULL记录时,需要在条件表达式中使用IS NULL运算符。 希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL。 |
2-3 逻辑运算符
NOT不能单独使用,必须和其他查询条件组合起来使用。
NOT运算符 |
SELECT shohin_mei, shohin_bunrui, hanbai_tanka FROM shohin WHERE hanbai_tanka >= 1000; SELECT shohin_mei, shohin_bunrui, hanbai_tanka FROM shohin WHERE hanbai_tanka < 1000; SELECT shohin_mei, shohin_bunrui, hanbai_tanka FROM shohin WHERE NOT hanbai_tanka >= 1000; |
通过以上的例子大家可以发现,不使用NOT运算符也可以编写出效果相同的查询条件。不仅如此,不使用NOT运算符的查询条件更容易让人理解。建议不用滥用。
法则2-10 |
NOT运算符用来否定某一条件,但是不能滥用。 |
在WHERE子句中使用AND运算符或者OR运算符,可以对多个查询条件进行组合。
And运算符在其两侧的查询条件都成立时整个查询条件才成立,其意思相当于并且。
Or运算符在其两侧的查询条件有一个成立时整个查询条件都成立,其意思相当于或者。
AND运算符和OR运算符 |
-- 文氏图 图解工作效果图 SELECT shohin_mei, shiire_tanka FROM shohin WHERE shohin_bunrui = '厨房用具' AND hanbai_tanka >= 3000; SELECT shohin_mei, shiire_tanka FROM shohin WHERE shohin_bunrui = '厨房用具' OR hanbai_tanka >= 3000; |
法则2-11 |
多个查询条件进行组合时,需要使用AND运算符或者OR运算符。 |
法则2-12 |
文氏图很方便。 |
通过括号进行强化 |
SELECT shohin_mei, shohin_bunrui, torokubi FROM shohin WHERE shohin_bunrui = '办公用品' AND torokubi = '2009-09-11' OR torokubi = '2009-09-20'; /* 分析:and运算优先于or运算执行 【shohin_bunrui = '办公用品' AND torokubi = '2009-09-11'】 OR 【torokubi = '2009-09-20'】 也就是; "商品种类是办公用品,并且登记日期是2009-09-11" 或者 "登记日期是2009-09-20" */ SELECT shohin_mei, shohin_bunrui, torokubi FROM shohin WHERE shohin_bunrui = '办公用品' AND ( torokubi = '2009-09-11' OR torokubi = '2009-09-20' ); |
法则2-13 |
And运算符的优先级高于OR运算符,想要优先执行OR运算符时可以使用括号。 |
法则2-14 |
通过创建真值表,无论多复杂的条件,都会更容易理解。 |
真值就是值为真(TRUE)或假(FALSE)其中之一的值。
含有NULL时的真值,既不是真也不是假,这时真值是除真假之外的第三种值—不确定(UNKNOWN)。与通常的逻辑运算被称为二值逻辑相对,只有SQL中的逻辑运算被称为三值逻辑。
2 SQL 查询基础的更多相关文章
- SQl查询基础
SQL语言是一门简单易学却又功能强大的语言,他让你快速上手并写出比较复杂的查询语句,但对于大多数开发者来书,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会是在写一些特定的查询语句 ...
- (25)ASP.NET Core EF查询(复杂查询运算符、原生SQL查询、异步查询)
1.复杂查询运算符 在生产场景中,我们经常用到LINQ运算符进行查询获取数据,现在我们就来了解下生产场景经常出现几种复杂查询运算符. 1.1联接(INNER JOIN) 借助LINQ Join运算符, ...
- EF core的原生SQL查询以及用EF core进行分页查询遇到的问题
在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异. 在EF6中我们用SqlQuery和Exe ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- SQL server基础知识(表操作、数据约束、多表链接查询)
SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- SQL高级查询基础
1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...
- MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行
最近在学习林晓斌(丁奇)老师的<MySQL实战45讲>,受益匪浅,做一些笔记整理一下,帮助学习.如果有小伙伴感兴趣的话推荐原版课程,很不错. 1) --基础架构,一条SQL查询语句如何执行 ...
随机推荐
- bzoj 4184: shallot【线性基+时间线段树】
学到了线段树新姿势! 先离线读入,根据时间建一棵线段树,每个节点上开一个vector存这个区间内存在的数(使用map来记录每个数出现的一段时间),然后在线段树上dfs,到叶子节点就计算答案. 注意!! ...
- Eclipse 最新版2018-09安装Maven教程
其实在写这篇教程之前,花了不少时间来学习安装Maven.不是链接打不开,要么就是提供的方法不适合我这个版本,当然了,既然你能看到这篇教程说明我已经找到了正确方法. 打开Eclipse-Help-> ...
- linux下tab键在命令行情况下的强大
tab自动补全命令,包括可以补全比较长的文件名,速度快的不是一点点
- CMake学习笔记二:cmake 常用变量和常用环境变量
1 cmake 变量引用的方式 使用 ${} 进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过 ${} 取值. 2 cmake 自定义变量的方式 主要有隐式定义和显式定义两种,举一个隐式定 ...
- ROS学习笔记六:xxx.launch文件详解
每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令.当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦.那么有没有一种方式可以一次性启动所有节点呢?答案当然是肯 ...
- NOIP-2018
时隔一年,再度踏入NOIp的考场,内心感慨万分 Day0 在中巴上昏睡了3h++,终于到了长沙理工大学,国际学术交流中心......不太对,好像是国际交流中心与综合实验楼连线--理工大学的另一个大门外 ...
- Android推送服务(2)微信智能心跳方案
http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207243549&idx=1&sn=4ebe4beb8123f1b5 ...
- 数据流和ByteArray
问题:如何把一个long类型的数写进一个文件里 所以现在有DataInputStream和DataOutputStream 这两个是节点流 例子代码: import java.io.*; public ...
- gulp构建工具学习汇总
前端脚手架____gulp配置文件------- https://pan.baidu.com/s/1eSs7COy 1:有了package.json 直接 npm install自动下载相应的npm包 ...
- javaScript关闭浏览器 (不弹出提示框)
一段JavaScript脚本程序,负责关闭窗口,如果网页不是通过脚本程序打开的(window.open()),调用window.close()脚本关闭窗口前,必须先将window.opener对象置为 ...