SQL- SQL查询检索阶段一
一 说明
如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统;
二 准备前提
需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略;
建表语句:
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表中的数据:
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (1, 'youku1', 18, '大一新生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (2, 'youku2', 23, '毕业生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (3, 'jeff', 25, '社会人士');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (4, 'smile', 17, '高三学子');
三 基本检索
3.1 select 关键字
sql 都是由许多关键字(keyword)组成的语句,关键字是数据库的保留字,用户不能将其当作建表的表名,字段等;表中的数据检索使用select关键字作为开头进行查询数据库表的信息;
3.2 检索单个字段
语句示例:
SELECT name FROM student
查询结果:
youku1
youku2
jeff
smile
语句分析:
select 是 查询 的意思 , name 代表表中的字段 ,from 表示来自哪张表,其后面的student就是表;连起来的意思就是查询字段是name的数据来自表student;
3.3 sql语句注意点
多sql语句一起执行使用封号(;)隔开,在拼写语句时表的关键字都建议使用大写,表的字段和表名使用小写;为了容易阅读建议将sql分成多行(由于文章篇幅原因就不分了);sql语言也是使用英文字母,不要开中文,以免造成符号错误不容易发现;sql语句默认不区分大小写;
3.4 检索多个字段
语句示例:
SELECT name,age FROM student;
语句结果:
youku1 18
youku2 23
jeff 25
smile 17
语句分析:
查询字段 名字,年龄来自表student;多个列检索时使用逗号(,)隔开;
3.5 检索所有字段
语句示例:
SELECT * FROM student;
语句结果:
1 youku1 18 大一新生
2 youku2 23 毕业生
3 jeff 25 社会人士
4 smile 17 高三学子
语句分析:
通配符 (*)表示返回表中的所有列,如果不是必须建议不要使用通配符,会影响数据库性能;
3.6 distinct
distinct 表示区分,意指检索出来的行是唯一(去重),其放在列的最前面;如果使用了关键字distinct,其作用于后面的所有列(由于本示例数据没有重复示例,结果就不是很清晰);
SELECT DISTINCT name, age FROM student;
语句结果:
youku1 18
youku2 23
jeff 25
smile 17
3.7 限制条数
access 和 sql server :
SELECT TOP 2 name FROM student
TOP 2 表示限制返回前2行
postgresql 、SQLite和 mysql:
SELECT name FROM student LIMIT 2;
limit 2 表示限制返回前2行;
DB2:
SELECT name FROM student FETCH FIRST 2 ROWS ONLY
FETCH FIRST 2 ROWS ONLY 表示只抓取前2行数据
语句结果:
youku1
youku2
3.8偏移
示例:
SELECT name FROM student LIMIT 1 OFFSET 1;
语句分析
表示查询列名称来自学生表 限制条数1,偏移值1;意思就是查询学生表中的第二行数据;offset表示跳跃或者偏移;
mysql和MariaDB简化形式:
SELECT name FROM student LIMIT 1,2;
表示查询字段名称来自学生表,限制2条,偏移1条;注意顺序;
语句结果:
youku2
jeff
四 排序检索
4.1 ORDER BY 子句
示例:
SELECT name,age FROM student ORDER BY age
语句分析;
检索字段名称,年龄来自学生表按照列年龄排序;注意默认是升序,ORDER BY 子句通常在语句末尾;
语句结果:
smile 17
youku1 18
youku2 23
jeff 25
4.2 多列排序
示例:
SELECT name,age FROM student ORDER BY age DESC, name ASC;
语句分析:
查询名称,年龄来自学生表,按照年龄降序,名称升序进行排序;关键字 DESC(descending) 意指降序,字母默认Z-A; ASC(ascending)意指升序,字母默认A-Z;多列情况下,每个列后面指定使用DESC,使用逗号(,)隔开,如果不写,默认升序;
语句结果:
jeff 25
youku2 23
youku1 18
smile 17
4.3 按位排序
语句示例:
SELECT name,age FROM student ORDER BY 2 DESC, 1 ASC;
按位指查询字段的位置,2 对应字段age,1对应字段name;结果和4.2一致;
五 过滤检索
sql 语句中过滤条件(filter condition)的关键字是 WHERE,其使用方式是跟在表名之后;
5.1 WHERE语句操作符
根据不同的数据库管理系统,其支持的操作符略有不同,所以下文较多重复意思的操作符,应查阅官方文档说明,哪些操作符是支持使用的数据库管理系统;
| 操作符 | 说明 |
|---|---|
| = | 等于 |
| > | 大于 |
| < | 小于 |
| != | 不等于 |
| <> | 不等于 |
| >= | 大于等于 |
| <= | 小于等于 |
| !< | 不小于 |
| !> | 不大于 |
| BETWEEN | 在中间 |
| IS NULL | 为空 |
5.2 单条件过滤
示例:
SELECT * FROM student WHERE name = 'jeff';
语句分析;
查询所有字段来自学生表 条件是 学生名称是 jeff;注意 非表字段,表名,关键字,使用2个单引号('')括起来,里面存放的是我们输入的数据;
语句结果;
3 jeff 25 社会人士
5.3 多条件过滤
多条件过滤时使用 AND 或者 OR 子句;AND连接表达式表示过滤条件都为真的数据;OR连接表达式表示匹配过滤条件任意一个;
AND示例:
SELECT * FROM student WHERE age >= '18' AND age <= '23';
语句分析:
查询所有字段来自学生表,条件是 学生年龄大于等于18 并且 学生年龄小于 23;
语句结果:
1 youku1 18 大一新生
2 youku2 23 毕业生
OR示例:
SELECT * FROM student WHERE age >= '18' OR age <= '23';
语句分析:
检索所有字段来自学生表,条件是 学生年龄大于等于18,或者学生年龄小于23;
OR 和 AND 示例:
SELECT * FROM student WHERE age >= '18' AND (age <= '23' OR id >=2);
语句分析:
在使用OR 和 AND 的时候应该明确过滤条件,然后使用小括号括起来,由于数据库管理系统是根据顺序执行,如果不使用小括号很容易造成语义错误;查询所有字段来自学生表 过滤条件 年龄大于 18 并且 (年龄小于23 或者 id 大于2)的数据;
5.4 范围查询
示例:
SELECT * FROM student WHERE age BETWEEN '18' And '23';
语句分析
BETWEEN 表示范围查询,查询所有字段来自学生表,过滤条件学生年龄在18至23之间;
语句结果:
1 youku1 18 大一新生
2 youku2 23 毕业生
5.5 空值查询
示例:
SELECT * FROM student WHERE age IS NULL;
语句分析:
查询所有字段来自学生表,过滤条件 学生年龄 为空;数据库表不填充数据默认为空(NULL),当然你也可以给指定类型的列设置默认值;
5.6 IN 操作
示例:
SELECT * FROM student WHERE age IN (18,23,25);
语句分析:
查询所有字段来自学生表 ,过滤条件 年龄 是 18 或者 23 或者 25 ;IN是个范围查询,匹配小括号中指定的任意值,其功能跟OR类似,一个IN 就相当于好多个OR;
语句结果:
1 youku1 18 大一新生
2 youku2 23 毕业生
3 jeff 25 社会人士
5.7 NOT 操作符
示例:
SELECT * FROM student WHERE NOT age='25';
语句分析:
NOT 操作符表是否定;其跟在WHERE后面功能类似<>;
六 通配符检索
6.1 通配符的介绍
通配符是组成匹配模式的特殊字符串;如果有用过正则表达式的同学肯定不陌生,这个与其类似;检索文本的通配符是用在关键词Like 后面;
6.2 通配符 %
示例:
SELECT * FROM student WHERE name LIKE 'you%' ;
语句分析:
查询所有字段来自学生表,过滤条件 名字匹配以you开头的字符串后面匹配任意个任意字符;%通配符代表任意个任意字符串,0也算在内,但不包括null;
语句结果:
1 youku1 18 大一新生
2 youku2 23 毕业生
示例:
SELECT * FROM student WHERE name LIKE '%i%' ;
语句分析:
查询所有列来自学生表,过滤条件学生的名称匹配中间必须出现一次字母i,字母i的前后可以匹配任意个任意字符串;
语句结果;
4 smile 17 高三学子
6.3 通配符 _
通配符 _ 代表匹配一个字符串;在Access数据库中不是 _ 而是 ?;
示例:
SELECT * FROM student WHERE name LIKE 'youku_' ;
语句分析:
查询所有列来自学生表,过滤条件 学生名称 匹配模式 youku 后面一个为任意字符串;
语句结果;
1 youku1 18 大一新生
2 youku2 23 毕业生
6.4 通配符 []
通配符 [] 表示匹配指定一个位置一个字符;其里面可以存放多个字符,关系是or,模式匹配时只占用一个位置,Access,SQL SERVER 支持;
七 字段基本操作
7.1 字段拼接
示例:
SELECT concat('你好啊',name,'327今天心情怎么样') FROM student WHERE id = '1' ;
语句分析:
函数 concat 就是将多个字符子串拼接成一个字符串;不同的数据库管理系统其使用的方式略有差别,应查阅官方文档;
在 mysql 中使用 concat函数;在postgresql中使用 || ; 在 Access和 sql server中使用 +;
语句结果:
你好啊youku1327今天心情怎么样
7.2 去除空白字符串
语句示例:
SELECT RTRIM(' 哥,今天管饱 ') FROM student WHERE id = '1' ;
语句分析:
RTRIM(STR) 函数是去掉右边的字符串;TRIM(STR)是去掉字符串两边的空白字符;LTRIM(STR)是去掉字符串左边的空白字符;
语句结果;
哥,今天管饱
7.3 别名
语句示例:
SELECT name as student_name FROM student WHERE id = '1' ;
语句分析:
别名(alias)是可以给字段,或者表起别名;当多表操作出现重复字段时使用别名是个很好的选择;别名可以使用AS关键字,虽然其是可省略,但平时我们最好加上它增强阅读性;
7.4 计算
| 操作符 | 说明 |
|---|---|
| * | 乘 |
| + | 加 |
| - | 减 |
| / | 除 |
语句示例:
SELECT 2 * 8;
语句结果:
16
八 关于作者

SQL- SQL查询检索阶段一的更多相关文章
- SQL-SQL查询检索阶段二
一 前提准备 先声明一下,下面的库表只是简易的学习示例,不是生产的设计,不要深究,此文我们的目的是学习sql的检索不是库表设计:初学者最好跟着作者的文章一步一步敲一遍,如果没有使用过sql的可以查阅作 ...
- 你真的会玩SQL吗?之逻辑查询处理阶段
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...
- 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- SQL 提高查询效率
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...
- [转]一个用户SQL慢查询分析,原因及优化
来源:http://blog.rds.aliyun.com/2014/05/23/%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7sql%E6%85%A2%E6%9F%A5%E ...
- SQL SERVER 查询性能优化——分析事务与锁(五)
SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...
- SQL复杂查询和视图(2)
分组查询 SQL可以将检索到的元组按某一条件进行分组,分组是属性值相同的为一组 求每个学生的平均成绩 SELECT sn,AVG(score)FROM scGROUP BY sn 先按sn进行分组,即 ...
随机推荐
- Maven 无法下载依赖包的解决方法---三步dao!!!
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/WLCYSYS/p/11932157.html maven 自动下载依赖包出现 ...
- Pycharm报错连接linux服务器报错:Could not verify `ssh-rsa` host key with fingerprint
忘记了截图,后来解决了就懒得再去重新制造错误了.大概记得是通过ssh连接linux时,报错 Could not verify `ssh-rsa` host key with fingerprint . ...
- Session.run() & Tensor.eval()
如果有一个Tensor t,在使用t.eval()时,等价于: tf.get_defaut_session().run(t) t = tf.constant(42.0) sess = tf.Sessi ...
- RPM命令执行失败:bash: rpm: 未找到命令...
出现错误截图如下: 这是由于误操作导致rpm文件缺失导致 将另一台完好的服务器上RPM文件及缺失文件上传至异常服务器上即可修复 异常服务器A:192.168.1.230 完好服务器B: 任意 服务器B ...
- SpringSecurity代码实现JWT接口权限授予与校验
通过笔者前两篇文章的说明,相信大家已经知道JWT是什么,怎么用,该如何结合Spring Security使用.那么本节就用代码来具体的实现一下JWT登录认证及鉴权的流程. 一.环境准备工作 建立Spr ...
- .Net Core使用分布式缓存Redis:基础
一.前言 Redis的介绍网上很多不再赘述.本次环境为net core 2.2,使用的StackExchange.Redis来操作Redis. 二.引用Microsoft.Extensions.Cac ...
- 【数据结构】之队列(C语言描述)
队列(Queue)是编程中最常用的数据结构之一. 队列的特点是“先进先出”,就像食堂排队买饭一样,先来的人排在前面,后来的人排在后面:前面的人先买饭,买完饭后离开这个队列.这就是队列的原理,它可以进行 ...
- 小白的springboot之路(七)、事务支持
0-前言 事务管理对于企业级应用来说必不可少,用来确保数据的完整性和一致性: 1-开启事务 spring boot支持编程式事务和声明式事务,用声明式事务即可: spring boot开启事务非常简单 ...
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
对于区块链的技术发展历史,其实在我的印象中也就对比特币有所了解,也听过什么火币之类的玩意,但是具体是什么.怎么运作的就不清楚了... 这次的内容首先是讲解了区块链的技术演进,一张图一目了然,虽然里面涉 ...
- shell 往文件中添加一列一样的字符串
例如:往文件file.txt中,添加一列字符串"20161020", 用制表符分割 awk '$0=$0"\t20161020"' file.txt