mysql的常用语句操作

数据库的简介:

数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。
典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。
关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。
主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。
数据表:数据表是关系数据库的基本存储结构,二维数据表有行(Row),和列(Column)组成,也叫作记录(行)和字段(列)。

SQL(Structured Query Language):结构化查询语言
SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操纵数据,定义数据,控制数据。

数据类型:

整型:
类型字节最小值最大值
有符号/无符号有符号/无符号
TINYINT1-128127
0255
SMALLINT2-3276832767
065535
MEDIUMINT3-83886088388607
016777215
INT4-21474836482147483647
04294967295
BIGINT8-92233720368547758089223372036854775807
018446744073709551615
浮点数类型和定点数类型;
类型字节负数的取值范围非负数的取值范围
Fioat4-3.402 823 466E+38~-1.175 494 351E-380和1.175 494 351E-38~ 3.402 823 466E+38
Double8-1.797 693 134 862 315 7E+308 -2.255 073 858 507 201 4E -3080和2.255 073 858 507 201 4E-308 ~1.797 693 134 862 315 7E+308
Decimal(M,D)M+2-1.797 693 134 862 315 7E+308~ -2.225 073 858 507 201 4E-3080和2.225 073 858 507 201 4E-308~ 1.797 693 134 862 315 7E+308

日期与时间类型;

%Y:代表4位的年份
%y:代表2为的年份

%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)

%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)

%H:代表小时,格式为(00……23)
%k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)

%i: 代表分钟, 格式为(00……59)

%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)

%S:代表 秒,格式为(00……59)

%s:代表 秒,格式为(00……59)

数据类型字节数取值范围日期格式
Year11901~2155YYYY
Date41000-01-01~9999-12-3YYYY-MM-DD
Time3-8383:59:59~838:59:59HH:MM:DD
Datetime81000-01-01 00:00::00~9999-12-31 23:59:59YYYY-MM-DDHH:MM:SS
TIMESTAMP41970-01-01 00:00:01~2038-01-19 03:14:07YYYYMMDD HHMMSS
//启动MySQL服务
//通过windows服务管理器启动MySQL
//查看MySQL是否启动
//通过cmd窗口输入命令:services.msc来查看
//通过DOS命令启动MySQL,
//必须以管理员身份运行:
//命令:启动:net start mysql
	//停止:net stop mysql
//登录mysql;使用相关命令登录:
//Mysql -h hostname -u root -p;
//Mysql -h localhost -u root -p;
//Mysql -u root -p;
//创建数据库和查看数据库
Create database 数据库名称;
比如:
Create database zsj(数据库名称)//查看所有数据库;
Show databasese;
查看某个数据库;(查看数据库的创建语句)
Show create  database zsj;
将数据库zsj的数据库编码修改为gbk;代码如下
Alter database zsj default character set gbk collate gbk_bin;
删除数据库;
Drop database 数据库名称;
SQL语法分类

SQL可以分为:
数据定义语言(DDL):Data Definition Language
数据操纵语言(DML):Data Manipulation Language
事务控制语言(TCL):Transaction Control Language
数据查询语言(DQL):Data Query Language
数据控制语言(DCL):Data Control Language

数据定义语言(DDL):

数据表的基本操作;

创建数据表
Create table zsj1(
Id int(11) ,
Name varchar(20),
Grade float
);
建表之后添加约束;
Alter table zsj1 add constraint primary key (id);

在创建表时添加约束
Create table zsj1(
Id int(11),
Name char(20),
Primary key(id)
);

查看数据表;
Show tables;
查看数据库下的指定的某张表;(查看建表语句;)
Show create table zsj;
使用describe语句查看数据表;(查看表的结构)
Desc zsj1;
修改数据表;
1,修改表名;
Alter table zsj1 rename to zsj2;
Alter table 旧表名 rename [to] 新表名;
2,修改字段名;
Alter table 表名 change 旧字段名 新字段名 新数据类型;
Alter table grade change name username varchar(20);
3,修改字段的数据类型;
Alter table 表名 modify 字段名 数据类型;
Alter table zsj1 modify id int(20);
4,添加字段
Alter table 表名 add 新字段名 数据类型 
【约束条件】【first|after 已存在字段名】
Alter table zsj1 add age int(10);
5,删除字段;
Alter table 表名 drop 字段名;
Alter table zsj1 drop age;
6,修改字段的排列位置;
Alter table 表名 modify 字段名1 数据类型 first|after 字段名2;
删除数据表;
Drop table 表名;
Drop table zsj1;

表的约束;说明
Primary key主键约束用于唯一标识
Foreign key外键约束
Not null非空约束
Unique唯一性约束
default默认值约束
主键约束Create table t88(
    Id int primary key,
	Name char(5),
Gender char(2),
Birthday date
     );

 添加约束:Create table t3 (
    Id int ,
	Name char(5),
Gender char(2),
Birthday date
     );
非空约束:
Create table t4 (
    Id int primary key,
	Name char(5)not null,
Gender char(2) ,
Birthday date
     );
唯一约束:
Create table t5 (
    Id int primary key,
	Name char(5)not null,
Gender char(2) unique,
Birthday date
     );
默认约束:Create table t6 (
    Id int primary key,
	Name char(5)not null,
Gender char(2) unique,
Score double default 60,
Birthday date

数据操纵语言DML(update,insert,delete)
添加数据;
为表中所有字段添加数据
1.	insert 语句指定所有字段名;
insert into 表名(字段名1,字段名2,…..)values (1,值2,…);
insert into zsj2(id,name,grade)values(1,’zhangsan’,99.5);
查看表中的数据
Select * from zsj2;
2,Insert语句中不指定字段名
由于insert语句中没有指定字段名,所以添加的值必须与字段在表中定义的顺序相同。
Insert into 表名 values(1,值2,……);
Inset into student values (3,’wangwu’,66.6);
3,为表的指定字段添加数据
就是在insert语句中只向部分字段中添加值,
Insert into 表名(字段1,字段2,。。。)values
(1,值2,‘’‘’);
比如:
Insert into student(id,name,)values(35,’赵胜杰’);
同时添加多条记录;
语法格式:
Insert into 表名(字段名1,字段名2,..)
Values(1,值2,。。。),(值1,值2,。。。);
在上述语法格式中,“(字段1,字段2,。。。)”是可选的,用于指定插入的字段名,
“(值1,值2,。。。)”表示要插入的记录,可插入多条,并且每条记录用逗号隔开。
比如:
Insert into zsj values (1,’zss’),
(2,‘zss’),
(3,’zss’);
如果在某个字段中没有给它添加值,系统会为它自动添加默认值NULL3.2更新数据;
语法格式:
Update 表名
Set 字段1=1,字段2=2
Where条件表达式

Where条件表达式是可选的,用于指定更新数据需要满足的条件。
Update语句可以更新部分数据和全部数据。
Update更新部分数据;
更新表中一条或几条数据,需要使用where子句来指定更新记录的条件;
比如:
Update student set name=’caocao’,grade=50
Where id=1;
Update 更新全部数据;
Update student set grade=80;
这个
3.3删除数据
MySQL中长使用delete语句来删除表中的记录;
语法格式:
Delete from 表名 where[条件表达式]Where条件表达式为可选参数;delete语句可以删除部分语句和全部语句;
Delete删除部分语句;
Select * from student 
Whereid =11;
可以查看是否删除成功;
Select * from student 
Where id=11;
Delete删除全部数据;
Delete from student;
使用truncate删除表中数据
Truncate table 表名;
比如:
Truncate table student;

Truncate语句和detele语句的区别;
(1),delete语句是DML语句,truncate语句是DLL语句;
(2),delete语句后面可以跟where子句,通过指定where子句中的条件只删除满足条件的部分记录;而truncate语句只能删除表中所以的记录;
(3),使用truncate语句删除表中的数据后,再次向表中添加记录时,自动增加字段的默认初始值重新由1开始,而使用delete语句删除表中所有记录后,再次向表中天记录时,自动增加的值为删除时该字段的最大值加1;
如图所示:
在这里插入图片描述
这里注意:使用delete语句时,每删除一条记录都会在日志中记录,而truncate语句不会记录,所以truncate语句的执行效率比delete语句高;
注意:使用delete语句删除后不用commit语句提交既可以进行回滚(rollback),而truncate语句默认不能回滚(roollback)

添加数据:
创建一张名为 score的表,表中各字段名及数据类型为:
sno (varchar(20)), cno (varchar(20)),degree (decimal,并且将sno设为主键,为cno添加非空约束,
向score表中插入以下数据:
     sno          cno        degree
     103         3-245         86 
     105         3-245         75         
     109         3-245         68         
     101         3-105         92         
     107         3-105         88         
     108         3-105         76         
     109         3-105         64         
     104         3-105         91         
     100         3-105         78         
     102         6-166         85         
     104         6-166         79         
     109         6-166         81       

create table score(
sno varchar (20) primary key,
     cno varchar(20) not null,
     degree decimal
     );

insert into score values
('103','3-245','86'),
('105','3-245','75'),         
('108','3-245','68'),         
('101','3-105','92'),         
('107','3-105','88'),        
('106','3-105','76'),         
('109','3-105','64'),         
('104','3-105','91'),         
('100','3-105','78'),         
('102','6-166','85'),         
('120','6-166','79'),         
('110','6-166','81');


数据查询语言DQL(select)
Select [distinct](注释)*|{字段名1,字段名2.。。。。}
From 表名
1.Select * from t1;(查询所有列)
2.Select id from t1;(查看id)
3.Select name from t1;
4.Select id,name from t1;(查看多列)
5.select name from t1 where id=2;(查询单个)
4.1简单查询;
Select语句;
Selectdistinct* |字段1,字段2,字段3,。。。 
from 表名 [where 条件表达式1]
[GROUP BY 字段名 [HAVING条件表达式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET] 记录数]1),select [distinct]*|字段1,字段2,。。。“字段1,字段2,”表示表中查询的指定字段,(*)通配符表示所有字段,二者为互斥关系,任选其一,
“dsitinct”是可选参数,用于剔除查询结果的重复的数据;
FROM表名:表示从指定的表中查询数据;
(4),GROUP BY字段名[HAVING 条件表达式2]:“GROUP BY ”是可选参数,用于将查询结果按照指定的字段进行分组,“HAVING”也是可选参数,用于对分组后的结果进行过滤;
(5),ORDER BY 字段名[ASC|DESC]:“ORDER BY”是可选参数,用于将查询结果按照指定字段进行排序。排序方式由参数ASCDESC控制,其中ASC是升序,DESC是降序,如果不指定参数,默认为升序。
(6),LIMIT[OFFSET]记录数:“LIMIT”是可选参数,用于限制查询结果的数量。LIMIT后面可以跟两个参数,“OFFSET”表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,如果为1从第二条开始,以此类推。
OFFSET为可选参数,如果不指定其,默认值为,记录数表示返回查询的记录条数;
4.2.1查询所有字段
Select 字段1,字段2,。。。from 表名;
Create table wsh2(id int (3) primary key auto_increment,
Name varchar(20) not null,
Grade float,
Gender  char(2)
);
Insert into wsh2(name,grade,gender)
Values(‘wsh’,80,’男’),
‘wsh’,80,’男’),
‘wsh’,80,’男’),
‘wsh’,80,’男’),
‘wsh’,80,’男’),
‘wsh’,80,’男’),
‘wsh’,80,’男’),
‘wsh’,80,’男’);select语句来查询wsh表中的记录;
Select id,grade,gender from wsh;
2.select语句中使用("*”)通配符代替所有字段;
3.	Select * from 表名;
4.1.3查询指定字段;
Select name,gender from wsh;
4.2按条件查询;
语法格式:
Select 字段名1,字段2,。。。 
from 表名
where条件表达式;
关系算符中<>!=都表示不等于
Select id,name,from wsh where id>8;
4.2.2IN关键字的查询;
IN关键字用于判断某个字段的值是否在指定的集合中,如果字段的值在集合中,则满足条件;
语法格式:
Select * |字段1,字段2,。。。
From 表名
Where 字段名[NOT]  IN (元素1,元素2,。。。);
“元素1,元素2,。。。”表示集合中的元素,即指定的条件范围,NOT是可选参数
可查询不在IN关键字指定集合范围中的记录;
查询wsh表中id为123的记录;
Select id,grade,gender from wsh where id in(1,2,3);
使用NOT INSelect id,grade,gender from wsh where id not in(1,2,3);
4.2.3between and 关键字的查询;
BETWEEN AND用于判断某个字段的值是否在指定的范围之内,如果在则满足条件,该字段所在的记录会被查询出来,反之则不会;
语法格式:
Select * |字段1,字段2,。。。
From 表名
Where 字段名 [NOT] BETWEEN1AND2;
比如:
Select id,name from student where id between 1and3;
将会查询出所有13的记录;
BETWEEN AND之前也可以使用NOT,表示查询指定的范围之外的记录;
Select id,name from student where id not between 1and3;
4.2.4空值查询
在数据表中,某些列的值可能为空值(NULL),空值不同于0,也不同于空字符串。在NySQL中使用IS NULL关键字来判断字段的值是否为空值。
语法格式:
Select *|字段1,字段2,。。。
From 表名
Where 字段名 IS [NOT] NULL;NOT”是可选参数;
查询student表中gender为空值的记录;
Select gender from student where gender is null;
查询student表中gender不为空值的记录;
Select gender from student where gender is not null;
4.2.5DISTINCT关键字的查询;
很多表中某些字段的数据存在重复的值,需要过滤掉查询记录中重复的值,可以使用DISTINCT关键字来实现这种功能;
语法格式:
Select distinct 字段名 from 表名;
Select distinct id from student;
DISTINCT关键字作用于多个字段
Select distinct 字段名1,字段2,。。。
From 表名;

Select distinct id,name,gender,grade from student;
只有两个字段的值否相同时才会被认为是重复;


4.2.6LIKE关键字的查询;
有时候需要对字符串进行模糊查询,例如查询student表中name字段值以字符“b”开头的记录,为了完成这种功能,MySQL中提供了LIKE关键字可以判断两个字符串是否相匹配。使用LIKE关键字的select 语法格式;
Select *|字段1,字段2,。。。
From 表名
Where 字段名 [NOT] LIKE ’匹配字符串’;
Not表示不匹配的字符串记录;
“匹配字符串”指定用来匹配的字符串,其值可以是一个普通字符串,也可是包含(%)(_)的通配符。
1,	百分号(%)通配符;
2,	匹配任意长度的字符串,包括空字符串。例如,查找student表中name字段值一字
“s”开头的学生id;
Select id,name from student where like name “s%;
查询一字符”w”开始以字符”g”结尾的学生id;
Select id,name from student where name “w%g”;
在通配符字符串中可出现多个%;
查询包含”y”的学生id,
Select id,name from student where name like%y%;
无论y在什么位置都可以查询出来;
LIKE之前可使用NOT,查询与指定通配字符串不匹配的记录
Select id,name from student where name not like%y%;
下滑线(_)通配符;
下划线通配符只匹配单个字符,如果要匹配多个字符,需要使用多个_。
1查询stundent表中name字段值以字符串”wu”开始,以字符串”ong”结尾的
,并且两个字符串之间只有一个字符串的记录,
Select * from student where name like ‘wu_ong’;
查询student吧中name字段值包含7个字符,并且以字符串”ing”结束的记录;
2.select * from student where name like ‘____ing’;
使用百分号和下划线通配符进行查询操作
如果要匹配字符串中的百分号和下划线,就需要在通配字符串中使用右斜线(“\”)
对百分号和下划线进行转义,”\%”匹配百分号字面值,”\_”匹配下划线字面值。
4-21查询student表中name字段值包括”%”的记录。
添加
Insert into student (name,grade,gender)
Values(‘sun%er’,95,’男’);
查询
Select * from student where name like%\%%4.2.7AND关键字的多条件查询
使用AND关键字可以连接两个或多个查询条件,只有满足所有条件的记录才会被返回。
语法格式:
Select *|字段1,字段2,。。。
From 表名
Where 条件表达式1 AND 条件表达式2[…….AND条件表达式n];
查询student 表中id字段值小于5,并且gender字段值为”女”的学生姓名。
语法:
Select id,name,gender from student where id<5 AND gender=’女’;
查询student表中id字段值在1,2,3,4之中,name字段值以字符串”ng”结束。并且grade值小于80的记录。
Select id,name,grade,gender from student where id in(1,2,3,4) and name like%ng’ and grade<80;
4.2.8OR关键字的多条件查询
OR关键字可连接多个查询条件,在使用OR关键字时,只有记录满足任意一个条件就会被查询出来。
语法格式:
Select * |字段1,字段2,。。。。
From 表名
Where 条件表达式1 OR 条件表达式2[……OR 条件表达式n];
查询student表中id字段值小于3或者字段值为’女’的学生名.
Select id,name,gender from student where id<3 or gender=’女’;
多学一招;
ORAND关键字一起使用的情况;
ORAND关键字可以一起使用,需要注意的是,AND的优先级高于OR
分组查询与分页查询(group by,limit)
4.3高级查询;
函数名	作用	函数名	作用
Count()
Sum()
Avg()	返回某列的行数
返回某列值得和
返回某列的平均值	MAX()
MIN()	返回某列的最大值
返回某列的最小值
上面的函数用于对一组值进行统计
1COUNT()函数
2COUNT()函数用于统计记录的条数,语法格式:
Select COUNT(*) from 表名;
比如:
Select count(*) from student;
2.SUM函数
SUM()是求和函数,用于求出表中某个字段所以值得总和。
Select SUM(字段名) from student;
比如:
Select SUM(id) from student;
4.	AVG函数
AVG()用于球平均值
Select AVG(字段名) from student;
5.	MAX函数
MAX函数用于球最大值
Select MAX(字段名) from student;
6.	MIN函数
Select MAX(字段值) from student;
4.3.2对查询结果排序
使用ORDER BY对查询结果进行排序
语法格式:
Select 字段1.字段2,。。。。
From 表名
ORDER BY 字段1[ASC|DESC],字段2[ASC|DESC];
ASC=升序排序;
DESC=降序排序;
默认情况下用ASC4-32
查询student表中的所有记录,并按照grade字段进行排序
Select * from student;
ORDER BY grade;
对指定的字段grade进行排序,默认是按照ASC方式进行排序的;
4-33
查询student表中的所有记录,使用参数ASC按照grade字段进行排序
Select * from student ORDER BY grade ASC;
4-34
查询student表中的所有记录,使用参数DESC按照grade字段进行排序
Select * from student ORDER BY grade desc;
4-35
查询student表中的所有记录,按照grade的升序和按照grade得到降序排序;
Select * from student ORDER BY grade asc,grade desc;
注意:
在按照指定字段进行排序时,如果某条记录的字段值为NULL,则这条记录会显示在第一条,因为NULL值可以被认为是最小值。
4.3.3分组查询
在对表中数据进行统计时,也可能需要按照一定的类别进行统计,比如,分别统计student表中gender字段值为”男”、“女”和“NULL”的学生成绩之和,在MySQL中可以使用GROUP BY 按某个字段或者多个字段中的值进行分组,字段中值相同的为一组。
Select 字段1,字段2,。。。
From 表名
GROUP BY 字段1,字段2,。。。[HAVING 条件表达式];
HAVING关键字指定条件表达式对分组后的内容进行过滤。GROUP BY 一般聚合函数一起使用,如果查询的字段在GROUP BY 后,却没有包含在聚合函数中,该字段显示的是分组后的第一条记录的值,会导致查询结果不符合我们的预期。
1.	单独使用GROUP BY 分组
查询的是每个分组中的一条记录;
Select * from student group by gender;
2.	GROUP BY 和聚合函数一起使用
可以统计出某个或者某个字段在一个分组中的最大、最小、平均值
4-37
将student表按照gender字段值进行分组查询,计算出每个分组中各有多少名学生;
Select count(*),gender from student group by gender;
GROUP BY 对student 表按照gender字段中的不同值进行了分组,并通过COUNT()函数统计出gender字段值为“NULL”的学生有一个,gender字段值为“男”的学生有5个,为“女”的有2个;
3.	GROUP BYHAVING 关键字一起使用;
HAVING关键字和WHERE关键字的作用相同,都用于设置条件表达式对查询结果进行过滤,但是HAVING关键字后可以跟聚合函数,而WHERE关键字不能。一般情况下HAVING关键字和GROUP BY一起使用,用于对分组的结果进行过滤。
4-38将student表按照gender字段进行分组查询,查询出grade字段值之和小于300的分组。
Select sum(grade),gender from student group by gender having (grade)<300;
Select gender,sum(grade) from student froup by gender having(grade)<300;
下面对gender值为“男”的所有学生其grade字段值之和进行查询,
Select gender,sum(grade) from student where gender=’男’;
4.3.4使用LIMT限制查询结果的数量;
查询数据时,可能会反回多条记录,而用户需要的记录可能只是其中的一条或几条,
实现分页功能,每页显示10条信息,每次查询就只需要查出10条记录。MySQL中提供了一个关键字LIMIT,可以指定查询结果从那一条记录开始以及一共查询多少条记录
语法格式:
Select 字段1,字段2,。。。
From 表名
LIMT [OFFSET,] 记录数
在上面的语法格式中,LIMIT后面可以跟两个参数,第一个参数“OFFSET”表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,偏移量为1则从查询结果的中的第二条记录开始,以此类推。OFFSET为可选值,如果不指定其默认值为0.第二个参数“记录数”表示返回查询记录的条数。
4-39查询表中前4条记录;
Select * from student limit 4;
查询student表中grade字段值从第5位到第8位的学生(从高到低)
Select * from student order by grade desc limit 4,4;
使用order by。。。desc使学生按照grade字段值从高到低进行排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值