从中文语法上来说,应该先写FROM语句比较好理解

基础查询语句

SELECT [DISTINCT] target-list
FROM tables
WHERE qualification
GROUP BY grouping-list
HAVING group-qualification
  • DISTINCT:要求结果没有重复元组

查询过程(不优化,好理解)

  1. 将tables做笛卡尔乘积(FROM)
  2. 根据qualification删除元组(WHERE)
  3. 根据target-list删除的属性(SELECT)
  4. 根据是否DISTINCT删除重复元组
  5. 根据group-list分组(GROUP BY)
  6. 根据group-qu alification删除组(HAVING)

注意:select语句和having语句里的属性只能是group by里属性的子集。例如:group by sex,那么select和having里不能有sname。

定义列别名

SELECT SNAME AS '学生姓名'

范围条件BETWEEN AND

SELECT SNAME FROM S WHERE BIRTHDADY NOT BETWEEN '1996-07-01' AND '1998-06-30'

属于集合条件 IN

SELECT SNAME FROM S WHERE SID IN (SELECT SID FROM S WHERE xxx)

字符匹配

SELECT * FROM S WHERE SNO LIKE 'S_%0'

'-'为通配符,匹配任意一个字符

'%'匹配任意个字符

聚合函数

COUNT(*)
COUNT([DISTINCT] A)
SUM([DISTINCT] A)
AVG([DISTINCT] A)
MAX(A)
MIN(A)

一般group by要和聚合函数一起使用。

CAST表达式

CAST (Expression AS Data type)

例子:

Students (name, school)
Soldiers (name, service) CREATE VIEW PROSPECTS(name, school, service) AS
SELECT name, school, CAST(NULL AS Varchar(20))
UNION
SELECT name, CAST(NULL AS Varchar(20)), service
FROM Soldiers;

有点类似C++里的强制类型转换。

CASE表达式

例子:

Officers (name, status, rank, title)
SELECT name, CASE status
WHEN 1 THEN 'Active Duty'
WHEN 2 THEN 'Reserve'
WHEN 3 THEN 'Special Assignment'
WHEN 4 THEN 'Retired'
ELSE 'Unknown'
END AS tatus
FROM Officers;

给status重命名以便于阅读。

例子:

Machines (id, type, ohurs_used, accidents)
'找到“chain saw”故障时间所占比例'
SELECT sum(CASE
WHEN type='chain saw' THEN accidents
ELSE 0e0
END) / sum(accidents)
FROM Machines;

子查询(嵌套查询)

  • 结果是一个值

    '工作在纽约的部门和这个部门最高工资'
    SELECT d.deptno, d.deptname, (SELECT MAX(salary)
    FROM emp
    WHERE deptno = d.deptno) AS maxpay
    FROM dept AS d
    WHERE d.location = 'New York';
  • 结果是表

    '查询每年新入职员工的平均pay'
    SELECT startyear, avg(pay)
    FROM (SELECT name salary+bonus AS pay,
    year(startdate) AS startyear
    FROM emp) AS emp2
    GROUP BY startyear;
  • 公共表表达式(临时视图)

    防止payroll运算两次。

    '查找总收入最高的部门'
    WITH payroll (depno, totalpay) AS
    (SELECT deptno, sum(salary) + sum(bonus)
    FROM emp
    GROUP BY deptno)
    SELECT deptno
    FROM payroll
    WHERE totalpay = (SELECT max(totalpay)
    FROM payroll)

    实现外连接

    WITH
    '自然连接'
    innerjoin(name, rank, subject, enrollment) AS
    (SELECT t,name, t.rank, c.subject, c.rnrollment
    FROM teachers AS t, course AS c
    WHERE t.name=c.teacher AND c.quarter='FALL 96'),
    '左外连接'
    teacher-only(name, rank) AS
    (SELECT name, rank
    FROM teachers
    EXCEPT ALL
    SELECT name, rank
    FROM innerjoin),
    '右外连接'
    course-only(subject, enrollment) AS
    (SELECT subject, enrollment
    FROM courses
    EXCEPT ALL
    SELECT subject, enrollment
    FROM innerjoin) SELECT name, rank, subject, enrollment
    FROM innerjoin
    UNION ALL
    SELECT name, rank,
    CAST (NULL AS Varchar(20)) AS subject
    CAST (NULL AS Integer) AS enrollment
    FROM teacher-only
    UNION ALL
    SELECT CAST (NULL AS Varchar(20)) AS name,
    CAST (NULL AS Varchar(20)) AS rank,
    subject, enrollment
    FROM course-only;

SQL之QL的更多相关文章

  1. Spark SQL慕课网日志分析(1)--系列软件(单机)安装配置使用

    来源: 慕课网 Spark SQL慕课网日志分析_大数据实战 目标: spark系列软件的伪分布式的安装.配置.编译 spark的使用 系统: mac 10.13.3 /ubuntu 16.06,两个 ...

  2. 《开源大数据分析引擎Impala实战》目录

    当当网图书信息: http://product.dangdang.com/23648533.html <开源大数据分析引擎Impala实战>目录 第1章  Impala概述.安装与配置.. ...

  3. Oracle 单行函数

    一.什么是函数 任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数. 二.单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果.单行函数可以接受一 ...

  4. 《Java程序设计》终极不改版

     半年前的作品,上传只为纪念~ 成绩: ____0.1______ Java程序设计  课程设计 题 目:大学生信息管理系统 学 院:  计算机与软件学院 专 业:     网络工程_____­ .  ...

  5. Spark源码系列:DataFrame repartition、coalesce 对比

    在Spark开发中,有时为了更好的效率,特别是涉及到关联操作的时候,对数据进行重新分区操作可以提高程序运行效率(很多时候效率的提升远远高于重新分区的消耗,所以进行重新分区还是很有价值的).在Spark ...

  6. 20145229吴姗珊《网络对抗》WEB基础实践

    20145229吴姗珊<网络对抗>WEB基础实践 基础与实践 基础问题 1.什么是表单 表单是可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁. 一部分是HTML源代码用于 ...

  7. Hive入门指南

    转自:http://blog.csdn.net/zhoudaxia/article/details/8842576 1.安装与配置 Hive是建立在Hadoop上的数据仓库软件,用于查询和管理存放在分 ...

  8. 日志管理-rsyslog日志服务器及loganalyzer

    一,日志基础 日志:记录时间,地点,任务,事件 格式:日期时间 主机 进程[pid]: 事件内容 rsyslog 特性: 多线程,UDP, TCP, SSL, TLS, RELP,MySQL, PGS ...

  9. 1.windows-oracle实战第一课

    一.oracle是目前最流行的数据库之一,功能强大.性能卓越.学习要有信心.oracle也做软件,不仅仅是数据库.比如ERP(企业资源计划,用友.金蝶) 二.目前的数据库   相对而言:       ...

  10. python编程训练

    1. 反转字符串: 1 #encoding=utf-8 2 #import string 3 from collections import deque 4 5 def reverse1(string ...

随机推荐

  1. TP5发送短信限制

    <?php //发送手机验证码 function smsCode() { //dump($this->request->post()); //请求方式验证 /*if (!$this- ...

  2. P3509 [POI2010] ZAB-Frog 题解

    题目链接:ZAB-Frog 基于一个根据距离第 \(k\) 大的事实: 容易知道,对于红色的点而言,与它相近最近的 \(k\) 个点是连续的.而第 \(k\) 远的要么是最左侧要么是最右侧.而我们注意 ...

  3. 在OpenGL中使用Dear ImGui

    在众多GUI库中,Dear ImGui用起来最简单,它很容易集成到程序中,绘制的窗口看起来也还不错.可以用它画出非常炫酷的GUI界面: 而我则不同:无论使用哪个GUI库,画出来的窗口都惨不忍睹.下面简 ...

  4. 零基础入门Vue之To be or not to be——条件渲染

    温故 上一节:零基础入门Vue之皇帝的新衣--样式绑定 在前面的内容能了解到,Vue不仅仅能进行数据渲染还可以对样式进行绑定 并且他能随意的切换样式,但Vue的初衷就是尽量少让使用者操作dom节点 加 ...

  5. 小知识:杜绝明文密码,OGG的credentialstore特性

    之前OGG配置文件中都会明文记录密码,而在OGG12c及以上版本中,有一个特性credentialstore,可以用来杜绝明文密码,提升安全性. 这里测试添加credentialstore并配置数据库 ...

  6. CF-925(已更新:D-F)

    CF 925 补题ing 待更新 后面打算更新D题和power oj上一道区间合并的题(现在才知道是一道洛谷上的原题--) D 分析 ​ 涉及到关于取模的知识,我们的答案要满足三个条件: ai-aj≡ ...

  7. NC20811 蓝魔法师

    题目链接 题目 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于k,两种方案不同当且仅当存在一 ...

  8. colrm命令

    colrm命令 colrm命令用于编辑源代码文件,脚本文件或常规文本文件中的文本,此命令从文件中删除选定的列,列定义为一行中的单个字符.索引总是从1开始,而不是0.如果同时指定了开始和结束,则它们之间 ...

  9. centos7安装postgresql9.6

    1.安装yum源 yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg- ...

  10. Java并发编程实例--9.使用本地线程变量

    并发程序一个重要方面就是共享数据. 这一点在继承了Thread类或实现了Runnable接口的对象中有着特殊的重要性. 如果你创建了一个实现了Runnable接口的类对象并且用这个对象开启了N个线程对 ...