Mysql基础1

Mysql

一、创建数据库

creat database menagerize;

二、使用数据库

use menagerize

三、创建表

create table pet (name varchar(20),owner varchar(20),species varchar(20),sex char(1),birth date,death date);

四、验证表是否按照预期创建

describe pet

这可能很有趣,表中的名字为最低限度,但是最好不要写年龄age,因为年龄会变化,需要你更新数据,所以设置出生日期最好

在业务数据库上下文可能遇到的问题,在生日当前一周发送祝福。

Mysql的期望日期格式是'YYYY-MM-DD'

名字 所有者 物种 出生 死亡
蓬松 哈罗德 f 1993-02-04
爪子 格温 m 1994-03-17
芭菲 哈罗德 f 1989-05-13
班尼 m 1990-08-27
鲍泽 黛 安 娜 m 1979-08-31 1995-07-29
格温 f 1998-09-11
惠斯勒 格温 1997-12-09
苗条 班尼 m 1996-04-29

五、缺省值

表中的字段可能为空

新建txt文件 pet.txt 数据 空值: \N

将文本文件加载到表中

load data local infile '/path/pet.txt' into table pet;

但是最常用最简单的方法还是insert语句

insert into pet values('Puffball','Diane','hamster','f','1999-03-30',NULL)

六、mysql语句

1、查询

select *from pet

2、修改

update pet set birth='1989-08-09' where name='Bowser'

3、使用and和or作为限定条件

尽管and的优先级高于or,但是同时使用两个运算符,最好使用括号来显式指示应对条件进行分组

select *from pet where (species='cat' and sex='m')
or (species='dog' and sex='f');

4、去重distinct

select distinct owner from prt

5.1、对生日、按照日期进行排序

select name,birth from pet order by birth

5.2、mysql中,排序和其他操作一样不区分大小写,对于除了大小写一样的列,可以强制区分大小写

order by binary col_name

binary强制将后面的字符串转化为二进制字符串

5.3、降序

select name,birth from pet order by birth desc

5.4可以限定第一个条件顺序,第二个条件降序

select name,species,birth from pet order by species,birth desc;

关键字仅适用于紧挨着其前面的列名(),不会影响排序顺序

七、日期

1、mysql封装了当前日期current_date(),或者curdate()然后用时间戳函数可以计算出年龄

select name,birth,current_date(),timestampdiff(year,birth,curdate()) as age from pet

2、MySql 数据库中CURDATE(),CURRENT_DATE(),CURRENT_DATE()+0 三者有什么区别?

CURRDATE() CURRENT_DATE CURRENT_DATE()+0
1999-10-17 1999-10-17 19991017

3、is not null

select name,birth,death,timestampdiff(year,birth,death) as age from pet where death is not null order by age;

4、将月份提取出来

select name,birth,month(birth) from pet
name birth month(birth)
张三 1999-10-17 10

5、查询某一个月的事件

select name,birth from pet where month(birth)=5

6.1、查询下一个月的事件

select name,birth from pet where month(birth)=month(date_add(curdate(),interval 1 month));

6.2也可以使用模函数

select name,birth from pet where month(birth)=mod(month(curdate()),12)+1;

6.3产生错误的无效日期会警告

select '2018-10-32' + INTERVAL 1 day;
show message;

八、空值NULL

在你习惯之前,可能会惊讶,因为这意味着缺少未知值

select 1 is null,1 is not null
1 is null 1 is not null
0 1

<>,!=不等于

<=>严格比较两个NULL值是否相等

九、模式匹配

mysql提供SQL模式匹配,以及一种基于扩展正则表达式模式的匹配模式,类似于Unix实用程序(vi,grep,sed)

1、模糊查询

select *from pet where name like 'b%';

2、_表示单个字符name占了两个字符的数据

select *from pet where name like '__'

3、正则表达式RegExp

3.1查找name中st开头的

select name from pet where name regexp '^st'

3.2查找以ok结尾的

select name from pet where name regexp 'ok$'

3.3查找name中包含'mar'字符串的所有数据

select name from pet where name regexp 'mar'

3.4查找name中以元音字符开头或者ok结尾的

select name from pet where name regexp '[aeiou]|ok$'

3.5

+:前面的字符至少出现一次,

*:前面的字符可以出现0次,1次,多次

?:前面的字符可以出现0次或1次

[]:匹配[]内的所有,[A-Z]:匹配A-Z

[^]:匹配除了[]内的所有

.:匹配除了\n,\r之外的任何单个字符

[\s\S]:匹配所有,\s匹配空白符,包括换行,\S匹配非空白符,不包括换行

\w:匹配字母数字下划线

{n,m}:匹配最少n个,最多m个

*和+是贪婪的,它们会尽可能的匹配多的字符串,后面加?实现非贪婪

例子:匹配

11111111111111111sasfs

里面的所有数据

<.*>

<.*?>匹配的就是

十、计算行数

1、count

select count(*) from pet

这里也可以看出*是匹配所有

count(*)无需匹配整张表

select species,sex,count(*) from pet where species='dog' or species='cat' group by species,sex;

所以想匹配两个以上需要group by

select owner,count(*) from pet group by owner;

使用一下会报错

select owner,count(*) from pet;

2、only full group by模式

set sql_mode='ONLY_FULL_GROUP_BY';
ERROR 1140 (42000): In aggregated query without GROUP BY, expression
#1 of SELECT list contains nonaggregated column 'menagerie.pet.owner';
this is incompatible with sql_mode=only_full_group_by

如果不启用only full group by模式,

SELECT owner, COUNT(*) FROM pet;

不会报错,但是,服务器会自由的从任何值中选择值,查找不准确

十一、使用多个表

1、inner join ,inner可以省略

假如数据库有两张表table1,table2. join找两张表的共同点

select *from table1
author count
拼多多 12
京东 13
淘宝 14
select *from table2
id title author price
1 PHP教材 拼多多 11
2 java教材 京东 21
3 C#教材 淘宝 32
4 Python教材 淘宝 43
select table2.id,table2.author,table1.count from table2 inner join table1 on table2.author=table1.author;

2、left join读取左边的数据,即使右边表没有对应数据

img

3、right join 同理

本文作者:孤沉

本文链接:https://www.cnblogs.com/guchen33/articles/16808465.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   孤沉  阅读(17)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开