一.《MySQL必知必会》笔记(每天3:00更新,周末除外)

第二章:MySQL简介

  1. 为了给出用户名、主机名、端口和口令,应该使用
    mysql -u ben -p -h myserver -P 9999

  2. 帮助

  • 命令输入在mysql>之后;
  • 命令用; 或 \g结束,换句话说,仅按Enter不执行命令;
  • 输入help 或 \h获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入help select获得使用SELECT语句的帮助);
  • 输入quit 或 exit退出命令行实用程序。

第三章:使用MySQL

  1. 为了连接到MySQL,需要以下信息:
  • 主机名(计算机名)——如果连接到本地MySQL服务器,为localhost ;
  • 端口(如果使用默认端口3306之外的端口);
  • 一个合法的用户名;
  • 用户口令(如果需要)。
  1. 选择数据库
    例如,为了使用crashcourse数据库,应该输入以下内容:
  • 输入 USE crashcourse;
  • 输出 Database changed
  1. 了解数据库和表
    数据库、表、列、用户、权限等的信息被存储在数据库和表中(MySQL使用MySQL来存储这些信息)。不过,内部的表一般不直接访问。可用MySQL的SHOW命令来显示这些信息(MySQL从内部表中提取这些信息)。请看下面的例子:

常用命令解析:

  • 输入 SHOW TABLES; 展示多个数据表
  • 输入 SHOW COLUMNS FROM table_name; SHOW也可以用来显示表列:
  • DESCRIBE table_name
  • DESCRIBE table_name 是 SHOW COLUMNS FROM table_name;的一种快捷方式。
  • SHOW STATUS,用于显示广泛的服务器状态信息;
  • SHOW CREATE DATA BASE 和 SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
  • SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;
  • SHOW ERRORS 和 SHOW WARNINGS,用来显示服务器错误或警告消息。
  1. 小结
    如何连接和登录MySQL,
    使用USE选择数据库,
    使用SHOW查看MySQL数据库、表和内部信息。

第4章 检索数据

  1. SELECT 语句
    SELECT COLUMN_1, COLUMN_2 FROM TABLE_NAME;
    SELECT * FROM TABLE_NAME;
  2. 检索不同的行
    解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值。
    SELECT DISTINCT COLUMN_1, COLUMN_2 FROM TABLE_NAME;
  3. 限制结果
    SELECT COLUMN_1 FROM TABLE_NAME LIMIT 5;
  4. 使用完全限定的表名
    -- 限定表名的字段
    SELECT products.prod_name FROM products;
    -- 限定数据库的表
    SELECT products.prod_name FROM crashcourse.products;
  5. 小结
    本章学习了如何使用SQL的SELECT语句来检索单个表列、多个表列以及所有表列。

第5章 排序检索数据

  1. ORDER BY 语句
    SELECT prod_name FROM products ORDER BY prod_name;
  2. 按多个列名排序
    SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
  3. 指定排序方向 (ORDER BY COLUMN_NAME ASC|DESC)
    数据排序不限于升序排序(从A 到 Z)。这只是默认的排序顺序,还可以使用ORDER BY子句以降序(从Z 到 A)顺序排序。为了进行降序排序,必须指定DESC关键字。
    SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;

注意:ORDER BY子句的位置 在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息。

  1. 小结 本章学习了如何用SELECT语句的ORDER BY子句对检索出的数据进行排序。这个子句必须是SELECT语句中的最后一条子句。可根据需要,利用它在一个或多个列上对数据进行排序。

第6章 过滤数据 (WHERE)

= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于 BETWEEN 在指定的两个值之间
IS NULL 检测空值

第7章 数据过滤

  1. 组合WHERE字句

  2. AND
    SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;

  3. OR
    SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003;

  4. IN
    SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;

  5. NOT
    WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
    MySQL中的NOT MySQL支持使用NOT 对 IN 、 BETWEEN 和 EXISTS 子句取反,这与多数其他 DBMS允许使用NOT对各种条件取反有很大的差别。

  6. 小结
    本章讲授如何用AND 和 OR操作符组合成WHERE子句,而且还讲授了如何明确地管理计算的次序,如何使用IN 和 NOT操作符。

第8章 用通配符进行过滤

  1. 模糊匹配LIKE
    最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。
    注意:区分大小写 根据MySQL的配置方式,搜索可以是区分大小写的。

  2. 下划线()通配符
    另一个有用的通配符是下划线(
    )。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

  3. 使用通配符的技巧
    正如所见,MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。这里给出一些使用通配符要记住的技巧。

  4. 小结
    本章介绍了什么是通配符以及如何在WHERE子句中使用SQL通配符,并且还说明了通配符应该细心使用,不要过度使用。

第9章 用正则表达式进行搜索

  1. 基本字符匹配
    检索prod_name包含文本1000的所有行
    例子:
    select prod_name from products where prod_name regexp '1000' order by prod_name;
    select prod_name from products where prod_name regexp '[123] Ton' order by prod_name;
    特殊字符必须以 \ 为前导,\- 表示查找 -,\. 表示查找 .
    \f 换页
    \n 换行
    \r 回车
    \t 制表
    \v 纵向制表
    image
    image
  2. 小结
    本章介绍了正则表达式的基础知识,学习了如何在MySQL的SELECT语句中通过REGEXP关键字使用它们。

第10章 创建计算字段

  1. 拼接 Concat
    SELECT Concat(vend_name, ' (', vend_country, ')') FROM vendors ORDER BY vend_name;
  2. RTrim,LTrim,Trim清除空格
    SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;
    3.小结
    计算字段在串拼接和算术计算的用途。

第11章 使用数据处理函数

  1. 字符串
    |-- 函 数 --|-- 说 明
    Upper()函数
    Left() 返回串左边的字符
    Length() 返回串的长度
    Locate() 找出串的一个子串
    Lower() 将串转换为小写
    LTrim() 去掉串左边的空格
    Right() 返回串右边的字符
    RTrim() 去掉串右边的空格
    Soundex() 返回串的SOUNDEX 值
    SubString() 返回子串的字符
    Upper() 将串转换为大写
  2. 某些常用的日期和时间处理函数。
    函 数 说 明
    AddDate() 增加一个日期(天、周等)
    AddTime() 增加一个时间(时、分等)
    CurDate() 返回当前日期
    CurTime() 返回当前时间
    Date() 返回日期时间的日期部分
    DateDiff() 计算两个日期之差
    Date_Add() 高度灵活的日期运算函数
    Date_Format() 返回一个格式化的日期或时间串
    Day() 返回一个日期的天数部分
    DayOfWeek() 对于一个日期,返回对应的星期几
    Hour() 返回一个时间的小时部分
    Minute() 返回一个时间的分钟部分
    Month() 返回一个日期的月份部分
    Now() 返回当前日期和时间
    Second() 返回一个时间的秒部分
    Time() 返回一个日期时间的时间部分
    Year() 返回一个日期的年份部分
  3. 数值处理函数
    函 数 说 明
    Abs() 返回一个数的绝对值
    Cos() 返回一个角度的余弦
    Exp() 返回一个数的指数值
    Mod() 返回除操作的余数
    Pi() 返回圆周率
    Rand() 返回一个随机数
    Sin() 返回一个角度的正弦
    Sqrt() 返回一个数的平方根
    Tan() 返回一个角度的正切

第12章 汇总数据

  1. 聚集函数
    函 数 说 明
    AVG() 返回某列的平均值
    COUNT() 返回某列的行数
    MAX() 返回某列的最大值
    MIN() 返回某列的最小值
    SUM() 返回某列值之和
  2. 组合聚集函数
    SELECT COUNT(*) AS num_items,
    MIN(prod_price) AS price_min,
    MAX(prod_price) AS price_max,
    AVG(prod_price) AS price_avg
    FROM products;

第13章 分组数据

  1. 创建分组 GROUP BY
    SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
  2. 过滤分组 HAVING
    SELECT cust_id, COUNT() AS orders FROM orders GROUP BY cust_id HAVING COUNT() >= 2;

注意: 那么,不使用WHERE使用什么呢?MySQL为此目的提供了另外的子句,那就是HAVING子句。HAVING非常类似于WHERE。事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。

HAVING 和 WHERE的差别 这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。
那么,有没有在一条语句中同时使用WHERE 和 HAVING子句的需要呢?事实上,确实有。假如想进一步过滤上面的语句,使它返回过去12个月内具有两个以上订单的顾客。为达到这一点,可增加一条WHERE子句,过滤出过去12个月内下过的订单。然后再增加HAVING子句过滤出具有两个以上订单的分组。

SELECT vend_id, COUNT() AS num_prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT() >= 2;
3. 分组和排序
不要忘记ORDER BY 一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。
4. selsect 字句顺序
select
from
where
group by
having
order by
limit

第14章 使用子查询

select column_a from a where id in (select column_b from b)

第15章 联结表 (join)

  1. 内部联结
    SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products  ON vendors.vend_id = products.vend_id;

第16章 创建高级联结

  1. 使用表别名
    SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;
  2. 使用不同类型的联结
    内部联结或等值联结(equijoin)的简单联结。现在来看3种其他联结,它们分别是自联结、自然联结和外部联结。

SELECT customers.cust_name,        customers.cust_id,        COUNT(orders.order_num) AS num_ord FROM customers LEFT OUTER JOIN orders  ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;

posted @ 2022-03-11 14:54  呱呱二号  阅读(76)  评论(0编辑  收藏  举报