DQL基本查询——INSERT INTO SELECT语句
概述:
- 将一张表的数据导入到另一张表中,可以使用INSERTINTO SELECT语句
格式
insert into 表1(字段1一,字段1二,..)select 字段2一,字段2二 ,…from 表2
或
insert into 表1 select * from 表2
INSERT INTO student1 SELECT*FROM student;
注意:
- 填写字段的话,前后字段数据类型要一一对应
- 要求目标表(表2)必须存在
DQL——正则表达式
概述:
- 正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串
- 在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本
- MySQL通过REGEXP关键字支持正则表达式进行字符串匹配
格式
模式 |
描述 |
^ |
匹配输入字符串的开始位置 |
$ |
匹配输入字符串的结束位置 |
. |
匹配除“n”之外的任何单个字符 |
[…] |
字符集合。匹配所包含的任意一个字符。例如,abc]可以匹配“plain”中的’a’ |
[^…] |
负值字符集合。匹配未包含的任意字符。例如,^abc 可以匹配“plain”中的’p’ |
p1 I p2 I p3 |
匹配 p1或p2或p3。例如,zfood 能匹配”z”或”food”。zlf)ood’ 则匹配zood”或”food” |
贪婪的量词
模式 |
描述 |
* |
匹配前面的子表达式零次或多次。例如,zo* 能匹配“z”以及“zoo”。* 等价于{0,} |
+ |
匹配前面的子表达式一次或多次。例如,’zo+’能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,0} |
{n} |
n是一个非负整数。匹配确定的n次。例如,‘o{2}’不能匹配”Bob”中的‘o’,但是能匹配’food”中的两个o |
{n,m} |
m和n 均为非负整数,其中n |
注意:
- 匹配成功为1,失败为0
- 存在就能匹配,无论在哪个位置,无论被匹配对象有几个字符,只要有一个与匹配规则相符,就是正确
- 如果要把多个字符作为一个整体去配就需要用到括号,不用括号括起来都是用单个字符去匹配
基本展示
SELECT 'abc' REGEXP 'ab+'; -- 1
MySQL约束——零填充约束(zerofill)
概念
- 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
- zerofill默认为int(10)
- 当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,(有符号为
-128~ +127
,无符号为0~256
)
如果我们添加数据:1,查询到的数据样式如下
添加零填充约束:两种方式
①
格式:
CREATE TABLE 表名(
字段名 数据类型 ZEROFILL
);
CREATE TABLE student(
id INT ZEROFILL -- 零填充约束
);
②
格式:
ALTER TABLE 表名 MODIFY 字段名 数据类型 ZEROFILL;
ALTER TABLE student MODIFY id INT ZEROFILL;
删除零填充约束
格式:
ALTER TABLE 表名 MODIFY 字段名 数据类型;
ALTER TABLE student MODIFY id INT;
(zerofill零填充约束,从Mysql 8.0.17开始,官方不推荐这个约束,未来版本可能会删除)
多表操作——子查询关键字
在子查询中,有一些常用的逻辑关键字,这些关键字可以给我们提供更丰富的查询功能,主要关键字如下:
- ALL关键字
- ANY关键字
- SOME关键字
- IN关键字
- EXISTS关键字
ALL关键字
格式:
select …from …where c > all(查询语句)
等价于:
select …from … where c > result1 and c > result2 and c > result3
特点:
- ALL:与子查询返回的所有值比较为true 则返回true
- ALL可以与=、>、>=、结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。
- ALL表示指定列中的值必须要大于子查询集的每一个值,即必须要大于子查询集的最大值;如果是小于号即小于子查询集的最小值。同理可以推出其它的比较运算符的情况。
ANY和SOME关键字
格式:
select …from …whe服务器托管网re c > any(查询语句)
等价于:
select …from … where c > result1 or c > result2 or c > result3
特点:
- ANY:与子查询返回的任何值比较为true 则返回true
- ANY可以与=、>、>=、结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的任何一个数据。
- 表示制定列中的值要大于子查询中的任意一个值,即必须要大于子查询集中的最小值。同理可以推出其它的比较运算符的情况。
- SOME和ANY的作用一样,SOME可以理解为ANY的别名
IN关键字
格式:
select …from …where c in(查询语句)
等价于:
select …from … where c = result1 or c = result2 or c = result3
特点:
- IN关键字,用于判断某个记录的值,是否在指定的集合中
- 在IN关键字前边加上not可以将条件反过来
EXISTS关键字
格式:
select …from …where exists(查询语句)
特点:
- 该子查询如果“有数据结果”(至少返回一行数据), 则该EXISTS() 的结果为“true”,外层查询执行
- 该子查询如果“没有数据结果”(没有任何数据返回),则该EXISTS()的结果为“false”,外层查询不执行
- EXISTS后面的子查询不返回任何实际数据,只返回真或假,当返回真时 where条件成立服务器托管网
(因为exists条件中,对表的查询是一行一行判断的,所以我比较喜欢用嵌套for循环来理解)
注意:EXISTS关键字,比IN关键字的运算效率高,因此,在实际开发中,特别是大数据量时,推荐使用EXISTS关键字。
使用exists进行全表输出,格式:
select * from 表名 where exists(select 1); — 全表输出
select * from 表名 where exists(select * from 表名); — 全表输出
运算符
用处:
- 数据库中的表结构确立后,表中的数据代表的意义就已经确定。通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据。
- 例如,学生表中存在一个birth字段,这个字段表示学生的出生年份。而运用MySQL的算术运算符用当前的年份减学生出生的年份,那么得到的就是这个学生的实际年龄数据。
MySQL支持4种运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
算数运算符
算数运算符 |
说明 |
+ |
加法运算 |
– |
减法运算 |
* |
乘法运算 |
/ 或 DIV |
除法运算,返回尚 |
% 或 MOD |
求余运算,返回余数 |
比较运算符
比较运算符 |
说明 |
= |
等于 |
小于和小于等于 |
|
> 和 >= |
大于和大于等于 |
安全的等于,两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0 |
|
或 != |
不等于 |
IS NULL 或ISNULL |
判断一个值是否为 NULL |
IS NOT NULL |
判断一个值是否不为 NULL |
LEAST |
当有两个或多个参数时,返回最小值 |
GREATEST |
当有两个或多个参数时,返回最大值 |
BETWEEN AND |
判断一个值是否落在两个值之间 |
IN |
判断一个值是IN列表中的任意一个值 |
NOT IN |
判断一个值不是IN列表中的任意一个值 |
LIKE |
通配符匹配 |
REGEXP |
正则表达式匹配 |
逻辑运算符
逻辑运算符 |
说明 |
NOT 或者! |
逻辑非 |
AND 或者 && |
逻辑与 |
OR 或者Il |
逻辑或 |
XOR |
逻辑异或 |
位运算符
位运算符 |
说明 |
I |
按位或 |
& |
按位与 |
^ |
按位异或. |
按位左移 |
|
>> |
按位左移 |
~ |
按位取反,反转所有比特 |
注意:位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算然后再将计算结果从二进制数变回十进制数。
以 | 按位或为例
比如:3|5,我们以二进制的后四位为例,3为0011,5为0101,他们进行相比,只要相同位置上有一个为1,就在 3|5 的相应位置写1,所以 3|5 为 0111=7。(其他的操作差不多,只有 ~:按位取反,反转所有比特 是对一个数进行操作,如:SELECT ~3)
-- 3:0011
-- 5:0101
-- 3|5:0111=7
SELECT 3|5;
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net