mysql day1

数据库:文件夹
表:文件
数据:文件中的数据

SQL

结构化查询语言

以单行或多行书写,分号结尾

语句不区分大小写,但是关键字建议使用大写。

单行注释:

– 注释内容(两个横 一个空格)

#注释内容

多行注释:
/注释内容/

在这里插入图片描述

DDL

操作数据库:CRUD
1.create:创建

create datebase ***;//创建数据库
create database if not exists ***;//如果存在就不会创建
create database *** character set gbk;//字符集设置为gbk(默认utf-8)
注意:可以联合使用

2.retrieve:查询

show databases;//查看数据库名称
show create database ***;//查看对应的字符集,查询某个数据库的创建语句

3.updata:修改

alter database *** character set 字符集名称;//修改***的字符集为你想改的字符集的名字

4.delete:删除

drop database ***;//删除数据库 
drop database if exists ***;//如果存在就删除

5.使用数据库

select database();//查询当前正在使用的数据库
use ***;//使用数据库

操作表
1.create:创建

create table 表名(
	列名1 数据类型1,
	列名2 数据类型2,
	...
	列名n 数据类型n
);//注意 最后一列不需要逗号
int 整数类型:
	age int,
double 小数类型:
	double score(5,2), //最多有5位,小数点后面保留两位(999.99)
date 日期类型,包含年月日:
	yyyy-MM-dd
datetime 日期,包含年月日时分秒:
	yyyy-MM-dd HH:mm:ss
timestamp 时间错类型://如果将来不给这个字段赋值,那么就用系统时间,简化开发
	yyyy-MM-dd HH:mm:ss
varchar 字符串:
	name varchar(20)  //姓名最大字符20
eg:
create table student(
	id int,
	name varchar(32),
	age int,
	score double(4,1),
	birthday date,
	insert_time timestamp
);
create table ** like student;//复制一份student给**

2.retrieve:查询

show tables;//查询某个数据库中所有表的名称
desc **;//查询表结构
show create table **;//查看表的字符集

3.updata:修改

alter table ** rename to **;//修改表名
alter table character set utf8;//修改表的字符集
alter table ** add 列名 数据类型;//添加列
alter table ** change 旧列名 新列名 新数据类型; //修改列名字 类型
alte table ** modify 列名 新数据类型;//修改数据类型
//删除列

4.delete:删除

drop table **;
drop table if exists **;

DML:增删改表中数据

1.添加数据

insert into 表名(列名1,...,列名n) values(1,...,值n);
/*注意事项:
1.列名和值一一对应。不给值就写NULL。
2.如果表名后,不定义列名,是给所有列添加数值。
3.除了数字类型,其他类型需要使用引号。*/

2.删除数据

delete from 表名 [where 条件];//删除指定数据 那一行的全部删除
//eg:
//delete from stu where id=1;
/*注意:不加条件会删除所有记录。但是删除的效率低*/

truncate table 表名;//删除表,再创建一个一模一样的空表,删除效率高

3.修改数据

update 表名 set 列名1 =1,...,列名n = 值n [where 条件];
//eg:
//updata stu set id = 3 where id = 2;
/*注意事项:如果不条件,则会将表中的所有记录全部修改*/

DQL:查询表中记录

select
	字段列表
from
	表名列表
where
	条件列表
group by
	分组字段
having
	分组之后的条件
order by
	排序
limit
	分页

基础查询
1.多个字段的查询

select 想查询的列1...,想查询的列n(列的名字) from 表名;//查询特定的字段,并且可以加注释
select * from 表名;//查询所有数据

2.去除重复

select distinct * form 表名;//去重复查询,重复的不会显示

3.计算列

select name,math,english,math+english form 表名;//如果有null参与,计算结果都为null
select name,math,english,math+ifnull(english,0) form 表名;
//如果English为NULL,则赋值为0

4.起别名

select 列1 (as) 别名1,... (as) 别名,列n as 别名n from 表名;

在这里插入图片描述

条件查询
1.where字句跟条件
2.运算符
** > < <= >= = <>
** between…and
** in
** like:(_:单个任意字符 %: 多个任意字符)
** is null
** and 或者 &&
** or 或者 ||
** not 或者 !

select * from stu where age >= 20;//查询年龄大于等于20
select * from stu where age <> 20;//查询年龄不等于20
select * from stu where age >= 20 and age <= 30;//查询20到30
select * from stu where age between 20 and 30;//查询20到30
select * from stu where age = 18 or age = 19;//查询18或者19
select * from stu where age in(18,22,25);//查询18,22,25

/*注意事项:null值只能用 is 判断*/
select * from stu where age is null;
select * form stu where age is not null;

//模糊查询
select * from stu where name like '马%';//查询姓马的
select * from stu where name like '_化%';//查询某化...
select * from stu where name like '%马%';//查询名字有马的

排序查询

select * from stu order by math;//默认为升序ASC
select * from stu order by math DESC;//降序排序

select * from stu order by math DESC, english ASC;//如果数学成绩相同,再按照英语成绩排

聚合函数
将一列数据作为一个整体,进行纵向计算
1.count:计算个数
2.max:最大值
3.min:最小值
4.sum:和
5.avg平均值

/*注意:聚合函数会排除NULL值*/ifnull(math,0)可解决,或者写主键这一列
select count(name) from stu;//计算name的个数
select max(math) from stu;//max,avg,sum,min用法差不多

分组查询

/*注意前面必须要加分组的字段,后面也要写by sex*/
select sex,avg(math) form stu group by sex;//性别分组
select sex,avg(math),count(id) form stu group by sex;//性别分组,也可以查多个
//要求分数低于70不参与分组
select sex,avg(math),count(id) form stu	where math > 70 group by sex;//分组前对条件进行限定
//分组人数大于2才显示
select sex,avg(math),count(id) form stu	where math > 70 group by sex having count(id) > 2;

where和having的区别
where在分组前进行限定 ,不能判断聚合函数
having在分组之后进行限定 , 能够判断聚合函数

分页查询

//每页显示三条记录
select * from stu limit 0,3;//第一页
select * from stu limit 3,3;//第二页
//公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
//limit只能在mysql用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值