函数

  Mysql的函数特性没有SQL可移植性强。

  大多数情况下支持的函数:

  处理文本串的函数: 

   RTrim():处理列值右边的空格

   LTrim():处理列值左边的空格

     Trim():处理列值的左右两边的空格(中间的不处理)

     Upper():文本转大写

   Length():返回串的长度

   Locate():找出串的一个子串

   Lower():文本转小写

   ...

  算术操作函数:

    包含一些常见的数值处理函数如:

    Abs()取绝对值;

    Mod()返回除操作的余数;

    Pi()返回圆周率;

    Rand();返回一个随机数;

    Exp()返回一个数的指数值;

  处理日期和时间的函数:

    列举常用的几个:

    CurDate() 返回当前日期;

    CurTime()返回当前时间;

    Date()返回日期时间的日期部分

    Date_Format()返回一个格式化的日期或时间

    Time()返回一个日期时间的时间部分

    ...

  •   查询订单表中,发生于2005-09-01日的订单的有关信息:
select  cust_id, order_num from orders
where date(order_date) = '2005-09-01';

  获取系统信息的系统函数:

  暂略

  聚集函数:

    部分对表中数据进行汇总(不对实际数据本身感兴趣)的函数。

    AVG()返回某列的平均值;

    COUNT()返回某列的行数(查询的结果数);

    MAX()返回某列的最大值;

    MIN()返回某列的最小值;

    SUM()返回某列的值的和:

  •   查看产品表所有产品的平均价格:
select avg(prod_price) as avg_price
from products;

  AVG()值为NULL的行会被忽略;

  •   查询在本店由邮箱地址的客户总数。
select count(cust_email) from customers;

  count()同样会忽略NULL值,所以没有统计到没留email的客户;如果要统计所有客户可以使用count(*)

  聚集函数都会忽略NULL值。

  分组

  group by :让查询结果按指定列的值排序并给每个列值分组,聚集函数将会作用于组而不是原来的结果集

  •   查询产品表中,每个供应商提供的产品数:

  

select vend_id, count(*) as num_prod
from products
group by vend_id WITH ROLLUP;

with rollup 将返回每个分组汇总的值,这里得到的所有供应商提供的产品总数。

  •   查询每个顾客下的订单数量,只展示3单以上的顾客

    select cust_id, count(*)
    from customers
    group by cust_id
    having count(*) > 2;

    having 关键字能对分组的结果再进行筛选(可以理解成where再数据分组前筛选,having在数据分组后再次筛选)

  • 查询订单表中表号在20000以后,所有总价大于50的订单,按总价的增序排列:
select order_num, sum(quantity*item_price) as sum_price from orderitems
where order_num > 20000
group by order_num
having sum_price > 50
order by sum_price;

子查询

  嵌套在其他查询中的查询,子查询在性能上并不占优势。

  •   查找购买过TNT2商品的客户:

  1.查询TNT2商品售出记录的订单号

  2.由订单号查询客户id

  3.由客户id查询客户信息

select cust_name, cust_contact
from customers
where cust_id in (select cust_id
from orders
where order_num in (select order_num
from orderitems
where prod_id = 'TNT2'));

联合查询

  内部联合:基于两个表之间的相等测试联结,也叫等值联结。

  •   查看每个供应商提供的产品的价格
select vend_name, prod_name, prod_price
from vendors inner join products
on vendors.vend_id = products.vend_id;

  外部联合,联合时允许保留没有对应关联行的那些行。其中:LEFT|RIGHT OUTER JOIN 保留关键字左|右边的表所有行,另一边的表如果没有匹配到改行对应的行则补上NULL.

  • 检索所有用户,已有订单的检索其订单:
select customers.cust_id, order_num
from customers left outer join orders
on customers.cust_id = orders.cust_id;

组合查询

UNION关键字,UNION ALL 表示不删除两次查询结果中相同的行

【MySQL】-2 函数、分组、子查询、联合查询的更多相关文章

  1. MySQL的查询,子查询,联结查询,联合查询

    MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...

  2. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  3. SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询

    连接查询 inner join,用的最多,表示多张表一一对应 聚合函数 操作行数据,进行合并 sum.avg.count.max.min 开窗函数 将合并的数据分布到原表的每一行,相当于多出来了一列, ...

  4. sql 基础语法3:分组,聚合函数,having,联合查询,快速备份,内联函数

    select * from Classinfo select * from StuInfo select * from CourseInfo select * from ScoreInfo --分组 ...

  5. MySQL数据库8 -子查询,联合查询

    一 使用IN关键字的子查询 问题: 查询游戏类型是'棋牌类' 的游戏的分数信息 - 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以 ...

  6. MySQL数据库 —子查询,联合查询

    一 使用IN关键字的子查询 1.查询游戏类型是'棋牌类' 的游戏的分数信息 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以这一组编 ...

  7. 子查询 & 联合查询

    子查询 嵌套在其他语句内部的select语句称为子查询或内查询,外层的语句可以是insert.update.delete.select等,一般select作为外层语句较多.外面如果为select语句, ...

  8. mysql日期函数及重复数据的查询

    -- 日期函数select CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,year(CURRENT_DATE),month(CURRENT_DATE);sel ...

  9. 180. 连续出现的数字 + MySql + 连续出现数字 + 多表联合查询

    180. 连续出现的数字 LeetCode_MySql_180 题目描述 代码实现 # Write your MySQL query statement below select distinct t ...

  10. 转:EntityFramework查询--联合查询(Join,GroupJoin)

    首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...

随机推荐

  1. mongodb 超出内存限制

    mongodb 查询数据默认占用最大内存为100M,如果查询涉及到大量数据进行$group.$sort时会抛出类似以下的异常: Received error :: { $err: \"Exc ...

  2. 涂抹mysql笔记-数据库中的权限体系

    涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...

  3. sql server 数据库变成单用户模式的恢复

    USE master;GODECLARE @SQL VARCHAR(MAX);SET @SQL=''SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)FROM master. ...

  4. django 补充和中间件

    配置 from django.conf import settings form组件 from django.forms import Formfrom django.forms import fie ...

  5. Android单元测试学习(一)

    什么是单元测试 首先总结一下什么是单元测试,单元测试中的单元在Android或Java中可以理解为某个类中的某一个方法,因此单元测试就是针对Android或Java中某个类中的某一个方法中的逻辑代码进 ...

  6. spring 大会的启示

    1.事件驱动的微服务编程 2.无服务架构的编程模型 3.微服务缓存

  7. 关于如何安装使用Git、tortoiseGit、Git@osc

    摘要: 讲解git在git@osc上使用的正确入门姿势. 关于Git代码托管的好处,这里就不再进行说明了.相信想去使用的人都应该有所了解啦.在使用开源中国里面的git@osc时,我们得先做入下几个工作 ...

  8. LAMP架构

    LAMP(linux,apache,mysql,php)是linux系统下常用的网站架构模型,用来运行PHP网站.(这得apache是httpd服务),这些服务可以安装同意主机上,也可以安装不同主机上 ...

  9. 使用LESS对CSS进行预处理

    LESS 做为 CSS 的一种形式的扩展,它并没有阉割 CSS 的功能,而是在现有的 CSS 语法上,添加了很多额外的功能,所以学习 LESS 是一件轻而易举的事情. 变量 请注意 LESS 中的变量 ...

  10. 深入JVM之类的加载器

    类加载器有两种: —java虚拟机的自带加载器 根类加载器(Bootstrap) 扩展类加载器(Extension) 系统类加载器(AppClassLoder) —自定义的类加载器 java.lang ...