一、数据库
1.创建数据库
create database 数据库名;
2.删除数据库
drop database 数据库名;
3.选择数据库
use 数据库名;
二、数据表
1.数据类型
1)数值型
类型 | 用途 |
---|---|
tinyint | 小整数值 |
smallint | 大整数值 |
mediumint | 大整数值 |
int或integer | 大整数值 |
bigint | 极大整数值 |
float | 单精度浮点型 |
double | 双精度浮点型 |
decimal | 小数值 |
2)日期和时间类型
类型 | 用途 |
---|---|
date | 日期值 |
time | 时间值或持续时间 |
year | 年份值 |
datetime | 混合日期和时间值 |
timestamp | 混合日期和时间值,时间戳 |
3)字符串类型
类型 | 用途 |
---|---|
char | 定长字符串 |
varchar | 变长字符串 |
tinyblob | 不超过255个字符的二进制字符串 |
tinytext | 短文本字符串 |
blob | 二进制形式的长文本数据 |
text | 长文本数据 |
mediumblob | 二进制形式的中等长度文本数据 |
mediumtext | 中等长度文本数据 |
longblob | 二进制形式的极大文本数据 |
longtext | 极大文本数据 |
2.创建数据表
create table 数据表名 (列名 列类型 auto_increment primary_key,列名 列类型);
3.删除数据表
drop table 数据表名;
4.数据表操作
1)插入数据
insert into 数据表名 (列1名,列2名,列3名)
values (列1数据,列2数据,列3数据,),(列1数据,列2数据,列3数据),(列1数据,列2数据,列3数据);
2)删除数据
delete from 数据表名 [where 条件]
3)更新数据
update 数据表名 set 列1=新数据,列2=新数据
[where 条件]
4)查询数据
select 查询列1,查询列2
from 表名
[where 查询条件]
[limit 查询条数]
[offset 数据偏移量]
[order 排序方式]
5.单表查询
1)where子句
在where中写入查询的条件,可以使用and
或者or
来连接多个查询条件。
操作符 | 描述 |
---|---|
= | 两边值相等 |
<>,!= | 两边值不相等 |
> | 左边值大于右边值 |
< | 左边值小于右边值 |
>= | 左边值大于等于右边值 |
<= | 左边值小于等于右边值 |
操作实例:查询用户表中名称为“张三”的用户
select * from user where username='张三'
2)like子句
在like子句中使用%
来表示任意字符,如果没有%
,like子句与符号=
的效果是一样的。
操作实例:查询用户表中姓“张”的用户数据
select * from user where username='张%'
3)union 操作符
union操作符用于连接两个select语句的结果,将结果放到一个结果集合中。多个select语句会删除重复的数据。
数据表Websites
id | name | url | alexa | country |
---|---|---|---|---|
1 | https://www.gogole.cm/ | 1 | USA | |
2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
4 | 微博 | http://weibo.com | 20 | CN |
5 | https://www.facebook.com/ | 3 | USA | |
7 | * | http://*.com/ | 0 | IND |
数据表apps
id | app_name | url | country |
---|---|---|---|
1 | QQ_APP | http://im.qq.com/ | CN |
2 | 微博APP | http://weibo.com/ | CN |
3 | 淘宝APP | https://www.taobao.com/ | CN |
union实例:去除重复查询结果
select country from Websites
union
select country from apps
order by country;
查询结果
country |
---|
CN |
IND |
USA |
union all 实例:保留重复查询结果
select country from Websites
union all
select country from apps
order by country;
带有where的union all 实例:选出两张表中为“CN”的数据
select country,name from Websites
where country='CN'
union all
select country,app_name from apps
where country='CN'
order by country;
查询结果
country | name |
---|---|
CN | 淘宝 |
CN | QQ APP |
CN | 菜鸟教程 |
CN | 微博 APP |
CN | 微博 |
CN | 淘宝 APP |
4)order by排序
排序方式有两种asc
和desc
默认排序方式asc
select 列1,列2,列3 from 表1,表2
order by 列1[asc [desc]],[列2,[asc [desc]]]
5)group by分组
select column_name,function(column_name)
from table_name
where coulmn_name operator value
group by column_name;
function:可选count
计数、sum
求和、avg
平均值
数据表employee_tbl
id | name | date | singin |
---|---|---|---|
1 | 小明 | 2021-04-22 | 1 |
2 | 小王 | 2021-04-20 | 3 |
3 | 小丽 | 2021-04-19 | 2 |
4 | 小王 | 2021-04-07 | 4 |
5 | 小明 | 2021-04-11 | 4 |
6 | 小明 | 2021-04-04 | 2 |
执行查询
select name,count(*) from emplpyee_tbl
group by name;
查询结果
name | count(*) |
---|---|
小丽 | 1 |
小明 | 3 |
小王 | 2 |
执行查询
select name,count(singin) as singin_count
from employee_tbl
group by name with rollup;
查询结果
name | singin_count |
---|---|
小丽 | 2 |
小明 | 7 |
小王 | 7 |
NULL | 16 |
6.多表查询
1)join连接的使用
- inner join(内连接,或等值连接):获取里那个表中字段匹配关系的记录。
- left join(左连接):获取左表所有记录,即使右表没有相对应匹配的记录。
- right join(右连接):与left join相反,用于获取右表所有记录,即使左表没有对应匹配的记录
数据表tcount_tb1
runoob_author | runoob_count |
---|---|
菜鸟教程 | 10 |
RUNOOB.COM | 20 |
22 |
数据表runoob_tbl
runoob_id | runoob_title | runoob_author | submission_date |
---|---|---|---|
1 | 学习 PHP | 菜鸟教程 | 2017-04-12 |
2 | 学习 MySQL | 菜鸟教程 | 2017-04-12 |
3 | 学习 Java | RUNOOB.COM | 2015-05-01 |
4 | 学习 Python | RUNOOB.COM | 2016-03-06 |
5 | 学习 C | FK | 2017-04-04 |
执行操作
select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a inner join tcount_tbl b
on a.runoob_author = b.runoob_author;
查询结果
a.runoob_id | a.runoob_author | b.runoob_count |
---|---|---|
1 | 菜鸟教程 | 10 |
2 | 菜鸟教程 | 10 |
3 | RUNOOB.COM | 20 |
4 | RUNOOB.COM | 20 |
以上SQL等价于
select a.runoob_id,a.runoob_author,b.runoob_count
from runoob_tbl a,tcount_tbl b
where a.runoob_author = b.runoob_author;
7.NULL值处理
当比较当前字段是否为NULL时,=
和!=
操作符是无效的,所以我们采用以下方式比较字段是否为NULL。
- is null:当前列的值是否是NULL,运算符返回true
- is not null:当列的值不为NULL,运算符返回true
- <=>:比较操作符(不同于=运算符),当比较的两个值相等或者都为NULL时返回true。
8.正则表达式
MySQL中使用regexp操作符来进行正则表达式匹配
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。 如果设置了RegExp对象的Multline属性,^也匹配’\n’或‘\r’之后的位置。 |
$ | 匹配输入字符串的结束位置。 如果设置了RegExp对象的Multline属性,$也匹配’\n’或‘\r’之前的位置。 |
. | 匹配除’\n’之外的任何单个字符。要匹配包括’\n’在内的任何字符,请使用像’[\n]'的模式 |
[…] | 字符集合。匹配所包含的任意一个字符。例如’[abc]‘可以匹配’plain‘中的’a’。 |
[^…] | 负值字符集合。匹配未包含的任意字符。例如,’[^abc]‘可以匹配‘plain’中的‘p’。 |
p1|p2|p3 | 匹配p1或p2或p3。例如,‘z|food’能匹配’z’或‘food’。’(z|f)ood’则匹配’zood’或‘food’。 |
* | 匹配前面的子表达式零次或多次。例如,zo*能匹配’z’以及’zoo’。*等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,‘zo+‘能匹配‘zo’以及’zoo’,但不能匹配’z’。+等价于{1,}。 |
{n} | n是一个非负整数。匹配确定的n次。例如,'o{2}‘不能匹配’Bob’中的‘o’,但是能匹配’food’中的两个o。 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。 |
实例操作
匹配st开头的所有数据
select name from person_tbl where name regexp '^st'
匹配ok结尾的所有数据
select name from person_tbl where name regexp 'ok$'
查找name字段中以元音字符开头或以’ok’字符串结尾的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';