SQL笔记-第四章,数据的检索
一.select的简单用法
1.简单的数据检索
SELECT * FROM T_Employee;
2.检索出需要的列
SELECT FNumber,FName,FAge FROM T_Employee
3.列别名
SELECT FNumber AS Number1,FName AS Name,FAge AS Age,FSalary AS Salary FROM T_Employee
4.按条件过滤
SELECT FName FROM T_Employee WHERE FSalary<5000
SELECT * FROM T_Employee WHERE FSalary<5000 OR FAge>25
5.数据汇总
SELECT MAX(FSalary) FROM T_Employee WHERE FAge>25
SELECT MAX(FSalary) as MAX_SALARY FROM T_Employee WHERE FAge>25
SELECT AVG(FAge) FROM T_Employee WHERE FSalary>3800
SELECT SUM(FSalary) FROM T_Employee
SELECT MIN(FSalary),MAX(FSalary) FROM T_Employee
SELECT COUNT(*),COUNT(FNumber) FROM T_Employee; (区别是*把空值也统计了)
6.排序
SELECT * FROM T_Employee ORDER BY FAge ASC (升序,降序是DESC)
二.高级数据过滤
1 通配符过滤
单字符匹配
以任意字符开头,剩余部分为“erry”。
SELECT * FROM T_Employee WHERE FName LIKE ‘_erry’
多字符匹配
以“T”开头长度,长度任意。
SELECT * FROM T_Employee WHERE FName LIKE ‘T%’
包含字母“n”。
SELECT * FROM T_Employee WHERE FName LIKE ‘%n%’
集合匹配
集合匹配只在MSSQLServer 上提供支持,在MYSQL、Oracle、DB2 等数据库中不支持,必须采用变通的手段来实现。
2 空值检测
错误:SELECT * FROM T_Employee WHERE FNAME=null
正确:SELECT * FROM T_Employee WHERE FNAME IS NULL
SELECT * FROM T_Employee WHERE FNAME IS NOT NULL
3反义运算符
SELECT * FROM T_Employee WHERE FAge!=22 AND FSALARY!<2000; (只有MS,DB2支持)
SELECT * FROM T_Employee WHERE NOT(FAge=22) AND NOT(FSALARY<2000)
4.多值检测
SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge=23 OR FAge=25 OR FAge=28
5.范围值检测
SELECT * FROM T_Employee WHERE FAGE IN(23,24,25,26,27)
SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE <=27
SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27
SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 AND 3000) OR (FSalary BETWEEN 5000 AND 8000)
三.数据分组
1.数据分组入门
SELECT FAge FROM T_Employee GROUP BY FAge
SELECT FAge FROM T_Employee WHERE FSubCompany = ‘Beijing’ GROUP BY FAg
SELECT FSubCompany,FDepartment FROM T_Employee GROUP BY FSubCompany,FDepartment
2.数据分组与聚合函数
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge
SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge
SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge ORDER BY FSubCompany
SELECT FDepartment,SUM(FSalary) AS FSalarySUM FROM T_Employee GROUP BY FDepartment
SELECT FDepartment,MIN(FAge) AS FAgeMIN,MAX(FAge) AS FAgeMAX FROM T_Employee GROUP BY FDepartment
3.HAVING 语句
错误:SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge WHERE COUNT(*)>1 因为聚合函数不能在WHERE语句中使用
正确 :SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*)>1
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*) =1 OR COUNT(*) =3
SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*) IN (1,3)
注意:在HAVING语句中不能包含未分组的列名
错误:SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING FName IS NOT NULL
正确 : SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee WHERE FName IS NOT NULL GROUP BY FAge
四. 限制结果集行数
mysql:
SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5
oracle,DB2:
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) row_num,
FNumber,FName,FSalary,FAge FROM T_Employee
) a
WHERE a.row_num>=3 AND a.row_num<=5
DB2:
SELECT * FROM T_Employee ORDER BY FSalary Desc FETCH FIRST 6 ROWS ONLY
五.抑制数据重复
SELECT DISTINCT FDepartment FROM T_Employee
SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee (组合不重复)
六.计算字段
1.常量字段
在数据库中不存在,只是会显示出来
SELECT ‘CowNew 集团’ AS CompanyName,918000000 AS RegAmount,FName,FAge,FSubCompany FROM T_Employee
2.字段间计算
SELECT FNumber,FName,FAge * FSalary AS FSalaryIndex FROM T_Employee
SELECT * FROM T_Employee WHERE FSalary/(FAge-21)>1000
3.数据处理函数
LENGTH(FName):取得字符串长度
SUBSTRING(FName,2,3):取FName中第2第3个字符
SIN(FAge):正弦
…
4.字符串的拼接
mysql:
SELECT CONCAT(‘工号为:’,FNumber,’的员工的幸福指数:’,FSalary/(FAge-21)) FROM T_Employee
SELECT CONCAT_WS(‘,’,FNumber,FAge,FDepartment,FSalary) FROM T_Employee (第一个参数是分隔符)
oracle:
SELECT ‘工号为’||FNumber||’的员工姓名为’||FName FROM T_Employee WHERE FName IS NOT NULL
SELECT CONCAT(‘工号:’,FNumber) FROM T_Employee (只支持两个参数,支持类型转换)
DB2:
用||
CONCAT (只支持两个参数,不支持类型转换)
5.计算字段的其他用途
计算处于合理工资范围内的员工
SELECT * FROM T_Employee WHERE Fsalary BETWEEN Fage*1.5+2000 AND Fage*1.8+5000
查询“工资年龄指数”
SELECT MAX(FSalary/FAge) AS MAXVALUE,MIN(FSalary/FAge) AS MINVALUE FROM T_Employee
年龄全部加1
UPDATE T_Employee SET FAge=FAge+1
七.不从实体表中取的数据
SELECT DISTINCT 1 FROM T_Employee
SELECT 1,2,3,’a',’b',’c’
八.联合结果集
SELECT FNumber,FName,FAge FROM T_Employee
UNION
SELECT FIdCardNumber,FName,FAge FROM T_TempEmployee
一是每个结果集必须有相同的列数
二是每个结果集的列必须类型相容
SELECT FName,FAge FROM T_Employee
UNION ALL
SELECT FName,FAge FROM T_TempEmployee
九.联合结果集应用举例
员工年龄报表
SELECT ‘正式员工最高年龄’,MAX(FAge) FROM T_Employee
UNION
SELECT ‘正式员工最低年龄’,MIN(FAge) FROM T_Employee
UNION
SELECT ‘临时工最高年龄’,MAX(FAge) FROM T_TempEmployee
UNION
SELECT ‘临时工最低年龄’,MIN(FAge) FROM T_TempEmployee
正式员工工资报表
SELECT FNumber,FSalary FROM T_Employee
UNION
SELECT ‘工资合计’,SUM(FSalary) FROM T_Employee
列出员工姓名
SELECT FName FROM T_Employee
UNION
SELECT FName FROM T_TempEmployee
分别列出正式员工和临时工的姓名
SELECT ‘以下是正式员工的姓名’
UNION ALL
SELECT FName FROM T_Employee
UNION ALL
SELECT ‘以下是临时工的姓名’
UNION ALL
SELECT FName FROM T_TempEmployee
SQL笔记-第四章,数据的检索的更多相关文章
- 【数据分析 R语言实战】学习笔记 第四章 数据的图形描述
4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图 ...
- 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度
<Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...
- 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度
20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...
- 《Linux内核分析》读书笔记(四章)
<Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...
- Android群英传笔记——第四章:ListView使用技巧
Android群英传笔记--第四章:ListView使用技巧 最近也是比较迷茫,但是有一点点还是要坚持的,就是学习了,最近离职了,今天也是继续温习第四章ListView,也拖了其实也挺久的了,list ...
- Laxcus大数据管理系统2.0(6)- 第四章 数据计算
第四章 数据计算 Laxcus所有数据计算工作都是通过网络实施.相较于集中计算,在网络间进行的数据计算更适合处理那些数据量大.复杂的.耗时长的计算任务.能够实施网络计算的前提是数据可以被分割,就是把一 ...
- 4 Visual Effects 视觉效果 读书笔记 第四章
4 Visual Effects 视觉效果 读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...
- 鸟哥的Linux私房菜笔记第四章
前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...
- 《Linux内核设计与实现》读书笔记——第四章
标签(空格分隔): 20135321余佳源 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. ...
随机推荐
- 【Selenium2+Python】常用操作
Webdriver中比较常用的操作元素的方法: clear() 清除输入框的默认内容 send_keys("xxx") 在一个输入框里输入xx内容 ——如果输入中文,则 ...
- UVA 208 (DFS)
题意:找出1到T的所有路径: 坑点:一开始以为是到终点,读错了题意,没测试第二个样例,结果WA了4遍,坑大了: #include <iostream> #include <cmath ...
- Unity Sprite切割导出
这次需要将美术提供的Sprite图集切割导出,整体思路依然和上次的Sprite转prefab一致,只是在转prefab的逻辑修改为了创建Texture的逻辑. 过程很简单,直接看最终代码结果: usi ...
- Caffe 源碼閱讀(三) caffe.cpp
补:主要函数运行顺序: main>>GetBrewFunction>>train>>Solve 從main函數說起: 1.gflags庫中爲main函數設置usag ...
- USB协议-USB的描述符及其之间的关系
USB只是一个总线,只提供一个数据通路而已.USB总线驱动程序并不知道一个设备具体如何操作,有哪些行为.具体的一个设备实现什么功能,要由设备自己来决定.那么,USB主机是如何知道一个设备的功能以及行为 ...
- iOS开发中检测版本,有新版本则更新
iOS程序自动提示更新的实现方案大致分为两种: 第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 . 第二种,就是利用苹果的appstore 提供的相关ap ...
- Ubuntu下安装配置JDK 7
第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...
- web安全之http协议
http协议 全称是超文本传输协议,是web的核心传输机制,也是服务端和客户端之间交换url的首选协议. url url全称是统一资源定器(统一资源标识符) 顾名思义 每一条格式正确且规范,但url都 ...
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
基类和派生类的定义以及虚函数 基类Quote的定义: classs Quote { public: Quote() = default; Quote(cosnt std::string& bo ...
- 2015.12.29~2015.12.30真题回顾!-- HTML5学堂
2015.12.29~2015.12.30真题回顾!-- HTML5学堂 吃饭,能够解决饥饿,提供身体运作机能.练习就像吃饭,强壮自己,提升编程技能,寻求编程技巧的最佳捷径!吃饭不能停,练习同样不能停 ...