《MySQL必知必会》阅读笔记(1~11章)

SHOW语句

显示表列:
    SHOW COLUMNS FROM customers;
    它对每个字段返回一行,行中包含字段名、数据类型、是狗允许NULL、键信息、默认值以及其他信息。
    ps:mysql支持DESCRIBE作为 的一种快捷方式。(DESCRIBE customers;)

所支持的其他SHOW语句:
    SHOW STATUS,用于显示广泛的服务器状态信息;
    SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
    SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;
    SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。

SELECT语句

检索单个列:
    SELECT pord_name FROM products;
检索多个列:
    SELECT prod_id,prod_name,prod_price FROM products;
检索所有列:
    SELECT * FROM products;
检索不同的行:
    SELECT DISTINCT vend_id FROM products;
    DISTINCT告诉MySQL只返回唯一的vend_id行。如果使用DISTINCT关键字,它必须直接放在列名的前面。
    DISTINCT关键字应用与所有列而不仅是前置它的列。
限制结果:
    SELECT prod_name FROM products LIMIT 5;
    为了返回第一行或前几行数据,可使用LIMIT子句。此句为返回前5行数据。
    同时可指定要检索的开始行和行数,如下:
    SELECT prod_name FROM products LIMIT 5,5;
    此句为返回第六到第十条数据。
    ps:检索出来的第一行为0而不是1。
使用完全限定的表名:
    SELECT product.prod_name FROM products;

ps:关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。
为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出的数据进行排序。

按列排序:
    SELECT prod_name FROM products ORDER BY prod_name;
    ps:通常,ORDER BY子句中使用的列是为显示的列。但是用为检索的列排序是完全合法的。
按多个列排序:
    SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;

指定排序方向:
    默认排序为升序排序,可指定DESC关键字为降序。
    SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;
    ps:DESC关键字只应用到直接位于启前面的列名。

最大最小值:
    使用OREDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。
    SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;

WHERE子句

	 数据库一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报表的需要提取表数据的子集。
只检索所需数据需要指定搜索条件,搜索条件也称为过滤条件。
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表明(FROM子句)之后给出。
    SELECT prod_name ,prod_price FROM products WHERE prod_price = 2.50;
    这个例子用了简单的相等测试,它检查一个列是否具有指定的值,据此进行过滤。
    ps:数据也可在应用层进行过滤。通常,这种实现并不令人满意。因此,对数据库进行了优化,以便快捷有效地对数据进行过滤。让客户机应用(或开发语言)处理数据库的工作将会极大的影响应用的性能,影响用户体验。此外,如果在客户机上过滤数据,服务器不得不通过网络发送多余的数据,这将导致网络宽带的浪费。

    WHERE子句的位置:在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。

WHERE子句操作符

操作符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
BETWEEN在指定的两个值之间
例子:
   SELECT prod_name,prod_price FROM products WHERE prod_name = 'fuses';
  SELECT prod_name,prod_price FROM products WHERE prod_price <=10;    

ps:单引号用来限定字符串,如果将值与串类型的列进行比较,则需要限定引号。

范围值检查:
    为了检查某个范围的值,可使用BETWEEN操作符。
    SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
空值检查:
    NULL 无值,它与字段包含0、空字符串或仅仅包含空格不同。
    SELECT prod_name FROM products WHERE prod_price IS NULL;

NULL与不匹配:
在通过过滤选择出不具有特定值的行时,不会返回具有NULL值的行。因为未知具有特殊含义,数据库不知道它们是否匹配,所以不返回他们。

组合 WHERE子句

AND操作符:
    SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price<=10;
    AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。
OR操作符:
    SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003;
    OR WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。

计算次序:WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。
SQL像多数语言一样,在处理OR操作符qian,优先处理AND操作符。可用圆括号明确地分组相应的操作符。

IN操作符:
    SELECT prod_name,prod_price FROM products WHERE vend_id IN(1002,1003) ORDER BY prod_name;
    IN WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。

为什么要使用IN操作符?

  • 在使用长的合法选项清单时,IN操作符的语法更清楚且直观。

  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)

  • IN操作符一般比OR操作符清单执行更快。

  • IN最大的优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

    NOT操作符:
    WHERE子句中用来否定后跟条件的关键字。

LIKE操作符

通配符:用来匹配值的一部分的特殊字符。为在搜索子句中使用通配符,必须使用LIKE操作符。
LIKE指示MySQL利用通配符匹配而不是直接相等匹配进行比较。
通配符含义
%表示任何字符出现任意次数
_匹配任意单个字符

通配符许多时候是很有用的。但是通配符搜索的处理一般比其他搜索所花时间更长。

  • 不要过度使用通配符。如果其他操作符也能达到同样目的,应该使用其他操作符。

  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。十分影响效率。

    SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘_ ton anvil’;
    PS: 通配符不会匹配到NULL

正则表达式

正则表达式是用来匹配文本的特殊的串。
SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name; 

REGEXP:它告诉MySQL,REGEXP后所跟的东西作为正则表达式。

MySQL中的正则表达式匹配不区分大小写。为区分大小写,可使用BINARY关键字。

进行OR匹配:为搜索两个串之一,使用|字符。
    SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

匹配几个字符之一:
    SELECT prod_name FROM products WHERE prod_name REGEXP '[123] ton' ORDER BY prod_name;
    这里的正则表达式[123]的意思是匹配1或2或3。所以总体来说就是匹配1 ton或2 ton或3 ton。
    [123]即为[1|2|3]的缩写。
    字符集也可被否定。需要通过^来完成。[^123]表示匹配除这些字符外的任何东西。

匹配特殊字符:为了匹配特殊字符,必须使用\\为前导。\\-表示-,\\.表示.。

计算字段

拼接字段:
    将值链接到一起构成单个值。在MySQL的SELCT语句中,可使用Concat()函数来拼接两个列。
    SELECT Concat(vend_name,' (',vend_country,')') FROM vendors ORDER BY vend_name;
删除空格:删除数据右侧多余空格,使用MySQL的RTrim()函数来完成:
    SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') FROM vendors ORDER BY vend_name;

    ps:使用Concat()可以很好的拼接字段,但是拼接的字段并不像本身存在的列一样有专属的名字,如果传给客户机则让客户机程序无法引用,SQL使用别名来解决上述问题。
别名:
    别名使用AS关键字赋予。
    SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title FROM vendors ORDER BY vend_name;
算术计算:
    SELECT prod_id,quantity,item_price,quantity*item_price AS expande_price FROM orderitems WHERE order_num = 20005;
    结果显示的expande_price列是quantity*item_price计算结果的别名字段。
    MySQL支持基本的"+,-,*,/"算术操作符。

数据处理函数

SQL支持利用函数来处理数据。

文本处理函数:

函数说明
Left()返回串左边的字符
Length()返回串的长度
Locate()找出串的一个子串
Lower()将串转换为小写
LTrim()去掉串左边的空格
Right()返回串右边的字符
RTrim()去掉串右边的字符
Soundex()返回串的SOUNDEX值
SubString()返回子串的字符
Upper()将串转为大写

例:SELECT vend_name,Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;

ps:Soundex()考虑了类似的发音字符和音节,是的能对串进行发音比较而不是字母比较。
例:SELECT cust_name,cust_contact FROM customers WHERE Soundex(cust_contace) = Soundex(‘Y Lie’);

日期和时间处理函数:

函数说明
AddDate()增加一个日期(天,周等)
AddTime()增加一个时间(时,分等)
CurDate()返回当前日期
CurTime()返回当前时间
Date()返回日期时间的日期部分
DateDiff()计算两个日期之差
Date_Add()高度灵活的日期运算函数
Date_Format()返回一个格式化的日期或时间串
Day()返回一个日期的天数部分
DatOfWeek()对于一个日期,返回对应的星期几
Hour()返回一个时间的小时部分
Minute()返回一个时间的分钟部分
Month()返回一个日期的月份部分
Now()返回当前日期和时间
Second()返回一个时间的秒部分
Time()返回一个日期时间的时间部分
Year()返回一个日期的年份部分

在WHERE匹配中,如果只想与数据库内数据比较日期的话,需要先使用Date()函数将数据库内日期时间转为日期再比较,就算相应的列只含日期,使用Date()函数依然是个好习惯。
SELECT cust_id,order_num FROM orders WHERE Date(order_date) = ‘2005-09-01’;

匹配一段日期范围内的数据:
    SELECT cust_id,order_num FROM orders WHERE Year(order_date) = 2005 AND Mounth(order_date) = 9;

数值处理函数:

函数说明
Abs()返回一个数的绝对值
Cos()返回一个角度的余弦
Exp()返回一个书的指数值
Mod()返回除操作的余数
Pi()返回圆周率
Rand()返回一个随机数
Sin()返回一个角度的正弦
Sqrt()返回一个数的平方根
Tan()返回一个角度的正切
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值