mysql 基础学习

MySQL

1 数据库

2 日期与时间类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kzzLbdG-1622633072792)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1622595975537.png)]

1)year类型:用于表示年份。

  1. 使用4位字符串或数字表示,范围为’1901’—'2155’或1901—2155。例如,输人 ‘2019’或2019插人到数据库中的值均为2019。
  2. 使用两位字符串表示,范围为’00’—‘99’。其中,‘00’—'69’范围的值会被转换为 2000—2069范围的YEAR值,‘70’—'99’范围的值会被转换为1970—1999范围的YEAR 值。例如,输人’19’插人到数据库中的值为2019。
  3. 使用两位数字表示,范围为1—99。其中,1—69范围的值会被转换为2001— 2069范围的YEAR值,70—99范围的值会被转换为1970—1999范围的YEAR值。例 如,输人19插入到数据库中的值为2019。
  4. 请注意:当使用YEAR类型时,一定要区分’0’和0。因为字符串格式的’0’表示的YEAR值是2000而数字格式的0表示的YEAR值是0000。

2)Time类型:

TIME类型用于表示时间值,它的显示形式一般为HH:MM:SS,其中,HH表示小时, MM表示分,SS表示秒。在MySQL中,可以使用以下3种格式指定TIME类型的值。
1、以’D HH:MM:SS’字符串格式表示。其中,D表示日可取0—34之间的值, 插人数据时,小时的值等于(DX24+HH)。例如,输入’2 11:30:50’插人数据库中的日期为59:30:50。
2、以’HHMMSS’字符串格式或者HHMMSS数字格式表示。 例如,输人’115454’或115454,插入数据库中的日期为11:54:54
3、使用CURRENT_TIME或NOW()输人当前系统时间。

3)DateTime类型

DATETIME类型用于表示日期和时间,它的显示形式为’YYYY-MM-DD HH: MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分,SS 表示秒。在MySQL中,可以使用以下4种格式指定DATETIME类型的值。
以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式表示的日期和时间,取值范围为’1000-01-01 00:00:00’—‘9999-12-3 23:59:59’。例如,输人’2019-01-22 09:01:23’或 ‘20140122_0_90123’插人数据库中的 DATETIME 值都为 2019-01-22 09:01:23。
1、以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期和时间,其中YY表示年,取值范围为’00’—‘99’。与DATE类型中的YY相同,‘00’— '69’范围的值会被转换为2000—2069范围的值,‘70’—'99’范围的值会被转换为1970—1999范围的值。
2、以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期 和时间。例如,插入20190122090123或者190122090123,插人数据库中的DATETIME值都 为 2019-01-22 09:01:23。
3、使用NOW来输人当前系统的日期和时间。

4)TimeStamp类型

TIMESTAMP类型用于表示日期和时间,它的显示形式与DATETIME相同但取值范围比DATETIME小。在此,介绍几种TIMESTAMP类型与DATATIME类型不同的形式:
1、使用CURRENT_TIMESTAMP输人系统当前日期和时间。
2、输人NULL时系统会输人系统当前日期和时间。
3、无任何输人时系统会输入系统当前日期和时间。

3 数据库基本操作

1)创建数据库

create database 数据库名称

create database db1 default charset utf8 collate utf8_general_ci; #utf8编码

create database db2 default character set gbk collate gbk_chinese_ci;#gbk编码

2)查询数据库创建信息

SHOW CREATE DATABASE 已存在数据库名

在这里插入图片描述

3)删除数据库

drop database db

  1. 查询所有数据库

show databses
在这里插入图片描述

5)将数据库字符集改为gbk

alter database db character set gbk

  1. 查看当前使用的哪个数据库

select database()

4 数据表的的基本操作

1)创建数据表

create table student(
id int,
name varchar(20),
birthday date    
)
  1. 查看所有数据表
show tables
  1. 查看表的基本信息
show create table student

在这里插入图片描述

5 表的简单查询

1)查询所有字段

select * from student

2)查询指定字段

select sid,sname from student

3)在查询结果中添加常数列

SELECT id,sname,'随便写' FROM student

在这里插入图片描述

  1. 从查询结果中过滤重复数据

在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。

SELECT DISTINCT sname,id,age FROM student

在这里插入图片描述

在这里插入图片描述

5)算术运算符

SELECT id,sname,age+10 FROM student

6 表中插入数据

1)为表中所有字段添加数据

INSERT INTO student VALUES (NULL,'王五',15,NOW(),NULL );

7 表中删除数据

  1. delete from 表[where条件];注意这个删除是删除表中的数据,而drop是删除整张表的数据和结构

如果存在主外键关联的数据,一般建议先删除外键表,再删除主键表

DELETE FROM student where age<15  删除student表中所有年龄小于15的数据

8 表中更新数据

1)

UPDATE emp SET emp_name = '天空' WHERE emp_id=4

9 表的约束条件

1)主键约束

被标识为主键的数据在表中是唯一的且其值不能为空

字段名 数据类型 primary key
create table student(
id int primary key,
name varchar(20)
);
-----------------------
create table student01(
id int
name varchar(20),
primary key(id)
);

2) 非空约束
字段名 数据类型 NOT NULL;
create table student02(
id int
name varchar(20) not null
);

3) 默认值约束
字段名 数据类型 DEFAULT 默认值;
create table student03(
id int,
name varchar(20),
gender varchar(10) default 'male'
);

4) 唯一性约束
字段名 数据类型 UNIQUE;
create table student04(
id int,
name varchar(20) unique
);

5)外键约束
-- 在创建数据表时语法如下:
CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
-- 将创建数据表创号后语法如下:
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);

删除外键
alter table 从表名 drop foreign key 外键名;
alter table class drop foreign key fk_class_studentid;

需要注意的细节问题:

1、从表里的外键通常为主表的主键
2、从表里外键的数据类型必须与主表中主键的数据类型一致
3、主表发生变化时应注意主表与从表的数据一致性问题


10 条件查询

10.0 聚合函数

用来做纵向计算的函数。

在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、 平均值等等。为此,MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。
聚合函数使用规则:
只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在WHERE子句中使用聚合函数是错误的。

10.0.1 count()
统计表中数据的行数或者统计指定列其值不为NULL的数据个数
查询有多少该表中有多少人
MySQL命令:

select count(*) from student;
10.0.2 max()
计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算
查询该学生表中年纪最大的学生
MySQL命令:

select max(age) from student;
10.0.3 min()
计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算
查询该学生表中年纪最小的学生 MySQL命令:

select sname,min(age) from student;
10.0.4 sum()
计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0
查询该学生表中年纪的总和 MySQL命令:

select sum(age) from student;
10.0.5 avg()
计算指定列的平均值,如果指定列类型不是数值类型则计算结果为
查询该学生表中年纪的平均数 MySQL命令:

select avg(age) from student;

10.0.6 其他函数
时间函数
SELECT NOW();
SELECT DAY (NOW());
SELECT DATE (NOW());
SELECT TIME (NOW());
SELECT YEAR (NOW());
SELECT MONTH (NOW());
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();
SELECT CURRENT_TIMESTAMP();
SELECT ADDTIME('14:23:12','01:02:01');
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY);
SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH);
SELECT DATE_SUB(NOW(),INTERVAL 1 DAY);
SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH);
SELECT DATEDIFF('2019-07-22','2019-05-05');

字符串函数
--连接函数
SELECT CONCAT ()
--
SELECT INSTR ();
--统计长度
SELECT LENGTH();

数字函数
-- 绝对值
SELECT ABS(-136);
-- 向下取整
SELECT FLOOR(3.14);
-- 向上取整
SELECT CEILING(3.14);

10.1使用关系运算符查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LW3YKGW-1622633072806)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1622601856817.png)]

10.2 使用in关键字查询

查询sid为S_1002和S_1003的学生信息 MySQL命令

select * from student where sid in ('S_1002','S_1003');
第二种写法
select * from student where sid='S_1002' or sid='S_1003'
10.3 使用between and 关键字查询

查询15到18岁的学生信息 MySQL命令:

select * from student where age between 15 and 18;
第二种写法
select * from student where age>=15 and age<=18;
10.4 使用空值null查询
select * from student where age is null //查询年龄为空的
select * from student where age is not null
10.5 对结果去重复

注意distinct必须放在第一个

select distinct name,id,age from student //输出名字不同的所有学生
10.6 模糊查询

like关键字

通配符:

  1. %:匹配0个或者多个
  2. _:下划线,占位符,占一个位
select * from student where sname like '张%' //查询姓张的同学
select * from student where sname like '%张%'//查询名字包含张的所有同学 

10.7 limit限制查询数量
--查询学生表中年纪最小的3位同学 MySQL命令
select * from student order by age asc limit 3;
--查询第一个到第三个数据
SELECT * FROM employee ORDER BY join_date DESC LIMIT 0,3 //左代表索引,右代表个数,
10.8 group by 分组查询

对结果进行分组,根据列来分组。当同时group by和聚合函数要小心

 SELECT e_id,emplpy_id ,MAX(ept_age) FROM employee GROUP BY e_id

比如这条语句想将部门分组,然后输出每个部门最大工龄人的信息,只能将最大年龄输出,其他的默认输出第一条数据。

10.9 order by结果排序
SELECT * FROM employee ORDER BY salary; 按工资对员工排序,默认从小到大
SELECT * FROM employee ORDER BY salary DESC,从大到小排序

10.10 having 对分组后的结果过滤

11 多表连接

11.1 交叉连接查询

交叉连接的结果是被连接两个表中所有数据的笛卡尔积

select * from t1 cross join t2

11.2 内连接查询

内连接查询只有满足条件的记录才会出现在查询结果。

SELECT 查询字段1,查询字段2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段

11.3 外连接

1)左外连接

以左表为主表,左表数据全部输出,没有对应的从表数据则输出为null

select class.cid,class.cname,student.sname
 from class left outer join student on class.cid=student.classid;

2)右外连接

以右表为主表,右表数据全部输出,没有对应的从表数据则输出为null

select class.cid,class.cname,student.sname 
from class right outer join student on class.cid=student.classid;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值