MySQL从入门到精通二
第1章:MySQL基础
1.1运算符
1.1.1 算术运算符
算术运算符是MySQL中最常用的一类运算符。MySQL支持的算术运算符包括加、减、乘、除、求余。
符号 | 作用 | 符号 | 作用 |
+ | 加法运算 | % | 求余运算 |
- | 减法运算 | DIV | 除法运算 |
* | 乘法运算 | MOD | 求余运算,返回余数 |
/ | 除法运算 |
加(+)、减(-)和乘(*)可以同时运算多个操作数。除号(/)和求余运算符(%)也可以同时计算多个操作数,但不建议使用。DIV和MOD这两个运算符只有两个参数。进行除法和求余的运算时,如果x2参数是0,计算结果将是空值(NULL)。
1.1.2 比较运算符
比较运算符是查询数据时最常用的一类运算符。SELECT语句中的条件语句经常使用比较运算符。比较运算符可以用于判断表中的哪些记录是符合条件的。比较运算符的符号、名称和应用示例如下表所示。
符号 | 名称 | 示例 | 符号 | 名称 | 示例 |
= | 等于 | id=5 | is not null | n/a | id is not null |
> | 大于 | id>5 | between and | n/a | id between 1 and 15 |
< | 小于 | id<5 | in | n/a | id in (3,4,5) |
>= | 大于或等于 | id>=5 | not in | n/a | name not in (shi,li) |
<= | 小于或等于 | id<=5 | like | 匹配模式 | name like ('shi%') |
!=或<> | 不等于 | id!=5 | not like | 匹配模式 | name not like ('shi%') |
is null | n/a | id IS NULL | regexp | 常规表达式 | name 正规表达式 |
下面对几种较常用的比较运算符进行详解
1、运算符"="
"="用来判断数字、字符串和表达式等是否相等。如果相等,返回1;否则,返回0。
在使用运算符"="判断两个字符是否相同时,数据库系统是根据字符的ASCII码进行判断的。如果ASCII码相等,则表示这两个字符相同;如果ASCII码不相等,则表示两个字符不同。切记空值(NULL)不能使用“=”来判断。
2、运算符"<>"和"!="
"<>"和"!="用来判断数字、字符串、表达式是否不相等。如果不相等,则返回1,否则,返回0。这两个符号也不能用来判断空值(NULL)。
3、运算符">"
">"用来判断左边的操作数是否大于右边的操作数。如果大于,返回1;否则,返回0。同样,空值(NULL)不能使用“>”来判断。
4、运算符IS NULL
IS NULL用来判断操作数是否为空值(NULL)。操作数为NULL时,结果返回1;否则,返回0。IS NOT NULL刚好与IS NULL相反。
“=”、“<>”、“!=”、“>”、“>=”、“<”、“<=”等运算符都不能用来判断空值(NULL)。一旦使用,结果就会返回NULL。如果要判断一个值是否为空值,可以使用“<=>”、IS NULL和IS NOT NULL。
5、运算符BETWEEN AND
BETWEEN AND用于判断数据是否在某个取值返回内,其表达式如下。
x1 BETWEEN m AND n
如果x1大于或等于m,且小于或等于n,结果将返回1;否则,将返回0。
6、运算符IN
IN用于判断数据是否在某个集合中,其表达式如下。
x1 IN(值1,值2,值3,...,值n)
如果x1等于值1到值n中的任何一个值,则结果将返回1;否则,结果将返回0。
7、运算符LIKE
LIKE用来匹配字符串,其表达式如下。
x1 LIKE s1
如果x1与字符串s1匹配,结果将返回1;否则,返回0。
8、运算符REGEXP
REGEXP同样用于匹配字符串,但其使用的是正则表达式进行匹配,其表达式如下。
1.1.3 逻辑运算符
逻辑运算符用来判断表达式的真假。如果表达式是真,则结果返回1;如果表达式是假,则结果返回0。逻辑运算符又称为布尔运算符。MySQL中支持4种逻辑运算符,分别是与、或、非和异或。
符号 | 作用 | 符号 | 作用 |
&&或AND | 与 | !或NOT | 非 |
||或OR | 或 | XOR | 异或 |
1、与运算
'&&'或'AND'是与运算的两种表达方式。如果所有数据不为0且不为空值,结果返回1;如果存在任何一个数据为0,则结果返回0;如果存在一个数据为NULL且没有数据为0,则结果返回NULL。与运算符支持多个数据同时进行运算。
2、或运算
“||”或者“OR”表示或运算。如果数据中存在任何一个数据为非0的数字,则结果返回1;如果数据中不包含非0的数字,但包含NULL,则结果返回NULL;如果操作数中有0,则结果返回0。或运算符也可以同时操作多个数据。
3、非运算
“!”或者“NOT”表示非运算。非运算对操作数据进行按位取反,并返回与操作数据相反的操作。如果操作数据是非0数字,则结果返回0;如果操作数据是0,则结果返回1;如果操作数据是NULL,则结果返回NULL。
4、异或运算
XOR表示异或运算。只要其中任何一个操作数据为NULL,结果就返回NULL;如果两个操作数都是非0值,或者都是0,则结果返回0;如果一个为0,另一个为非0值,则结果返回1。
1.1.4 运算符的优先级
由于在实际应用中可能需要同时使用多个运算符,因此必须考虑运算符的运算顺序。
MySQL运算符使用的优先级,按照从高到低、从左到右的级别进行运算操作。
优先级 | 运算符 |
1 | ! |
2 | ~ |
3 | ^ |
4 | *,/,DIV,%,MOD |
5 | +、- |
6 | >>,<< |
7 | & |
8 | | |
9 | =,<=>,<,<=,>,>=,!=,<>,IN,IS,NULL,LIKE,REGERXP |
10 | BETWEEN AND,CASE,WHEN,THEN,ELSE |
11 | NOT |
12 | &&,AND |
13 | ||,OR,XOR |
14 | := |
第2章:表数据的增、删、改操作
2.1.1 使用INSERT...VALUES语句插入数据
INSERT...VALUES语句是INSERT语句最常用的语法格式。使用INSERT语句插入数据,语法格式如下
1、插入一条完整数据
(1) 在编写SQL语句之前,先查看数据表tb_admin的结构,具体代码如下
DESC db_database08.tb_admin;
(2) 编写SQL语句,先选择数据表所在的数据库,然后应用INSERT...VALUES语句实现向数据表td-admin插入一条完整的数据,具体代码如下。
USE db_database08;
INSERT INTO tb_admin VALUES(1,'mr','mrsoft','2014-09-05 10:25:20');
(3) 使用SELECT * FROM tb_admin语句来查看数据表tb_admin中的数据,具体代码如下
SELECT * FROM tb_admin;
2、插入数据记录的一部分
(1) 编写SQL语句,先选择数据表所在的数据库,然后应用INSERT..VALUES语句实现向数据表tb_admin中插入一条记录,只包括user和password字段的值,具体代码如下。
USE db_database08;
INSERT INTO tb_admin(user,password)
VALUES('rjkflm','111');
(2)使用SELECT * FROM tb_admin语句来查看数据表tb_admin中的数据,具体代码如下
SELECT * FROM tb_admin;
因为在设计数据表时,将id字段设置为自动编号,所以即使没有指定id的值,MySQL也会自动为它填上相应的编号。
3、插入多条记录
(1) 编写SQL语句,先选择数据表所在的数据库,然后应用INSERT...VALUES语句来实现向数据表tb_admin中插入3条记录,每条记录都只包括user、password和createtime字段的值,具体代码如下。
USE db_database08;
INSERT INTO tb_admin(user,password,createtime)
VALUES ('mrbccd','111','2014-09-05 10:32:26'),
('mrbccd','111','2014-09-05 10:32:26'),
('mrbccd','111','2014-09-05 10:32:26');
(2) 使用SELECT * FROM tb_admin语句来查看数据表tb_admin中的数据,具体代码如下。
SELECT * FROM tb_admin;
2.1.2 使用INSERT..SET语句插入数据
(1) 编写SQL语句,先选择数据表所在的数据库,然后应用INSERT...SET语句实现向数据表tb_admin中插入一条记录,该条记录中包括user、password和createtime字段的值,具体代码如下。
USE db_database08;
INSERT INTO tb_admin
SET user='mrbccd',password='111',createtime='2014-09-06 10:32:26';
(2) 使用SELECT * FROM tb_admin语句来查看数据表tb_admin中的数据,具体代码如下
SELECT * FROM tb_admin;
2.1.3 使用INSERT...SELECT语句插入查询结果
(1) 查看数据表tb_mrbook的结构
DESC db_database08.tb_mrbook;
(2) 查询数据表tb_mrbook中的数据,具体代码如下
SELECT * FROM tb_mrbook;
(3) 编写SQL语句,实现从数据表tb_mrbook中查询user和pass字段的值,并将其插入数据表tb_admin中,具体代码如下
INSERT INTO db_database08.tb_admin
(user,password)
SELECT user,pass FROM tb_mrbook
(4) 使用SELECT语句来查看数据表tb-admin中的数据,具体代码如下
SELECT * FROM tb_database08.tb_admin;
2.2 修改数据
(1) 编写SQL语句修改用户名为mrbccd的管理员密码为123,具体代码如下
UPDATE db_database08.tb_admin SET password='123' WHERE user='mrbccd';
更新时一定要保证WHERE子句的正确性,一旦WHERE子句出错,就会破坏所有改变的数据。
(2) 查看修改的数据库中的内容,代码如下
SELECT * FROM db_database08.tb-admin WHERE user='mrbccd';
第3章:数据查询
3.1 基本查询语句
SELECT语句基本语法如下
select selection_list
from 数据表名
where primary_constraint
group by sorting_cloumns
order by sorting_cloumns
having secondary_consstraint
limit count