本文介绍的select高级应用主要包括:联合查询、分组查询、嵌套查询和限定查询数目等,与实例对照演示,所使用数据库为sqlite3。

部门表(dept)

CREATE TABLE dept(
id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL);
INSERT INTO dept(id,name) VALUES(11,'tech');
INSERT INTO dept(id,name)VALUES(22,'finace');
INSERT INTO dept(id,name) VALUES(33,'hr');

部门表的内容如下:

id

name

11

tech

22

finace

33

hr

雇员表(employee)

CREATE TABLE employee (
id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
dept_id INT NOT NULL);
INSERT INTO employee (id,name,dept_id)VALUES(1,'ame',11);
INSERT INTO employee (id,name,dept_id)VALUES(2,'beck',11);
INSERT INTO employee (id,name,dept_id)VALUES(3,'beck',11);
INSERT INTO employee (id,name,dept_id)VALUES(4,'mike',11);
INSERT INTO employee (id,name,dept_id)VALUES(5,'john',22);
INSERT INTO employee (id,name,dept_id)VALUES(6,'stan',22);
INSERT INTO employee (id,name,dept_id)VALUES(7,'lily',22);
INSERT INTO employee (id,name,dept_id)VALUES(8,'lory',33);
INSERT INTO employee (id,name,dept_id)VALUES(9,'koby',33);

雇员表的内容如下:

id

name

dept_id

1

ame

11

2

beck

11

3

star

11

4

mike

11

5

john

22

6

stan

22

7

lily

22

8

lory

33

9

koby

33

1、联合查询:JOIN

查询得到每个雇员id、雇员姓名以及其所在部门名称。

SELECT e.id,e.name,d.name FROM employee e INNER JOIN dept d ON e.dept_id = d.id;

2、分组查询:GROUP BY

查询各部门的id以及员工人数。

SELECT dept_id,COUNT(*) emp_count FROM employee GROUP BY dept_id;

3、嵌套查询:FROM/IN/EXISTS

查询各部门的id、名称以及员工人数,这里将SELECT子句的查询结果和数据表dept内连接后,用作FROM的数据子集。

SELECT d.id,d.name,e_cnt.how_many num_employee FROM dept d INNER JOIN
(SELECT dept_id,COUNT(*) how_many FROM employee e GROUP BY dept_id) e_cnt
ON d.id = e_cnt.dept_id;

另外查询子句还可与IN/EXISTS等配合使用。

IN关键字用于where子句中用来判断查询的表达式是否在多个值的列表中;示例中选出hr部门对应的员工及dept_id。

SELECT name,dept_id FROM employee WHERE dept_id IN (SELECT id FROM dept where name='hr');

EXISTS是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True;示例中SELECT 1就有结果返回。

SELECT name,dept_id FROM employee EXISTS(SELECT 1);

4、限定查询数目:LIMIT

只想查询人数最多的部门id及员工人数,可以用limit1,表示只取第1条记录。

SELECT dept_id,COUNT(*) emp_count FROM employee
GROUP BY dept_id order by emp_count desc limit 1;

以上所有语句均在sqlite3中实操并确认有效,有兴趣的朋友也可以实践下。

select语句的高级应用及实例的更多相关文章

  1. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

  2. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  3. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  4. Mybatis如何执行Select语句,你真的知道吗?

    持续原创输出,点击上方蓝字关注我吧 作者:不才陈某 博客:https://chenjiabing666.github.io 前言 本篇文章是Myabtis源码分析的第三篇,前两篇分别介绍了Mybati ...

  5. SQL SELECT 语句

      本章讲解 SELECT 和 SELECT * 语句. SQL SELECT 语句 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). SQL SELECT 语法 SE ...

  6. sql子查询 嵌套SELECT语句

    嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...

  7. SQLite使用教程9 Select 语句

    http://www.runoob.com/sqlite/sqlite-select.html SQLite Select 语句 SQLite 的 SELECT 语句用于从 SQLite 数据库表中获 ...

  8. SQLite Select 语句(http://www.w3cschool.cc/sqlite/sqlite-select.html)

    SQLite Select 语句 SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据.这些结果表也被称为结果集. 语法 SQLite 的 SELECT ...

  9. MySql:SELECT 语句(三) WHERE 指定查询条件

    1.WHERE 子句条件操作符 包括:> .<.>=.<=.!= .=.BETWEEN ... AND ...(在指定的两个值之间) 示例: 1)select * from s ...

随机推荐

  1. Leetcode笔记(整理中.......)

    1.树的层序遍历 使用两个List 数组 或者 两个queue队列,交替进行,将遍历到的一层放在第一个里面,之后再将遍历到的第二层放在第二个里面. 2.将一个无符号整数的二进制表示形式逆向输出 需要将 ...

  2. Mybatis中int insertSelective()的相关问题

    1.selective的意思是:选择性2.insertSelective--选择性保存数据:比如User里面有三个字段:id,name,age,password但是我只设置了一个字段:User u=n ...

  3. Spring boot(三)在Spring boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  4. springboot使用redis的配置application.yml连接池以及存取

    第一步:添加pom文件依赖: <!-- redis --> <dependency> <groupId>redis.clients</groupId> ...

  5. array 数组去重 过滤空值等方法

    去重操作 第一种方式, ES 6 引入的新书据结构 Set 本身就是没有重复数据的, 可以使用这个数据结构来转化数组.时间复杂度 O(n) 123456 const target = [];const ...

  6. hdu-6434-欧拉函数

    Problem I. Count Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  7. Leetcode 1005. K 次取反后最大化的数组和

    1005. K 次取反后最大化的数组和  显示英文描述 我的提交返回竞赛   用户通过次数377 用户尝试次数413 通过次数385 提交次数986 题目难度Easy 给定一个整数数组 A,我们只能用 ...

  8. 集成学习一: Bagging

    目录 偏倚与方差 Bagging 自助采样 投票 随机森林 参考文献: ''团结就是力量'' 对问题进行建模时, 算法无论如何优化都无法达到我们的要求,又或者精准算法的实现或调优成本太大, 这时,我们 ...

  9. 剑指 offer 面试题31 连续子数组的最大和(动态规划)

    求连续子数组的最大和 题目描述 给定一个整形数组,有正数也有负数,数组中连续一个或多个组成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n); 测试用例 给定数组 {1,-2,3,10,- ...

  10. Node.js是用来干嘛的

    如果你去年注意过技术方面的新闻,我敢说你至少看到node.js不下一两次.那么问题来了“node.js是什么?”.有些人没准会告诉你“这是一种通过JavaScript语言开发web服务端的东西”.如果 ...