mysql基础学习(二)

数据库

概述:数据库是数据的仓库

与普通的数据仓库不同的是,数据库依据数据结构来组织数据,因为数据结构的存在,所以看到的数据时条理化的

数据库和普通文件系统的区别在与:数据库拥有数据结构,能都快速查找对应的数据

常说的XX数据库,其实就是XX数据库管理系统:数据库管理系统是一个软件,是数据库服务的体现

根据数据结构的不同,数据库分为关系型数据库和非关系型数据库

数据库分为关系型数据库和非关系型数据库

  • 关系型数据库

依据关系模型创建数据库,关系模型就是一对一,一对多,多对多等关系模型,关系模型就是存储格式是以行列组成的二维表格,所以一个关系型数据库就是由二维表之间的联系所组成的一个数据组织

关系型数据库可以很好的存储一些关系模型的数据,比如老师对应学生的数据(“多对多”),一本书对应多个作者(“一对多”),一个人对应一个身份证号码(“一对一”)

  • 非关系型数据库

由于关系型太大和复杂,所以一般使用“非关系型数据”来表示其他类型的数据库

非关系型的模型比如:

列模型:存储的数据是一列一列,关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录

键值对模型:存储的数据是一个个键值对,比如name:lisi

文档类模型:以一个个文档来存储数据,类似于键值对

SQL分类

  • DDL

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表、视图、索引等

  • DML

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

如 update, insert, delete

  • DCL

数据控制语言 – Data Control Language

指用于设置用户权限和控制事务语句

如grant,revoke,if…else,while,begin transaction

  • DQL

数据查询语言 – Data Query Language

mysql基础语句

创建数据库:

        CREATE DATABASE [IF NOT EXISTS] db_name

显示数据库语句:

        SHOW DATABASES

显示数据库创建语句:

        SHOW CREATE DATABASE db_name

数据库删除语句:

        DROP DATABASE [IF EXISTS] db_name

切换数据库:

        use db_name;

查看当前使用的数据库

        select database();

mysql中不允许修改数据库名!

MySQL数据类型

mysql支持所有标准SQL数值数据类型

TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL

字符串类型 主要是:varchar和char

创建一张表 

create table if not exists test(

id int not null AUTO_INCREMENT,

name varchar(255) not null,

age int, sex varchar(10),

clazz varchar(255) not null,

PRIMARY KEY(id))engine=InnoDB default charset=utf8;

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据表时如果输入该字段的数据为NULL ,就会报错。

AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

ENGINE 设置存储引擎,CHARSET 设置编码。

-- 添加列

alter table student

add job varchar(255) DEFAULT "没有工作";

-- 查看表结构

desc student;

-- 删除

alter table student drop clazz;

-- 表的修改,不能作添加

alter table student MODIFY age VARCHAR(255);

desc student;

alter table student MODIFY age int(10);

-- 修改表的字段名称

alter table student change age gender VARCHAR(255);

alter table student change gender age INT(11);

-- 添加数据insert

-- 格式:insert into 表名(字段1,字段2...字段n) values(值1,值2..值n),values(值1,值2..值n)

insert into student (name,age,sex) VALUES('zs',80,'男'),('ls',28,'男'),

('zs',80,'男'),('ls',28,'男'),('zs',80,'男'),('ls',28,'男'),

('zs',80,'男'),('ls',28,'男'),('zs',80,'男'),('ls',28,'男'),

('zs',80,'男'),('ls',28,'男');

-- 查询语句

select id,name,age,sex,job from student;

select * from student;

-- where子句用于筛选过滤

-- select 字段 from 表名 where ;

select * from student WHERE name='ls';

select * from student WHERE name='zs';

-- between ...and... 显示在某一区间的值,范围之间

select * from student where age BETWEEN 18 and 30;

-- in(set) 显示在in列表中的值,例:in(100,200),两个值之间

select * from student where age in(18,25);

-- like '张_' 模糊查询 使用% 和 _

SELECT * from student WHERE name like 'l_';

-- Is null 判断是否为空

SELECT * from student where age is not null;

SELECT * from student where age is null;

-- and 多个条件同时成立

select *from student where age=28 and name ='ls';

-- or 多个条件任一成立

-- not 不成立,例:where not(expection>10000);

select * from student where not(age<38);

-- limit 分页

-- limit 开始查询位置,查询的数量;

select * from student limit 5,5;

-- update DELETE 删除

-- 格式:delete student where;

DELETE from student;

select * from student;

delete from student where name='ww';

-- update 修改

-- 格式:update 表名 set 字段1=xx,字段2=xx...字段3=xx;

update student set sex='女' WHERE name='zs';

-- order by 排序默认是升序asc可以不写,降序是desc

select *from student order by age asc;

-- 年龄最大的前两个

select *from student ORDER BY age desc limit 0,2;

-- from select order by limit 执行顺序

SELECT * from student;

-- DISTINCT 字段1.字段2

-- 去重

-- 注意:字段只能写在DISTINCT后面当做去重来用,不能单独显示

SELECT DISTINCT name from student;

-- 求有多少行 行==一条记录(一条数据)

select count(name) from student;

select COUNT(sex) from student;

-- Sum函数返回满足where条件的行的和,仅对数值起作用,其他结果都是0

SELECT SUM(age) from student;

-- AVG函数返回满足where条件的一列的平均值

SELECT AVG(age) from student;

create table if not exists person(

id int(11) not null,

name VARCHAR(255) not null,

address01 VARCHAR(255),

address02 VARCHAR(255),

PRIMARY KEY(id))engine=InnoDB default charset=utf8;

select * from person;

INSERT INTO person (id,name,address01,address02) VALUES(1002,'ls','浙江','温州');

-- 拼接 -

-- CONCAT(str1,str2,...)

select id,name,CONCAT(address01,address02)from person;

-- CONCAT_WS(separator,str1,str2,...)

select id,name,CONCAT_ws(':',address01,address02)from person;

-- 时间操作

-- 获取时间

SELECT CURRENT_DATE();

select CURRENT_TIMESTAMP()

-- 时间转str

-- DATE_FORMAT(date,format)

select DATE_FORMAT(CURRENT_DATE(),'%Y:%m:%d');

-- str->date

-- '2021-09-04'

-- 需要格式匹配

select STR_TO_DATE('2021-09-04','%Y-%m-%d');

-- 时间相加减

-- 时间相减

-- DATEDIFF(expr1,expr2)

select DATEDIFF('2021-09-02','2021-09-03');

-- interval时间相加

-- DATE_ADD(date,INTERVAL expr unit)

select DATE_ADD('2021-09-03',INTERVAL +20 day)

-- 保留小数

-- SELECT ROUND(1)四舍五入

-- SELECT ROUND(1.2,0),后面是保留小数的个数

-- 向上取整 CEIL(X)

-- select CEIL(1.2)

-- 向下取整 FLOOR(X)

-- 分组,有几组数据就显示几条,默认每组第一条

select * from student group by sex;

select *from student GROUP BY job;

select MIN(age),name,id,sex,job from student GROUP BY sex;

SELECT MAX(age) from student;

-- 子查询

select * from student where age=(SELECT MAX(age) from student);

-- 筛选where having

-- 可以做普通的筛选

select * from student where age >20;

select * from student having age >20;

-- select max(age) as c from student where age=c;

-- select max(age) as c from student having age=c;

-- 执行顺序from->group by->select->where/having

-- where不能识别聚合函数

select count(*) as c,sex from student GROUP BY sex where c>3;

select count(*) as c,sex from student GROUP BY sex HAVING c>3;

-- 执行顺序from->where->SELECT

select id,name,sex from student where job='a';

-- from->select->having

select id,name,sex from student having job='a';

-- where的优先级比having高,where对所有数据筛选,having可以对select处理过的数据再加工

select name,job from student where sex='男' having job='a';

-- 子查询语句

select * from student where age=(select MAX(age) from student);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值