《MySQL必知必会》读书笔记2

第十章:创建计算字段

  • 拼接字段
    • 拼接函数 Concat()
      • SELECT Concat(name, '(', department, ')') FROM student ORDER BY name;
    • 去掉空格函数 Trim() LTrim() RTrim()
    • 别名 alias
      • SELECT Concat(name, '(', department, ')') AS name_department FROM student ORDER BY name;
  • 执行算术计算
    • 支持加减乘除
      • SELECT name, 2018-birth AS age FROM student ORDER BY age;

第十一章:数据处理函数

大部分SQL提供下面的函数

  • 文本处理函数
    • Left() 返回串左边的字符
    • Length() 返回串的长度
    • Locate() 找出串的一个子串
    • Lower() 转换成小写
    • LTrim() 去掉串左边的空格
    • Right() 返回串右边的字符
    • RTrim() 去掉串右边的字符
    • Soundex() 返回串的Soundex值(根据发音来匹配,中文效果不怎么样)
    • SubString() 返回子串的字符
    • Upper() 转换成大写
  • 日期和时间处理函数
    • AddDate() 增加一个日期
    • AddTime() 增加一个时间
    • CurDate() 返回当前日期
    • CurTime() 返回当前时间
    • Date() 返回日期时间中的日期部分
    • DateDiff() 计算两个日期之差
    • Date_Add() 高度灵活的日期运算函数
    • Date_Format() 返回一个格式化的日期或者时间串
    • Day() 返回一个日期的天数部分
    • DayOfWeek() 返回一个日期对应一周内的第几天(星期天是第1天)
    • Hour() 返回一个时间的小时部分
    • Minute() 返回一个时间的分钟部分
    • Month() 返回一个日期的月份部分
    • Now() 返回当前日期和时间
    • Second() 返回一个时间的秒部分
    • Time() 返回一个日期时间的时间部分
    • Year() 返回一个日期的年份部分
  • 数值处理函数
    • Abs() 返回一个数的绝对值
    • Cos() 返回一个角度的余弦
    • Exp() 返回一个数的指数值
    • Mod() 返回除操作的余数
    • Pi() 返回圆周率
    • Rand() 返回一个随机数
    • Sin() 返回一个角度的正弦
    • Sqrt() 返回一个数的平方根
    • Tan() 返回一个角度的正切

第十二章:汇总函数

  • 聚集函数(不需要实际数据本身,只是汇总信息)

    • 获取行数
    • 求和
    • 最大值、最小值和平均值
    • AVG() 返回某列的平均值
    • COUNT() 返回某列的行数
      • SELECT COUNT(*) FROM student; //不忽略null
      • SELECT COUNT(name) FROM student; //指定列明的话,忽略null
    • MAX() 返回某列的最大值
    • MIN() 返回某列的最小值
    • SUM() 返回某列之和
  • 聚集不同值

    • DISTINCE 排除值相同的行,可以用于上面的5个聚集函数,不过 COUNT(DISTINCE price) 必须指定列名,MAX() 和 MIN() 使用 DISTINCE 没有意义。
  • 组合聚集函数

    • SELECT COUNT(*) AS user_count, MIN(birth) AS birth_old, MAX(birth) AS birth_young, AVG(birth) AS birth_avg FROM student;

第十三章:分组数据

数据分组: 把数据分为多个逻辑组,以便对每个组进行聚集计算

  • 分组 GROUP BY

    • SELECT birth, COUNT(*) AS num FROM student GROUP BY birth; //检索每个出生年份有几人
    • GROUP BY 可以包含多列
    • GROUP BY 可以嵌套分组
    • GROUP BY 必须出现在 WHERE 子句之后, ORDER BY 子句之前
  • 过滤分组 HAVING(HAVING 可以代替 WHERE 子句, WHERE 是对数据分组前进行过滤,HAVING 是对数据进行分组后过滤)

    • SELECT birth FROM student GROUP BY birth HAVING birth > 1990; //查询1990之后哪个年份有人出生
  • 对分组进行排序 GROUP BY + ORDER BY

    • SELECT birth, COUNT(*) AS num FROM student GROUP BY birth ORDER BY birth; //按出生年份分组并升序排序
  • SELECT 子句

    • SELECT 要返回的列或者表达式
    • FROM 从中检索数据的表
    • WHERE 过滤行
    • GROUP BY 分组
    • HAVING 过滤分组
    • ORDER BY 排序
    • LIMIT 要检索的行数

第十四章:使用子查询

  • SQL中所有语句都是查询,一般指的是 SELECT 语句

  • SELECT 语句可以嵌套使用,子查询就是查询嵌套查询

  • 子查询不能嵌套太多,会影响性能

  • 子查询一般跟 IN 操作符配合使用,有时也会跟等于(=)、不等于(<>)配合使用

  • 看一个例子(从3张表中检索数据):

    • 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'));
  • 作为计算列字段使用子查询:

    • 例子:从order表和customer表中查询出每个顾客的订单数):
    • SELECT cust_name,
      cust_state,
      (SELECT COUNT(*) FROM order WHERE order.cust_id=customer.cust_id)
      AS orders FROM customer ORDER BY cust_name;
    • 先从customer表中找出所有顾客,然后用顾客id跟order表中的顾客id匹配,查询出每个顾客的订单数,作为计算字段orders输出。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 表 存储在表中的数据是同一种类型的数据或清单。 数据库中的表有为一个名字来标识自己。 表具有一些特性,这些特性定义...
    蛐蛐囍阅读 1,299评论 0 7
  • 1.表中的任何列都可以作为主键, 只要它满足以下条件:任意两行都不具有相同的主键值;每一行都必须具有一个主键值( ...
    Cherryjs阅读 643评论 0 0
  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 569评论 0 0
  • 第三课: 排序检索数据 distinct关键字:distinct 列名1,列名2,列名3DISTINCT 关键字会...
    VictorBXv阅读 1,463评论 0 8
  • 一、基本概念 数据库、表、列、行、主键、外键、关键字 二、检索 1.检索列 SELECT prod_name(id...
    兀镜晓Jingle阅读 340评论 0 7